Compare commits

...

116 Commits

Author SHA1 Message Date
b622946844 10.24.0 2018-10-19 11:14:27 +09:00
f14c372f5e Resolve #2719 2018-10-19 11:10:49 +09:00
f028800a96 10.23.1 2018-10-19 10:26:16 +09:00
8a1ce7a4f3 Merge pull request #2934 from syuilo/l10n_develop
New Crowdin translations
2018-10-19 10:25:19 +09:00
ea7a139ae0 New translations ja-JP.yml (English) 2018-10-19 10:21:31 +09:00
63959eb3da New translations ja-JP.yml (Norwegian) 2018-10-19 10:12:38 +09:00
a6adbc4e56 New translations ja-JP.yml (Dutch) 2018-10-19 10:12:33 +09:00
b418cb67ba New translations ja-JP.yml (Japanese, Kansai) 2018-10-19 10:12:29 +09:00
0ccc360c0a New translations ja-JP.yml (Spanish) 2018-10-19 10:12:24 +09:00
1e0dda3c40 New translations ja-JP.yml (Russian) 2018-10-19 10:12:20 +09:00
9197793bc8 New translations ja-JP.yml (Portuguese) 2018-10-19 10:12:16 +09:00
29f62241bc New translations ja-JP.yml (Polish) 2018-10-19 10:12:12 +09:00
8de1e91dec New translations ja-JP.yml (Korean) 2018-10-19 10:12:08 +09:00
de822a22d4 New translations ja-JP.yml (Italian) 2018-10-19 10:12:05 +09:00
f2cef456bd New translations ja-JP.yml (German) 2018-10-19 10:11:59 +09:00
5d681d0fd6 New translations ja-JP.yml (French) 2018-10-19 10:11:55 +09:00
2ed24ebd75 New translations ja-JP.yml (English) 2018-10-19 10:11:51 +09:00
6e6824ecb0 New translations ja-JP.yml (Chinese Simplified) 2018-10-19 10:11:47 +09:00
0504a4f659 New translations ja-JP.yml (Catalan) 2018-10-19 10:11:42 +09:00
9a261755d2 Fix key 2018-10-19 10:05:30 +09:00
8533663b26 ✌️ 2018-10-19 09:20:11 +09:00
0a4015b8a2 Refactoring 2018-10-19 09:19:55 +09:00
dcfe56322e New translations ja-JP.yml (Norwegian) 2018-10-19 07:12:41 +09:00
d00a693026 New translations ja-JP.yml (Dutch) 2018-10-19 07:12:35 +09:00
fb36ecad70 New translations ja-JP.yml (Japanese, Kansai) 2018-10-19 07:12:32 +09:00
26c39768ca New translations ja-JP.yml (Spanish) 2018-10-19 07:12:28 +09:00
df8abcfce8 New translations ja-JP.yml (Russian) 2018-10-19 07:12:24 +09:00
e3aab0e9e3 New translations ja-JP.yml (Portuguese) 2018-10-19 07:12:18 +09:00
e3dfc49ed0 New translations ja-JP.yml (Polish) 2018-10-19 07:12:14 +09:00
8485284f63 New translations ja-JP.yml (Korean) 2018-10-19 07:12:10 +09:00
e549e19c03 New translations ja-JP.yml (Italian) 2018-10-19 07:12:06 +09:00
2ace47cbb9 New translations ja-JP.yml (German) 2018-10-19 07:12:02 +09:00
dc184e7bc9 New translations ja-JP.yml (French) 2018-10-19 07:11:57 +09:00
aef1bd094b New translations ja-JP.yml (English) 2018-10-19 07:11:53 +09:00
4f8b22f53b New translations ja-JP.yml (Chinese Simplified) 2018-10-19 07:11:48 +09:00
0f3cbafe91 New translations ja-JP.yml (Catalan) 2018-10-19 07:11:44 +09:00
16ad232c40 10.23.0 2018-10-19 07:06:41 +09:00
4d235a2be5 Merge pull request #2931 from syuilo/l10n_develop
New Crowdin translations
2018-10-19 07:05:44 +09:00
aadf6fa9b1 UI整理 2018-10-19 07:03:29 +09:00
a72e9bc8b2 New translations ja-JP.yml (English) 2018-10-19 07:02:12 +09:00
f11ef93a81 🎨 2018-10-19 06:57:57 +09:00
9136556218 New translations ja-JP.yml (Norwegian) 2018-10-19 06:52:58 +09:00
3ead008295 New translations ja-JP.yml (Dutch) 2018-10-19 06:52:54 +09:00
9ff5693442 New translations ja-JP.yml (Japanese, Kansai) 2018-10-19 06:52:48 +09:00
ac84b42394 New translations ja-JP.yml (Spanish) 2018-10-19 06:52:44 +09:00
a79361c71f New translations ja-JP.yml (Russian) 2018-10-19 06:52:38 +09:00
85e17d5dc7 New translations ja-JP.yml (Portuguese) 2018-10-19 06:52:35 +09:00
45493fd093 New translations ja-JP.yml (Polish) 2018-10-19 06:52:29 +09:00
6f987a2391 New translations ja-JP.yml (Korean) 2018-10-19 06:52:24 +09:00
ddf785a393 New translations ja-JP.yml (Italian) 2018-10-19 06:52:18 +09:00
b8e20fe717 New translations ja-JP.yml (German) 2018-10-19 06:52:15 +09:00
82555bf9b6 New translations ja-JP.yml (French) 2018-10-19 06:52:11 +09:00
ffe6f6c168 New translations ja-JP.yml (English) 2018-10-19 06:52:05 +09:00
6b11f5bb7d New translations ja-JP.yml (Chinese Simplified) 2018-10-19 06:52:01 +09:00
1a65d14864 New translations ja-JP.yml (Catalan) 2018-10-19 06:51:57 +09:00
6c1f1ffdb1 デッキのカラムを左揃えか中央揃えか選べるように 2018-10-19 06:47:55 +09:00
61cdbd5dd2 New translations ja-JP.yml (English) 2018-10-19 06:41:45 +09:00
e7e321e2b3 fix(package): update vue-sweetalert2 to version 1.5.6 (#2932) 2018-10-19 06:38:46 +09:00
fb5f6fdc10 未読の投稿をすべて既読にできるように 2018-10-19 06:36:59 +09:00
00290fbf75 Fix bug 2018-10-19 06:29:25 +09:00
ff02dc723b 🎨 2018-10-19 06:24:15 +09:00
67521c0d2a New translations ja-JP.yml (Norwegian) 2018-10-19 06:23:12 +09:00
da8765150b New translations ja-JP.yml (Dutch) 2018-10-19 06:23:06 +09:00
ea7f51bc12 New translations ja-JP.yml (Japanese, Kansai) 2018-10-19 06:23:02 +09:00
1b34b3b7e2 New translations ja-JP.yml (Spanish) 2018-10-19 06:22:59 +09:00
bca4ceb7ae New translations ja-JP.yml (Russian) 2018-10-19 06:22:53 +09:00
5648cd53d0 New translations ja-JP.yml (Portuguese) 2018-10-19 06:22:49 +09:00
8dab37539f New translations ja-JP.yml (Polish) 2018-10-19 06:22:45 +09:00
2dd42c0061 New translations ja-JP.yml (Korean) 2018-10-19 06:22:39 +09:00
dfafed504a New translations ja-JP.yml (Italian) 2018-10-19 06:22:35 +09:00
9fcd2bcb0a New translations ja-JP.yml (German) 2018-10-19 06:22:29 +09:00
4c701b91a6 New translations ja-JP.yml (French) 2018-10-19 06:22:25 +09:00
84f7aa6d09 New translations ja-JP.yml (English) 2018-10-19 06:22:21 +09:00
82f0c64dee New translations ja-JP.yml (Chinese Simplified) 2018-10-19 06:22:18 +09:00
4b7c6b124b New translations ja-JP.yml (Catalan) 2018-10-19 06:22:14 +09:00
e043b678d4 i18n 2018-10-19 06:21:11 +09:00
fef4f7fce8 #2930 (#2933)
* wip

* wip

* Clean up

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* 🎨

* wip

* wip
2018-10-19 06:18:33 +09:00
9732b3521a New translations ja-JP.yml (French) 2018-10-18 07:13:01 +09:00
a59fcc4aec New translations ja-JP.yml (French) 2018-10-18 07:03:14 +09:00
979e1e78fb New translations ja-JP.yml (French) 2018-10-18 06:51:20 +09:00
c1a929022f Merge pull request #2929 from syuilo/l10n_develop
New Crowdin translations
2018-10-18 05:15:59 +09:00
611bb81032 Merge pull request #2928 from syuilo/greenkeeper/webpack-4.21.0
Update webpack to the latest version 🚀
2018-10-18 05:15:43 +09:00
5047020e6d New translations ja-JP.yml (German) 2018-10-18 05:12:23 +09:00
fb74a6a689 New translations ja-JP.yml (German) 2018-10-18 05:03:26 +09:00
a14a216c8d New translations ja-JP.yml (English) 2018-10-18 05:03:19 +09:00
549e212a59 New translations ja-JP.yml (English) 2018-10-18 04:52:34 +09:00
1bdc91ad47 New translations ja-JP.yml (German) 2018-10-18 04:42:28 +09:00
67f288479c New translations ja-JP.yml (English) 2018-10-18 04:42:22 +09:00
496e45c2bb New translations ja-JP.yml (German) 2018-10-18 04:32:18 +09:00
e458bd3cc7 New translations ja-JP.yml (English) 2018-10-18 04:32:12 +09:00
031911c463 New translations ja-JP.yml (German) 2018-10-18 04:21:47 +09:00
4aa7f638f9 New translations ja-JP.yml (German) 2018-10-18 04:20:03 +09:00
f6f4ea69ae fix(package): update webpack to version 4.21.0 2018-10-17 17:54:09 +00:00
ef945597f2 Merge pull request #2926 from syuilo/l10n_develop
New Crowdin translations
2018-10-17 22:43:47 +09:00
3ab4e1d368 fix(package): update showdown to version 1.8.7 (#2925) 2018-10-17 22:43:23 +09:00
c6216f5b5f fix(package): update @types/elasticsearch to version 5.0.28 (#2924) 2018-10-17 22:43:04 +09:00
4f24d58a79 Make clear elasticsearch is required and not optional for the search to work (#2927) 2018-10-17 22:42:45 +09:00
73d6e7ba66 New translations ja-JP.yml (Japanese, Kansai) 2018-10-17 13:21:23 +09:00
949707e18e New translations ja-JP.yml (Japanese, Kansai) 2018-10-17 13:12:49 +09:00
f51b299c17 10.22.1 2018-10-17 05:54:52 +09:00
d2e0faa533 Disable secure cookie 2018-10-17 05:54:31 +09:00
22015044a5 10.22.0 2018-10-17 04:17:19 +09:00
61f86dcb2b Resolve #2923
Allow option to disable sending HSTS headers even if https:// is used in url
2018-10-17 04:15:41 +09:00
8f3bce6b11 Add some messaging API tests 2018-10-17 04:01:13 +09:00
ee736e73a9 Merge pull request #2922 from syuilo/greenkeeper/reconnecting-websocket-4.1.9
Update reconnecting-websocket to the latest version 🚀
2018-10-17 03:54:08 +09:00
99f867897e fix(package): update reconnecting-websocket to version 4.1.9 2018-10-16 18:53:19 +00:00
c66c5b6e75 Fix bug 2018-10-17 03:47:32 +09:00
f25ecc19b9 🎨 2018-10-17 03:41:55 +09:00
48e09970f3 Merge pull request #2921 from syuilo/l10n_develop
New Crowdin translations
2018-10-16 22:46:43 +09:00
f05cb79604 10.21.3 2018-10-16 22:26:43 +09:00
46d3293edd Fix #2920 2018-10-16 22:21:08 +09:00
9703d613cf 10.21.2 2018-10-16 20:59:49 +09:00
704e217dbb オブジェクトストレージのURLに拡張子を含めるように 2018-10-16 20:59:36 +09:00
92ba64c35c New translations ja-JP.yml (German) 2018-10-16 06:11:24 +09:00
a8ee51ffd6 New translations ja-JP.yml (German) 2018-10-16 05:51:14 +09:00
5538afc61d New translations ja-JP.yml (German) 2018-10-16 05:42:36 +09:00
61 changed files with 1680 additions and 1619 deletions

View File

@ -28,7 +28,7 @@ Please install and setup these softwares:
##### Optional ##### Optional
* [Redis](https://redis.io/) * [Redis](https://redis.io/)
* Redis is optional, but we strongly recommended to install it * Redis is optional, but we strongly recommended to install it
* [Elasticsearch](https://www.elastic.co/) - used to provide searching feature instead of MongoDB * [Elasticsearch](https://www.elastic.co/) - required to enable the search feature
*3.* Setup MongoDB *3.* Setup MongoDB
---------------------------------------------------------------- ----------------------------------------------------------------

View File

@ -416,6 +416,25 @@ common/views/components/visibility-chooser.vue:
common/views/components/trends.vue: common/views/components/trends.vue:
count: "{}人が投稿" count: "{}人が投稿"
empty: "トレンドなし" empty: "トレンドなし"
common/views/components/profile-editor.vue:
title: "プロフィール"
name: "名前"
account: "アカウント"
location: "場所"
description: "自己紹介"
birthday: "誕生日"
avatar: "アイコン"
banner: "バナー"
is-cat: "このアカウントはCatです"
is-bot: "このアカウントはBotです"
is-locked: "フォローを承認制にする"
careful-bot: "Botからのフォローだけ承認制にする"
advanced: "その他"
privacy: "プライバシー"
save: "保存"
saved: "プロフィールを保存しました"
uploading: "アップロード中"
upload-failed: "アップロードに失敗しました"
common/views/widgets/broadcast.vue: common/views/widgets/broadcast.vue:
fetching: "確認中" fetching: "確認中"
no-broadcasts: "お知らせはありません" no-broadcasts: "お知らせはありません"
@ -640,7 +659,7 @@ desktop/views/components/note-detail.vue:
location: "位置情報" location: "位置情報"
renote: "Renote" renote: "Renote"
add-reaction: "リアクション" add-reaction: "リアクション"
desktop/views/components/notes.note.vue: desktop/views/components/note.vue:
reposted-by: "{}がRenote" reposted-by: "{}がRenote"
reply: "返信" reply: "返信"
renote: "Renote" renote: "Renote"
@ -726,8 +745,11 @@ desktop/views/components/settings.vue:
advanced: "詳細設定" advanced: "詳細設定"
api-via-stream: "ストリームを経由したAPIリクエスト" api-via-stream: "ストリームを経由したAPIリクエスト"
api-via-stream-desc: "この設定をオンにすると、websocket接続を経由してAPIリクエストが行われます(パフォーマンス向上が期待できます)。オフにすると、ネイティブの fetch APIが利用されます。この設定はこのデバイスのみ有効です。" api-via-stream-desc: "この設定をオンにすると、websocket接続を経由してAPIリクエストが行われます(パフォーマンス向上が期待できます)。オフにすると、ネイティブの fetch APIが利用されます。この設定はこのデバイスのみ有効です。"
deck-nav: "デッキ内ナビゲーション"
deck-nav-desc: "デッキを使用しているとき、ナビゲーションが発生する際にページ遷移を行わずに一時的なカラムで受けるようにします。"
display: "デザインと表示" display: "デザインと表示"
customize: "ホームをカスタマイズ" customize: "ホームをカスタマイズ"
wallpaper: "壁紙"
choose-wallpaper: "壁紙を選択" choose-wallpaper: "壁紙を選択"
delete-wallpaper: "壁紙を削除" delete-wallpaper: "壁紙を削除"
dark-mode: "ダークモード" dark-mode: "ダークモード"
@ -739,17 +761,19 @@ desktop/views/components/settings.vue:
suggest-recent-hashtags: "最近のハッシュタグを投稿フォームに表示する" suggest-recent-hashtags: "最近のハッシュタグを投稿フォームに表示する"
show-clock-on-header: "右上に時計を表示する" show-clock-on-header: "右上に時計を表示する"
show-reply-target: "リプライ先を表示する" show-reply-target: "リプライ先を表示する"
timeline: "タイムライン"
show-my-renotes: "自分の行ったRenoteをタイムラインに表示する" show-my-renotes: "自分の行ったRenoteをタイムラインに表示する"
show-renoted-my-notes: "自分の投稿のRenoteをタイムラインに表示する" show-renoted-my-notes: "自分の投稿のRenoteをタイムラインに表示する"
show-local-renotes: "ローカルの投稿のRenoteをタイムラインに表示する" show-local-renotes: "ローカルの投稿のRenoteをタイムラインに表示する"
show-maps: "マップの自動展開" show-maps: "マップの自動展開"
deck-column-align: "デッキのカラムの位置"
deck-column-align-center: "中央"
deck-column-align-left: "左"
sound: "サウンド" sound: "サウンド"
enable-sounds: "サウンドを有効にする" enable-sounds: "サウンドを有効にする"
enable-sounds-desc: "投稿やメッセージを送受信したときなどにサウンドを再生します。この設定はブラウザに記憶されます。" enable-sounds-desc: "投稿やメッセージを送受信したときなどにサウンドを再生します。この設定はブラウザに記憶されます。"
volume: "ボリューム" volume: "ボリューム"
test: "テスト" test: "テスト"
mobile: "モバイル"
disable-via-mobile: "「モバイルからの投稿」フラグを付けない"
language: "言語" language: "言語"
pick-language: "言語を選択" pick-language: "言語を選択"
recommended: "推奨" recommended: "推奨"
@ -828,21 +852,6 @@ desktop/views/components/settings.password.vue:
enter-new-password-again: "もう一度新しいパスワードを入力してください" enter-new-password-again: "もう一度新しいパスワードを入力してください"
not-match: "新しいパスワードが一致しません" not-match: "新しいパスワードが一致しません"
changed: "パスワードを変更しました" changed: "パスワードを変更しました"
desktop/views/components/settings.profile.vue:
avatar: "アイコン"
choice-avatar: "画像を選択"
name: "名前"
location: "場所"
description: "自己紹介"
birthday: "誕生日"
save: "保存"
locked-account: "アカウントの保護"
is-locked: "フォローを承認制にする"
careful-bot: "Botからのフォローだけ承認制にする"
other: "その他"
is-bot: "このアカウントはBotです"
is-cat: "このアカウントはCatです"
profile-updated: "プロフィールを更新しました"
desktop/views/components/sub-note-content.vue: desktop/views/components/sub-note-content.vue:
private: "この投稿は非公開です" private: "この投稿は非公開です"
deleted: "この投稿は削除されました" deleted: "この投稿は削除されました"
@ -941,10 +950,8 @@ desktop/views/pages/deck/deck.tl-column.vue:
is-media-only: "メディア投稿のみ" is-media-only: "メディア投稿のみ"
is-media-view: "メディアビュー" is-media-view: "メディアビュー"
edit: "オプション" edit: "オプション"
desktop/views/pages/deck/deck.note.vue: desktop/views/pages/deck/deck.user-column.vue:
reposted-by: "{}がRenote" pinned-notes: "ピン留めされた投稿"
private: "この投稿は非公開です"
deleted: "この投稿は削除されました"
desktop/views/pages/stats/stats.vue: desktop/views/pages/stats/stats.vue:
all-users: "全てのユーザー" all-users: "全てのユーザー"
original-users: "このインスタンスのユーザー" original-users: "このインスタンスのユーザー"
@ -1221,24 +1228,6 @@ mobile/views/pages/notifications.vue:
read-all: "すべての通知を既読にしますか?" read-all: "すべての通知を既読にしますか?"
mobile/views/pages/games/reversi.vue: mobile/views/pages/games/reversi.vue:
reversi: "リバーシ" reversi: "リバーシ"
mobile/views/pages/settings/settings.profile.vue:
title: "プロフィール"
name: "名前"
account: "アカウント"
location: "場所"
description: "自己紹介"
birthday: "誕生日"
avatar: "アイコン"
banner: "バナー"
is-cat: "このアカウントはCatです"
is-locked: "フォローを承認制にする"
careful-bot: "Botからのフォローだけ承認制にする"
advanced: "その他"
privacy: "プライバシー"
save: "保存"
saved: "プロフィールを保存しました"
uploading: "アップロード中"
upload-failed: "アップロードに失敗しました"
mobile/views/pages/search.vue: mobile/views/pages/search.vue:
search: "検索" search: "検索"
empty: "「{}」に関する投稿は見つかりませんでした。" empty: "「{}」に関する投稿は見つかりませんでした。"

View File

@ -14,20 +14,20 @@ common:
rich-contents-desc: "自分の考え、話題の出来事、皆と共有したいことについて発信してください。必要であれば、様々な構文を使って投稿を装飾したり、好きな画像、動画などのファイルやアンケートを添付することもできます。" rich-contents-desc: "自分の考え、話題の出来事、皆と共有したいことについて発信してください。必要であれば、様々な構文を使って投稿を装飾したり、好きな画像、動画などのファイルやアンケートを添付することもできます。"
reaction: "Reaktionen" reaction: "Reaktionen"
reaction-desc: "あなたの気持ちを伝える最も簡単な方法です。Misskeyは、他のユーザーの投稿に様々なリアクションを付けることができます。いちどMisskeyのリアクション機能を体験してしまうと、もう「いいね」の概念しか存在しないSNSには戻れなくなるかもしれません。" reaction-desc: "あなたの気持ちを伝える最も簡単な方法です。Misskeyは、他のユーザーの投稿に様々なリアクションを付けることができます。いちどMisskeyのリアクション機能を体験してしまうと、もう「いいね」の概念しか存在しないSNSには戻れなくなるかもしれません。"
ui: "インターフェース" ui: "Benutzeroberfläche"
ui-desc: "どのようなUIが使いやすいかは人それぞれです。だから、Misskeyは自由度の高いUIを持っています。レイアウトやデザインを調整したり、カスタマイズ可能な様々なウィジェットを配置したりして、自分だけのホームを作ってください。" ui-desc: "どのようなUIが使いやすいかは人それぞれです。だから、Misskeyは自由度の高いUIを持っています。レイアウトやデザインを調整したり、カスタマイズ可能な様々なウィジェットを配置したりして、自分だけのホームを作ってください。"
drive: "ドライブ" drive: "Drive"
drive-desc: "以前投稿したことのある画像をまた投稿したくなったことはありませんかもしくは、アップロードしたファイルをフォルダ分けして整理したくなったことはありませんかMisskeyの根幹に組み込まれたドライブ機能によってそれらが解決します。ファイルの共有も簡単です。" drive-desc: "以前投稿したことのある画像をまた投稿したくなったことはありませんかもしくは、アップロードしたファイルをフォルダ分けして整理したくなったことはありませんかMisskeyの根幹に組み込まれたドライブ機能によってそれらが解決します。ファイルの共有も簡単です。"
outro: "他にもMisskeyにしかない機能はまだまだあるので、ぜひあなた自身の目で確かめてください。Misskeyは分散型SNSなので、このインスタンスが気に入らなければ他のインスタンスを試すこともできます。それでは、GLHF!" outro: "他にもMisskeyにしかない機能はまだまだあるので、ぜひあなた自身の目で確かめてください。Misskeyは分散型SNSなので、このインスタンスが気に入らなければ他のインスタンスを試すこともできます。それでは、GLHF!"
adblock: adblock:
detected: "広告ブロッカーを無効にしてください" detected: "Bitte deaktivieren Sie den Werbeblocker."
warning: "<strong>Misskeyは広告を掲載していません</strong>が、広告をブロックする機能が有効だと一部の機能が利用できなかったり、不具合が発生する場合があります。" warning: "<strong>Misskeyは広告を掲載していません</strong>が、広告をブロックする機能が有効だと一部の機能が利用できなかったり、不具合が発生する場合があります。"
application-authorization: "アプリの連携" application-authorization: "Autorisierte Anwendungen"
close: "Schließen" close: "Schließen"
do-not-copy-paste: "ここにコードを入力したり張り付けたりしないでください。アカウントが不正利用される可能性があります。" do-not-copy-paste: "ここにコードを入力したり張り付けたりしないでください。アカウントが不正利用される可能性があります。"
got-it: "わかった" got-it: "Verstanden!"
customization-tips: customization-tips:
title: "カスタマイズのヒント" title: "Anpassung-Tipps"
paragraph1: "ホームのカスタマイズでは、ウィジェットを追加/削除したり、ドラッグ&ドロップして並べ替えたりすることができます。" paragraph1: "ホームのカスタマイズでは、ウィジェットを追加/削除したり、ドラッグ&ドロップして並べ替えたりすることができます。"
paragraph2: "一部のウィジェットは、<strong><strong>右</strong>クリック</strong>することで表示を変更することができます。" paragraph2: "一部のウィジェットは、<strong><strong>右</strong>クリック</strong>することで表示を変更することができます。"
paragraph3: "ウィジェットを削除するには、ヘッダーの<strong>「ゴミ箱」</strong>と書かれたエリアにウィジェットをドラッグ&ドロップします。" paragraph3: "ウィジェットを削除するには、ヘッダーの<strong>「ゴミ箱」</strong>と書かれたエリアにウィジェットをドラッグ&ドロップします。"
@ -35,9 +35,9 @@ common:
gotit: "Got it!" gotit: "Got it!"
notification: notification:
file-uploaded: "Datei hochgeladen!" file-uploaded: "Datei hochgeladen!"
message-from: "{}さんからメッセージ:" message-from: "Nachricht von {}:"
reversi-invited: "対局への招待があります" reversi-invited: "対局への招待があります"
reversi-invited-by: "{}さんから" reversi-invited-by: "Eingeladen von {}:"
notified-by: "Benachrichtigt von {}:" notified-by: "Benachrichtigt von {}:"
reply-from: "Antwort von {}:" reply-from: "Antwort von {}:"
quoted-by: "Zitiert von {}:" quoted-by: "Zitiert von {}:"
@ -52,7 +52,7 @@ common:
weeks_ago: "vor {0} Woche{0:n}" weeks_ago: "vor {0} Woche{0:n}"
months_ago: "vor {0} Monat{0:en}" months_ago: "vor {0} Monat{0:en}"
years_ago: "vor {} Jahr{0:en}" years_ago: "vor {} Jahr{0:en}"
month-and-day: "{month}月 {day}日" month-and-day: "{day}/{month}"
trash: "Papierkorb" trash: "Papierkorb"
weekday-short: weekday-short:
sunday: "So" sunday: "So"
@ -71,7 +71,7 @@ common:
friday: "Freitag" friday: "Freitag"
saturday: "Samstag" saturday: "Samstag"
reactions: reactions:
like: "いいね" like: "Gefällt mir"
love: "Lieben" love: "Lieben"
laugh: "Lachen" laugh: "Lachen"
hmm: "Hmm...?" hmm: "Hmm...?"
@ -83,13 +83,13 @@ common:
pudding: "Pudding" pudding: "Pudding"
note-visibility: note-visibility:
public: "Öffentlich" public: "Öffentlich"
home: "ホーム" home: "Startseite"
home-desc: "ホームタイムラインにのみ公開" home-desc: "Nur auf die Startseite posten"
followers: "Abonnenten" followers: "Abonnenten"
followers-desc: "自分のフォロワーにのみ公開" followers-desc: "Nur für diejenigen sichtbar, die dir folgen"
specified: "ダイレクト" specified: "Direkt"
specified-desc: "指定したユーザーにのみ公開" specified-desc: "Nur für bestimmte Benutzer posten"
private: "非公開" private: "Privat"
note-placeholders: note-placeholders:
a: "Was machst du gerade?" a: "Was machst du gerade?"
b: "Was ist so passiert?" b: "Was ist so passiert?"
@ -97,31 +97,31 @@ common:
d: "Willst du etwas sagen?" d: "Willst du etwas sagen?"
e: "Schreib hier etwas!" e: "Schreib hier etwas!"
f: "Warte darauf, das du schreibst." f: "Warte darauf, das du schreibst."
search: "検索" search: "Suche"
delete: "Löschen" delete: "Löschen"
loading: "Laden" loading: "Laden"
ok: "OK" ok: "OK"
update-available-title: "更新があります" update-available-title: "Aktualisierung verfügbar"
update-available: "Eine neue Version von Misskey ist verfügbar ({newer}, aktuell ist {current}). Lade die Seite neu um die aktuelle Version zu laden" 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." my-token-regenerated: "Dein Token wurde generiert. Du wirst jetzt abgemeldet."
i-like-sushi: "私は(プリンよりむしろ)寿司が好き" i-like-sushi: "Ich bevorzuge Sushi anstelle von Pudding"
show-reversi-board-labels: "リバーシのボードの行と列のラベルを表示" show-reversi-board-labels: "リバーシのボードの行と列のラベルを表示"
use-contrast-reversi-stones: "リバーシのアイコンにコントラストを付ける" use-contrast-reversi-stones: "リバーシのアイコンにコントラストを付ける"
verified-user: "公式アカウント" verified-user: "Verifizierter Benutzer"
disable-animated-mfm: "投稿内の動きのあるテキストを無効にする" disable-animated-mfm: "投稿内の動きのあるテキストを無効にする"
always-show-nsfw: "常に閲覧注意のメディアを表示する" always-show-nsfw: "常に閲覧注意のメディアを表示する"
always-mark-nsfw: "常にメディアを閲覧注意として投稿" always-mark-nsfw: "常にメディアを閲覧注意として投稿"
show-full-acct: "ユーザー名のホストを省略しない" show-full-acct: "ユーザー名のホストを省略しない"
reduce-motion: "UIの動きを減らす" reduce-motion: "Animationen der Benutzeroberfläche reduzieren"
this-setting-is-this-device-only: "このデバイスのみ" this-setting-is-this-device-only: "Nur auf diesem Gerät"
do-not-use-in-production: 'これは開発ビルドです。本番環境で使用しないでください。' do-not-use-in-production: 'Dies ist eine Entwicklungsversion. Nicht in einer Produktionsumgebung verwenden.'
reversi: reversi:
drawn: "引き分け" drawn: "Unentschieden"
my-turn: "あなたのターンです" my-turn: "Du bist am Zug"
opponent-turn: "相手のターンです" opponent-turn: "Dein Gegner ist an der Reihe"
turn-of: "{}のターンです" turn-of: "{} ist am Zug"
past-turn-of: "{}のターン" past-turn-of: "Zug von {}"
won: "{}の勝ち" won: "{} hat gewonnen!"
black: "Schwarz" black: "Schwarz"
white: "Weiß" white: "Weiß"
total: "Gesamt" total: "Gesamt"
@ -206,36 +206,36 @@ common/views/components/games/reversi/reversi.game.vue:
can-put-everywhere: "どこでも置けるモード" can-put-everywhere: "どこでも置けるモード"
common/views/components/games/reversi/reversi.index.vue: common/views/components/games/reversi/reversi.index.vue:
title: "Misskey Reversi" title: "Misskey Reversi"
sub-title: "他のMisskeyユーザーとリバーシで対戦しよう" sub-title: "Spiele Reversi mit deinen Freunden!"
invite: "招待" invite: "Einladen"
rule: "Spielanleitung" rule: "Spielanleitung"
rule-desc: "リバーシは、相手と交互に石をボードに置いて、相手の石を挟んで自分の色に変えてゆき、最終的に残った石が多い方が勝ちというボードゲームです。" rule-desc: "リバーシは、相手と交互に石をボードに置いて、相手の石を挟んで自分の色に変えてゆき、最終的に残った石が多い方が勝ちというボードゲームです。"
mode-invite: "Einladen" mode-invite: "Einladen"
mode-invite-desc: "指定したユーザーと対戦するモードです。" mode-invite-desc: "指定したユーザーと対戦するモードです。"
invitations: "対局の招待があります!" invitations: "対局の招待があります!"
my-games: "自分の対局" my-games: "自分の対局"
all-games: "みんなの対局" all-games: "Alle Spiele"
enter-username: "ユーザー名を入力してください" enter-username: "Bitte gib einen Benutzernamen ein"
game-state: game-state:
ended: "終了" ended: "Fertig"
playing: "進行中" playing: "進行中"
common/views/components/games/reversi/reversi.room.vue: common/views/components/games/reversi/reversi.room.vue:
settings-of-the-game: "ゲームの設定" settings-of-the-game: "Spieleinstellungen"
choose-map: "マップを選択" choose-map: "Wähle eine Karte"
random: "ランダム" random: "Zufällige Auswahl"
black-or-white: "先手/後手" black-or-white: "Schwarz/Weiß"
black-is: "{}が黒" black-is: "Schwarz ist {}"
rules: "ルール" rules: "Regeln"
is-llotheo: "石の少ない方が勝ち(ロセオ)" is-llotheo: "石の少ない方が勝ち(ロセオ)"
looped-map: "ループマップ" looped-map: "ループマップ"
can-put-everywhere: "どこでも置けるモード" can-put-everywhere: "どこでも置けるモード"
settings-of-the-bot: "Botの設定" settings-of-the-bot: "Botの設定"
this-game-is-started-soon: "ゲームは数秒後に開始されます" this-game-is-started-soon: "ゲームは数秒後に開始されます"
waiting-for-other: "相手の準備が完了するのを待っています" waiting-for-other: "Warte auf den Gegner"
waiting-for-me: "あなたの準備が完了するのを待っています" waiting-for-me: "あなたの準備が完了するのを待っています"
waiting-for-both: "準備中" waiting-for-both: "準備中"
cancel: "キャンセル" cancel: "Abbrechen"
ready: "準備完了" ready: "Bereit"
cancel-ready: "準備続行" cancel-ready: "準備続行"
common/views/components/connect-failed.vue: common/views/components/connect-failed.vue:
title: "Verbindung zum Server ist fehlgeschlagen" title: "Verbindung zum Server ist fehlgeschlagen"
@ -262,29 +262,29 @@ common/views/components/connect-failed.troubleshooter.vue:
flush: "Cache leeren" flush: "Cache leeren"
set-version: "Version angeben" set-version: "Version angeben"
common/views/components/media-banner.vue: common/views/components/media-banner.vue:
sensitive: "閲覧注意" sensitive: "Dieser Inhalt ist NSFW"
click-to-show: "クリックして表示" click-to-show: "Klicke zum den Inhalt anzusehen"
common/views/components/theme.vue: common/views/components/theme.vue:
light-theme: "非ダークモード時に使用するテーマ" light-theme: "Thema"
dark-theme: "ダークモード時に使用するテーマ" dark-theme: "Thema während des Nachtmodus"
light-themes: "明るいテーマ" light-themes: "Helles Thema"
dark-themes: "暗いテーマ" dark-themes: "Dunkles Thema"
install-a-theme: "テーマのインストール" install-a-theme: "テーマのインストール"
theme-code: "テーマコード" theme-code: "テーマコード"
install: "インストール" install: "Anwenden"
installed: "「{}」をインストールしました" installed: "\"{}\" wurde installiert"
create-a-theme: "テーマの作成" create-a-theme: "Thema erstellen"
save-created-theme: "テーマを保存" save-created-theme: "Thema speichern"
primary-color: "プライマリ カラー" primary-color: "Primäre Farbe"
secondary-color: "セカンダリ カラー" secondary-color: "Sekundäre Farbe"
text-color: "文字色" text-color: "Textfarbe"
base-theme: "ベーステーマ" base-theme: "Basisthema"
base-theme-light: "Light" base-theme-light: "Hell"
base-theme-dark: "Dark" base-theme-dark: "Dunkel"
theme-name: "テーマ名" theme-name: "Name des Themas"
preview-created-theme: "プレビュー" preview-created-theme: "Vorschau"
invalid-theme: "テーマが正しくありません。" invalid-theme: "Thema ist ungültig"
already-installed: "既にそのテーマはインストールされています。" already-installed: "Thema ist bereits installiert"
saved: "保存しました" saved: "保存しました"
manage-themes: "テーマの管理" manage-themes: "テーマの管理"
builtin-themes: "標準テーマ" builtin-themes: "標準テーマ"
@ -293,10 +293,10 @@ common/views/components/theme.vue:
select-theme: "テーマを選択してください" select-theme: "テーマを選択してください"
uninstall: "アンインストール" uninstall: "アンインストール"
uninstalled: "「{}」をアンインストールしました" uninstalled: "「{}」をアンインストールしました"
author: "作者" author: "Autor"
desc: "説明" desc: "説明"
export: "エクスポート" export: "Exportieren"
import: "インポート" import: "Importieren"
import-by-code: "またはコードをペースト" import-by-code: "またはコードをペースト"
theme-name-required: "テーマ名は必須です。" theme-name-required: "テーマ名は必須です。"
common/views/components/cw-button.vue: common/views/components/cw-button.vue:
@ -335,7 +335,7 @@ common/views/components/note-menu.vue:
detail: "詳細" detail: "詳細"
copy-link: "リンクをコピー" copy-link: "リンクをコピー"
favorite: "Diese Anmerkung favorisieren" favorite: "Diese Anmerkung favorisieren"
unfavorite: "お気に入り解除" unfavorite: "Entfavorisieren"
pin: "An die Profilseite pinnen" pin: "An die Profilseite pinnen"
unpin: "ピン留め解除" unpin: "ピン留め解除"
delete: "Löschen" delete: "Löschen"
@ -362,7 +362,7 @@ common/views/components/signin.vue:
token: "Token" token: "Token"
signing-in: "Melde an..." signing-in: "Melde an..."
signin: "Anmelden" signin: "Anmelden"
or: "または" or: "Oder"
signin-with-twitter: "Twitterでログイン" signin-with-twitter: "Twitterでログイン"
login-failed: "ログインできませんでした。ユーザー名とパスワードを確認してください。" login-failed: "ログインできませんでした。ユーザー名とパスワードを確認してください。"
common/views/components/signup.vue: common/views/components/signup.vue:
@ -416,6 +416,25 @@ common/views/components/visibility-chooser.vue:
common/views/components/trends.vue: common/views/components/trends.vue:
count: "{}人が投稿" count: "{}人が投稿"
empty: "トレンドなし" empty: "トレンドなし"
common/views/components/profile-editor.vue:
title: "プロフィール"
name: "名前"
account: "アカウント"
location: "場所"
description: "自己紹介"
birthday: "誕生日"
avatar: "アイコン"
banner: "バナー"
is-cat: "このアカウントはCatです"
is-bot: "このアカウントはBotです"
is-locked: "フォローを承認制にする"
careful-bot: "Botからのフォローだけ承認制にする"
advanced: "その他"
privacy: "プライバシー"
save: "保存"
saved: "プロフィールを保存しました"
uploading: "アップロード中"
upload-failed: "アップロードに失敗しました"
common/views/widgets/broadcast.vue: common/views/widgets/broadcast.vue:
fetching: "Laden" fetching: "Laden"
no-broadcasts: "Keine Broadcasts" no-broadcasts: "Keine Broadcasts"
@ -510,7 +529,7 @@ desktop/views/components/charts.vue:
notes: "投稿" notes: "投稿"
users: "ユーザー" users: "ユーザー"
drive: "ドライブ" drive: "ドライブ"
network: "ネットワーク" network: "Netzwerk"
charts: charts:
notes: "投稿の増減 (統合)" notes: "投稿の増減 (統合)"
local-notes: "投稿の増減 (ローカル)" local-notes: "投稿の増減 (ローカル)"
@ -522,9 +541,9 @@ desktop/views/components/charts.vue:
drive-total: "ドライブ使用量の積算" drive-total: "ドライブ使用量の積算"
drive-files: "ドライブのファイル数の増減" drive-files: "ドライブのファイル数の増減"
drive-files-total: "ドライブのファイル数の積算" drive-files-total: "ドライブのファイル数の積算"
network-requests: "リクエスト" network-requests: "Anfragen"
network-time: "応答時間" network-time: "Antwortzeit"
network-usage: "通信量" network-usage: "Datenverkehr"
desktop/views/components/choose-file-from-drive-window.vue: desktop/views/components/choose-file-from-drive-window.vue:
choose-file: "Datei auswählen" choose-file: "Datei auswählen"
upload: "Dateien von deinem PC hochladen" upload: "Dateien von deinem PC hochladen"
@ -640,25 +659,25 @@ desktop/views/components/note-detail.vue:
location: "Ort" location: "Ort"
renote: "Anmerkung" renote: "Anmerkung"
add-reaction: "Reaktion hinzufügen" add-reaction: "Reaktion hinzufügen"
desktop/views/components/notes.note.vue: desktop/views/components/note.vue:
reposted-by: "Auch geteilt von" reposted-by: "{}がRenote"
reply: "Antworten" reply: "返信"
renote: "Anmerken" renote: "Renote"
add-reaction: "Eine Reaktion hinzufügen" add-reaction: "リアクション"
detail: "Zeige Details" detail: "詳細"
private: "Dieser Beitrag ist eine privat" private: "この投稿は非公開です"
deleted: "Dieser Beitrag wurde entfernt" deleted: "この投稿は削除されました"
desktop/views/components/notes.vue: desktop/views/components/notes.vue:
error: "Laden fehlgeschlagen." error: "Laden fehlgeschlagen."
retry: "Erneut versuchen" retry: "Erneut versuchen"
load-more: "もっと読み込む" load-more: "Mehr laden"
desktop/views/components/notifications.vue: desktop/views/components/notifications.vue:
more: "Mehr" more: "Mehr"
empty: "Keine Benachrichtigungen" empty: "Keine Benachrichtigungen"
desktop/views/components/post-form.vue: desktop/views/components/post-form.vue:
add-visible-user: "+ユーザーを追加" add-visible-user: "+Nutzer hinzufügen"
attach-location-information: "位置情報を添付する" attach-location-information: "位置情報を添付する"
hide-contents: "内容を隠す" hide-contents: "Inhalt verstecken"
reply-placeholder: "Antworte auf diese Anmerkung..." reply-placeholder: "Antworte auf diese Anmerkung..."
quote-placeholder: "Zitiere diese Anmerkung..." quote-placeholder: "Zitiere diese Anmerkung..."
submit: "Beitragsform" submit: "Beitragsform"
@ -679,10 +698,10 @@ desktop/views/components/post-form.vue:
text-remain: "{} Zeichen verbleibend" text-remain: "{} Zeichen verbleibend"
recent-tags: "最近" recent-tags: "最近"
click-to-tagging: "クリックでタグ付け" click-to-tagging: "クリックでタグ付け"
visibility: "公開範囲" visibility: "Sichtbarkeit"
geolocation-alert: "お使いの端末は位置情報に対応していません" geolocation-alert: "お使いの端末は位置情報に対応していません"
error: "エラー" error: "Fehler"
enter-username: "ユーザー名を入力してください" enter-username: "Bitte gib einen Benutzernamen ein..."
annotations: "内容への注釈 (オプション)" annotations: "内容への注釈 (オプション)"
desktop/views/components/post-form-window.vue: desktop/views/components/post-form-window.vue:
note: "Neue Notiz" note: "Neue Notiz"
@ -726,30 +745,35 @@ desktop/views/components/settings.vue:
advanced: "Erweiterte Einstellungen" advanced: "Erweiterte Einstellungen"
api-via-stream: "API-Anfrage via stream" api-via-stream: "API-Anfrage via stream"
api-via-stream-desc: "API-Anfrage über WebSocket statt native Aktualisierungs-API (für bessere Leistung). Diese Einstellung wird im Browser gespeichert." api-via-stream-desc: "API-Anfrage über WebSocket statt native Aktualisierungs-API (für bessere Leistung). Diese Einstellung wird im Browser gespeichert."
deck-nav: "デッキ内ナビゲーション"
deck-nav-desc: "デッキを使用しているとき、ナビゲーションが発生する際にページ遷移を行わずに一時的なカラムで受けるようにします。"
display: "Erscheinungsbild und Anzeige" display: "Erscheinungsbild und Anzeige"
customize: "Startseite anpassen" customize: "Startseite anpassen"
wallpaper: "壁紙"
choose-wallpaper: "壁紙を選択" choose-wallpaper: "壁紙を選択"
delete-wallpaper: "壁紙を削除" delete-wallpaper: "壁紙を削除"
dark-mode: "Nacht Modus" dark-mode: "Nacht Modus"
use-shadow: "UIに影を使用" use-shadow: "UIに影を使用"
rounded-corners: "UIの角を丸める" rounded-corners: "Abgerundete Ecken"
circle-icons: "Kreisförmige Icons" circle-icons: "Kreisförmige Icons"
contrasted-acct: "ユーザー名にコントラストを付ける" contrasted-acct: "ユーザー名にコントラストを付ける"
post-form-on-timeline: "タイムライン上部に投稿フォームを表示する" post-form-on-timeline: "タイムライン上部に投稿フォームを表示する"
suggest-recent-hashtags: "最近のハッシュタグを投稿フォームに表示する" suggest-recent-hashtags: "最近のハッシュタグを投稿フォームに表示する"
show-clock-on-header: "右上に時計を表示する" show-clock-on-header: "右上に時計を表示する"
show-reply-target: "Zeige Antworten" show-reply-target: "Zeige Antworten"
timeline: "タイムライン"
show-my-renotes: "Zeige meine Reposts auf der Zeitleiste" show-my-renotes: "Zeige meine Reposts auf der Zeitleiste"
show-renoted-my-notes: "自分の投稿のRenoteをタイムラインに表示する" show-renoted-my-notes: "自分の投稿のRenoteをタイムラインに表示する"
show-local-renotes: "ローカルの投稿のRenoteをタイムラインに表示する" show-local-renotes: "ローカルの投稿のRenoteをタイムラインに表示する"
show-maps: "Karte anzeigen" show-maps: "Karte anzeigen"
deck-column-align: "デッキのカラムの位置"
deck-column-align-center: "中央"
deck-column-align-left: "左"
sound: "Ton" sound: "Ton"
enable-sounds: "Ton aktivieren" enable-sounds: "Ton aktivieren"
enable-sounds-desc: "Spiel einen Ton ab beim Erhalten eines Beitrags bzw. einer Nachricht. Diese Einstellung wird im Browser gespeichert." enable-sounds-desc: "Spiel einen Ton ab beim Erhalten eines Beitrags bzw. einer Nachricht. Diese Einstellung wird im Browser gespeichert."
volume: "Lautstärke" volume: "Lautstärke"
test: "Test" test: "Test"
mobile: "Mobil"
disable-via-mobile: "Diesen Beitrag nicht mit 'vom Handy' absenden"
language: "Sprache" language: "Sprache"
pick-language: "Sprache auswählen" pick-language: "Sprache auswählen"
recommended: "Empfohlen" recommended: "Empfohlen"
@ -822,27 +846,12 @@ desktop/views/components/settings.drive.vue:
desktop/views/components/settings.mute.vue: desktop/views/components/settings.mute.vue:
no-users: "ミュートしているユーザーはいません" no-users: "ミュートしているユーザーはいません"
desktop/views/components/settings.password.vue: desktop/views/components/settings.password.vue:
reset: "パスワードを変更する" reset: "Passwort ändern"
enter-current-password: "Derzeitiges Passwort eingeben" enter-current-password: "Derzeitiges Passwort eingeben"
enter-new-password: "Neues Passwort eingeben" enter-new-password: "Neues Passwort eingeben"
enter-new-password-again: "Neues Passwort erneut eingeben" enter-new-password-again: "Neues Passwort erneut eingeben"
not-match: "新しいパスワードが一致しません" not-match: "Passwörter stimmen nicht überein."
changed: "パスワードを変更しました" changed: "Passwort geändert"
desktop/views/components/settings.profile.vue:
avatar: "アイコン"
choice-avatar: "画像を選択"
name: "名前"
location: "場所"
description: "自己紹介"
birthday: "誕生日"
save: "Profil aktualisieren"
locked-account: "アカウントの保護"
is-locked: "フォローを承認制にする"
careful-bot: "Botからのフォローだけ承認制にする"
other: "その他"
is-bot: "このアカウントはBotです"
is-cat: "このアカウントはCatです"
profile-updated: "プロフィールを更新しました"
desktop/views/components/sub-note-content.vue: desktop/views/components/sub-note-content.vue:
private: "この投稿は非公開です" private: "この投稿は非公開です"
deleted: "この投稿は削除されました" deleted: "この投稿は削除されました"
@ -902,7 +911,7 @@ desktop/views/components/user-preview.vue:
desktop/views/components/users-list.vue: desktop/views/components/users-list.vue:
all: "すべて" all: "すべて"
iknow: "知り合い" iknow: "知り合い"
load-more: "もっと" load-more: "Mehr"
fetching: "Lade…" fetching: "Lade…"
desktop/views/components/users-list-item.vue: desktop/views/components/users-list-item.vue:
followed: "フォローされています" followed: "フォローされています"
@ -941,10 +950,8 @@ desktop/views/pages/deck/deck.tl-column.vue:
is-media-only: "メディア投稿のみ" is-media-only: "メディア投稿のみ"
is-media-view: "メディアビュー" is-media-view: "メディアビュー"
edit: "オプション" edit: "オプション"
desktop/views/pages/deck/deck.note.vue: desktop/views/pages/deck/deck.user-column.vue:
reposted-by: "{}がRenote" pinned-notes: "ピン留めされた投稿"
private: "この投稿は非公開です"
deleted: "この投稿は削除されました"
desktop/views/pages/stats/stats.vue: desktop/views/pages/stats/stats.vue:
all-users: "全てのユーザー" all-users: "全てのユーザー"
original-users: "このインスタンスのユーザー" original-users: "このインスタンスのユーザー"
@ -1165,19 +1172,19 @@ mobile/views/components/ui.nav.vue:
mobile/views/components/user-timeline.vue: mobile/views/components/user-timeline.vue:
no-notes: "このユーザーは投稿していないようです。" no-notes: "このユーザーは投稿していないようです。"
no-notes-with-media: "メディア付き投稿はありません。" no-notes-with-media: "メディア付き投稿はありません。"
load-more: "もっと" load-more: "Mehr"
mobile/views/components/users-list.vue: mobile/views/components/users-list.vue:
all: "すべて" all: "すべて"
known: "知り合い" known: "知り合い"
load-more: "もっと" load-more: "Mehr"
mobile/views/pages/favorites.vue: mobile/views/pages/favorites.vue:
title: "お気に入り" title: "Favoriten"
mobile/views/pages/user-lists.vue: mobile/views/pages/user-lists.vue:
title: "リスト" title: "リスト"
enter-list-name: "リスト名を入力してください" enter-list-name: "リスト名を入力してください"
mobile/views/pages/drive.vue: mobile/views/pages/drive.vue:
drive: "ドライブ" drive: "ドライブ"
more: "もっと見る" more: "Mehr laden"
mobile/views/pages/signup.vue: mobile/views/pages/signup.vue:
lets-start: "📦 始めましょう" lets-start: "📦 始めましょう"
mobile/views/pages/followers.vue: mobile/views/pages/followers.vue:
@ -1221,24 +1228,6 @@ mobile/views/pages/notifications.vue:
read-all: "すべての通知を既読にしますか?" read-all: "すべての通知を既読にしますか?"
mobile/views/pages/games/reversi.vue: mobile/views/pages/games/reversi.vue:
reversi: "リバーシ" reversi: "リバーシ"
mobile/views/pages/settings/settings.profile.vue:
title: "Profil"
name: "名前"
account: "アカウント"
location: "場所"
description: "自己紹介"
birthday: "誕生日"
avatar: "アイコン"
banner: "バナー"
is-cat: "このアカウントはCatです"
is-locked: "フォローを承認制にする"
careful-bot: "Botからのフォローだけ承認制にする"
advanced: "その他"
privacy: "プライバシー"
save: "保存"
saved: "Profil wurde aktualisiert"
uploading: "アップロード中"
upload-failed: "アップロードに失敗しました"
mobile/views/pages/search.vue: mobile/views/pages/search.vue:
search: "検索" search: "検索"
empty: "「{}」に関する投稿は見つかりませんでした。" empty: "「{}」に関する投稿は見つかりませんでした。"
@ -1309,7 +1298,7 @@ mobile/views/pages/user/home.vue:
recent-notes: "最近の投稿" recent-notes: "最近の投稿"
images: "画像" images: "画像"
activity: "アクティビティ" activity: "アクティビティ"
keywords: "キーワード" keywords: "Schlagwörter"
domains: "頻出ドメイン" domains: "頻出ドメイン"
frequently-replied-users: "よく会話するユーザー" frequently-replied-users: "よく会話するユーザー"
followers-you-know: "知り合いのフォロワー" followers-you-know: "知り合いのフォロワー"

View File

@ -110,7 +110,7 @@ common:
verified-user: "Verified account" verified-user: "Verified account"
disable-animated-mfm: "Disable animated texts in a post" disable-animated-mfm: "Disable animated texts in a post"
always-show-nsfw: "Always show NSFW contents" always-show-nsfw: "Always show NSFW contents"
always-mark-nsfw: "Always post with a warning about media attachment" always-mark-nsfw: "Always mark posts with media attachments as NSFW"
show-full-acct: "Do not omit the hostname from the username" show-full-acct: "Do not omit the hostname from the username"
reduce-motion: "Reduce motion in UI" reduce-motion: "Reduce motion in UI"
this-setting-is-this-device-only: "Only for this device" this-setting-is-this-device-only: "Only for this device"
@ -265,7 +265,7 @@ common/views/components/media-banner.vue:
sensitive: "NSFW" sensitive: "NSFW"
click-to-show: "Click to show" click-to-show: "Click to show"
common/views/components/theme.vue: common/views/components/theme.vue:
light-theme: "Theme during non-dark mode" light-theme: "Theme"
dark-theme: "Theme during dark mode" dark-theme: "Theme during dark mode"
light-themes: "Light theme" light-themes: "Light theme"
dark-themes: "Dark theme" dark-themes: "Dark theme"
@ -416,6 +416,25 @@ common/views/components/visibility-chooser.vue:
common/views/components/trends.vue: common/views/components/trends.vue:
count: "{} users mentioned" count: "{} users mentioned"
empty: "No popular hashtag trends" empty: "No popular hashtag trends"
common/views/components/profile-editor.vue:
title: "Profile"
name: "Name"
account: "Account"
location: "Location"
description: "About me"
birthday: "Birthday"
avatar: "Avatar"
banner: "Banner"
is-cat: "This account is a Cat"
is-bot: "This account is a Bot"
is-locked: "Follower requests require approval"
careful-bot: "Follower requests from bots require approval"
advanced: "Advanced"
privacy: "Privacy"
save: "Update profile"
saved: "Profile updated successfully"
uploading: "Uploading"
upload-failed: "Failed to upload"
common/views/widgets/broadcast.vue: common/views/widgets/broadcast.vue:
fetching: "Fetching" fetching: "Fetching"
no-broadcasts: "No announcements" no-broadcasts: "No announcements"
@ -463,7 +482,7 @@ common/views/widgets/tips.vue:
tips-line10: "Using the Time Machine widget makes it easy to trace back to the past timeline." tips-line10: "Using the Time Machine widget makes it easy to trace back to the past timeline."
tips-line11: "You can pin posts to user page by clicking on \"...\"" tips-line11: "You can pin posts to user page by clicking on \"...\""
tips-line13: "All the files attached to the post are saved to Drive." tips-line13: "All the files attached to the post are saved to Drive."
tips-line14: "While customizing the home, you can right click on the widget and change the design." tips-line14: "While customizing your home layout, you can right click on a widget to change its design."
tips-line17: "Surrounding the text with ** ** will highlight it." tips-line17: "Surrounding the text with ** ** will highlight it."
tips-line19: "Several windows can be detached outside the browser." tips-line19: "Several windows can be detached outside the browser."
tips-line20: "The percentage of the calendar widget shows the percentage of time elapsed." tips-line20: "The percentage of the calendar widget shows the percentage of time elapsed."
@ -640,14 +659,14 @@ desktop/views/components/note-detail.vue:
location: "Location" location: "Location"
renote: "Repost" renote: "Repost"
add-reaction: "Add a reaction" add-reaction: "Add a reaction"
desktop/views/components/notes.note.vue: desktop/views/components/note.vue:
reposted-by: "Reposted by {}" reposted-by: "Reposted by {}"
reply: "Reply" reply: "Reply"
renote: "Repost" renote: "Renote"
add-reaction: "Add a reaction" add-reaction: "Add a reaction"
detail: "Show details" detail: "Details"
private: "Post is private" private: "This post is private"
deleted: "Post has been deleted" deleted: "This post has been deleted"
desktop/views/components/notes.vue: desktop/views/components/notes.vue:
error: "Loading failed." error: "Loading failed."
retry: "Retry" retry: "Retry"
@ -726,8 +745,11 @@ desktop/views/components/settings.vue:
advanced: "Advanced settings" advanced: "Advanced settings"
api-via-stream: "API request via stream" api-via-stream: "API request via stream"
api-via-stream-desc: "API request is performed via the WebSocket connection instead of native fetch API (for better performance). This setting is stored in the browser." api-via-stream-desc: "API request is performed via the WebSocket connection instead of native fetch API (for better performance). This setting is stored in the browser."
deck-nav: "デッキ内ナビゲーション"
deck-nav-desc: "デッキを使用しているとき、ナビゲーションが発生する際にページ遷移を行わずに一時的なカラムで受けるようにします。"
display: "Design and display" display: "Design and display"
customize: "Customize home layout" customize: "Customize home layout"
wallpaper: "Wallpaper"
choose-wallpaper: "Choose a background" choose-wallpaper: "Choose a background"
delete-wallpaper: "Remove background" delete-wallpaper: "Remove background"
dark-mode: "Dark Mode" dark-mode: "Dark Mode"
@ -739,17 +761,19 @@ desktop/views/components/settings.vue:
suggest-recent-hashtags: "Show recent popular hashtags on the post form" suggest-recent-hashtags: "Show recent popular hashtags on the post form"
show-clock-on-header: "Show clock on upper-right" show-clock-on-header: "Show clock on upper-right"
show-reply-target: "Display reply target" show-reply-target: "Display reply target"
timeline: "Timeline"
show-my-renotes: "Show my renotes in the timeline" show-my-renotes: "Show my renotes in the timeline"
show-renoted-my-notes: "Show renoted my posts in timelines" show-renoted-my-notes: "Show renoted my posts in timelines"
show-local-renotes: "Show renoted local posts in timelines" show-local-renotes: "Show renoted local posts in timelines"
show-maps: "Display a map to show the location" show-maps: "Display a map to show the location"
deck-column-align: "Deck column alignment"
deck-column-align-center: "Center"
deck-column-align-left: "Left"
sound: "Sound" sound: "Sound"
enable-sounds: "Enable sound" enable-sounds: "Enable sound"
enable-sounds-desc: "Play a sound when you receive a post/message. This setting is stored in the browser." enable-sounds-desc: "Play a sound when you receive a post/message. This setting is stored in the browser."
volume: "Volume" volume: "Volume"
test: "Test" test: "Test"
mobile: "Mobile"
disable-via-mobile: "Don't mark the post as 'from mobile'"
language: "Language" language: "Language"
pick-language: "Select a language" pick-language: "Select a language"
recommended: "Recommended" recommended: "Recommended"
@ -828,21 +852,6 @@ desktop/views/components/settings.password.vue:
enter-new-password-again: "Enter new password again" enter-new-password-again: "Enter new password again"
not-match: "The new passwords do not match" not-match: "The new passwords do not match"
changed: "Password updated" changed: "Password updated"
desktop/views/components/settings.profile.vue:
avatar: "Avatar"
choice-avatar: "Select an image"
name: "Name"
location: "Location"
description: "Description"
birthday: "Birthday"
save: "Update profile"
locked-account: "Protect your account"
is-locked: "Follow request needs approval"
careful-bot: "Botからのフォローだけ承認制にする"
other: "Other"
is-bot: "This account is a Bot"
is-cat: "This account is a Cat"
profile-updated: "Your profile has been updated"
desktop/views/components/sub-note-content.vue: desktop/views/components/sub-note-content.vue:
private: "This post is private" private: "This post is private"
deleted: "This post has been deleted" deleted: "This post has been deleted"
@ -941,10 +950,8 @@ desktop/views/pages/deck/deck.tl-column.vue:
is-media-only: "Only media posts" is-media-only: "Only media posts"
is-media-view: "Media view" is-media-view: "Media view"
edit: "Options" edit: "Options"
desktop/views/pages/deck/deck.note.vue: desktop/views/pages/deck/deck.user-column.vue:
reposted-by: "Reposted by {}" pinned-notes: "Pinned posts"
private: "This post is private"
deleted: "This post has been deleted"
desktop/views/pages/stats/stats.vue: desktop/views/pages/stats/stats.vue:
all-users: "All Users" all-users: "All Users"
original-users: "Users on this instance" original-users: "Users on this instance"
@ -959,7 +966,7 @@ desktop/views/pages/welcome.vue:
signup-button: "Sign up" signup-button: "Sign up"
timeline: "Timeline" timeline: "Timeline"
announcements: "Announcements" announcements: "Announcements"
photos: "Recent uploaded" photos: "Recent Images"
powered-by-misskey: "Powered by <b>Misskey</b>." powered-by-misskey: "Powered by <b>Misskey</b>."
info: "Information" info: "Information"
desktop/views/pages/drive.vue: desktop/views/pages/drive.vue:
@ -1164,7 +1171,7 @@ mobile/views/components/ui.nav.vue:
about: "About Misskey" about: "About Misskey"
mobile/views/components/user-timeline.vue: mobile/views/components/user-timeline.vue:
no-notes: "It seems this user hasn't posted anything yet." no-notes: "It seems this user hasn't posted anything yet."
no-notes-with-media: "There are no posts attaching media" no-notes-with-media: "There are no notes with media attachments"
load-more: "More" load-more: "More"
mobile/views/components/users-list.vue: mobile/views/components/users-list.vue:
all: "All" all: "All"
@ -1221,24 +1228,6 @@ mobile/views/pages/notifications.vue:
read-all: "Do you wish to mark all notifications as read?" read-all: "Do you wish to mark all notifications as read?"
mobile/views/pages/games/reversi.vue: mobile/views/pages/games/reversi.vue:
reversi: "Reversi" reversi: "Reversi"
mobile/views/pages/settings/settings.profile.vue:
title: "Profile"
name: "Name"
account: "Account"
location: "Location"
description: "Biography"
birthday: "Birthday"
avatar: "Avatar"
banner: "Banner"
is-cat: "This account is a Cat"
is-locked: "Follow request needs approval"
careful-bot: "Botからのフォローだけ承認制にする"
advanced: "Advanced"
privacy: "Privacy"
save: "Update profile"
saved: "Profile updated"
uploading: "Uploading"
upload-failed: "Failed to upload"
mobile/views/pages/search.vue: mobile/views/pages/search.vue:
search: "Search" search: "Search"
empty: "No posts were found for '{}'" empty: "No posts were found for '{}'"

View File

@ -416,6 +416,25 @@ common/views/components/visibility-chooser.vue:
common/views/components/trends.vue: common/views/components/trends.vue:
count: "{}人が投稿" count: "{}人が投稿"
empty: "トレンドなし" empty: "トレンドなし"
common/views/components/profile-editor.vue:
title: "プロフィール"
name: "名前"
account: "アカウント"
location: "場所"
description: "自己紹介"
birthday: "誕生日"
avatar: "アイコン"
banner: "バナー"
is-cat: "このアカウントはCatです"
is-bot: "このアカウントはBotです"
is-locked: "フォローを承認制にする"
careful-bot: "Botからのフォローだけ承認制にする"
advanced: "その他"
privacy: "プライバシー"
save: "保存"
saved: "プロフィールを保存しました"
uploading: "アップロード中"
upload-failed: "アップロードに失敗しました"
common/views/widgets/broadcast.vue: common/views/widgets/broadcast.vue:
fetching: "Recuperando" fetching: "Recuperando"
no-broadcasts: "Sin emisión" no-broadcasts: "Sin emisión"
@ -640,14 +659,14 @@ desktop/views/components/note-detail.vue:
location: "Localización" location: "Localización"
renote: "Republicar" renote: "Republicar"
add-reaction: "Agregar una reacción" add-reaction: "Agregar una reacción"
desktop/views/components/notes.note.vue: desktop/views/components/note.vue:
reposted-by: "Republicado por {}" reposted-by: "{}がRenote"
reply: "Responder" reply: "返信"
renote: "Republicar" renote: "Renote"
add-reaction: "Agregar una reacción" add-reaction: "リアクション"
detail: "Mostrar detalles" detail: "詳細"
private: "Esta publicación es privada" private: "この投稿は非公開です"
deleted: "Esta publicación ha sido borrada" deleted: "この投稿は削除されました"
desktop/views/components/notes.vue: desktop/views/components/notes.vue:
error: "Error al cargar." error: "Error al cargar."
retry: "Reintentar" retry: "Reintentar"
@ -726,8 +745,11 @@ desktop/views/components/settings.vue:
advanced: "Configuración avanzada" advanced: "Configuración avanzada"
api-via-stream: "Solicitar API por medio de un stream" api-via-stream: "Solicitar API por medio de un stream"
api-via-stream-desc: "Las peticiones de las API se realizan por conexiones WebSocket en lugar de las tradicionales (para una mejora en el rendimiento). Esta función depende del navegador." api-via-stream-desc: "Las peticiones de las API se realizan por conexiones WebSocket en lugar de las tradicionales (para una mejora en el rendimiento). Esta función depende del navegador."
deck-nav: "デッキ内ナビゲーション"
deck-nav-desc: "デッキを使用しているとき、ナビゲーションが発生する際にページ遷移を行わずに一時的なカラムで受けるようにします。"
display: "Diseño y pantalla" display: "Diseño y pantalla"
customize: "Personaliza la página principal" customize: "Personaliza la página principal"
wallpaper: "壁紙"
choose-wallpaper: "Elije un fondo" choose-wallpaper: "Elije un fondo"
delete-wallpaper: "Suprimir fondo" delete-wallpaper: "Suprimir fondo"
dark-mode: "Modo Nocturno" dark-mode: "Modo Nocturno"
@ -739,17 +761,19 @@ desktop/views/components/settings.vue:
suggest-recent-hashtags: "最近のハッシュタグを投稿フォームに表示する" suggest-recent-hashtags: "最近のハッシュタグを投稿フォームに表示する"
show-clock-on-header: "右上に時計を表示する" show-clock-on-header: "右上に時計を表示する"
show-reply-target: "リプライ先を表示する" show-reply-target: "リプライ先を表示する"
timeline: "タイムライン"
show-my-renotes: "自分の行ったRenoteをタイムラインに表示する" show-my-renotes: "自分の行ったRenoteをタイムラインに表示する"
show-renoted-my-notes: "自分の投稿のRenoteをタイムラインに表示する" show-renoted-my-notes: "自分の投稿のRenoteをタイムラインに表示する"
show-local-renotes: "ローカルの投稿のRenoteをタイムラインに表示する" show-local-renotes: "ローカルの投稿のRenoteをタイムラインに表示する"
show-maps: "マップの自動展開" show-maps: "マップの自動展開"
deck-column-align: "デッキのカラムの位置"
deck-column-align-center: "中央"
deck-column-align-left: "左"
sound: "サウンド" sound: "サウンド"
enable-sounds: "サウンドを有効にする" enable-sounds: "サウンドを有効にする"
enable-sounds-desc: "投稿やメッセージを送受信したときなどにサウンドを再生します。この設定はブラウザに記憶されます。" enable-sounds-desc: "投稿やメッセージを送受信したときなどにサウンドを再生します。この設定はブラウザに記憶されます。"
volume: "ボリューム" volume: "ボリューム"
test: "テスト" test: "テスト"
mobile: "モバイル"
disable-via-mobile: "「モバイルからの投稿」フラグを付けない"
language: "言語" language: "言語"
pick-language: "言語を選択" pick-language: "言語を選択"
recommended: "推奨" recommended: "推奨"
@ -828,21 +852,6 @@ desktop/views/components/settings.password.vue:
enter-new-password-again: "Ingresar nueva contraseña de nuevo" enter-new-password-again: "Ingresar nueva contraseña de nuevo"
not-match: "Las nuevas contraseñas no se corresponden consigo mismas" not-match: "Las nuevas contraseñas no se corresponden consigo mismas"
changed: "Contraseña actualizada" changed: "Contraseña actualizada"
desktop/views/components/settings.profile.vue:
avatar: "Avatar"
choice-avatar: "Escoger una imagen"
name: "Nombre"
location: "Localización"
description: "Descripción"
birthday: "Fecha de nacimiento"
save: "Perfil actualizado"
locked-account: "Protege tu cuenta"
is-locked: "フォローを承認制にする"
careful-bot: "Botからのフォローだけ承認制にする"
other: "その他"
is-bot: "このアカウントはBotです"
is-cat: "このアカウントはCatです"
profile-updated: "プロフィールを更新しました"
desktop/views/components/sub-note-content.vue: desktop/views/components/sub-note-content.vue:
private: "この投稿は非公開です" private: "この投稿は非公開です"
deleted: "この投稿は削除されました" deleted: "この投稿は削除されました"
@ -941,10 +950,8 @@ desktop/views/pages/deck/deck.tl-column.vue:
is-media-only: "メディア投稿のみ" is-media-only: "メディア投稿のみ"
is-media-view: "メディアビュー" is-media-view: "メディアビュー"
edit: "オプション" edit: "オプション"
desktop/views/pages/deck/deck.note.vue: desktop/views/pages/deck/deck.user-column.vue:
reposted-by: "{}がRenote" pinned-notes: "ピン留めされた投稿"
private: "この投稿は非公開です"
deleted: "この投稿は削除されました"
desktop/views/pages/stats/stats.vue: desktop/views/pages/stats/stats.vue:
all-users: "全てのユーザー" all-users: "全てのユーザー"
original-users: "このインスタンスのユーザー" original-users: "このインスタンスのユーザー"
@ -1221,24 +1228,6 @@ mobile/views/pages/notifications.vue:
read-all: "すべての通知を既読にしますか?" read-all: "すべての通知を既読にしますか?"
mobile/views/pages/games/reversi.vue: mobile/views/pages/games/reversi.vue:
reversi: "リバーシ" reversi: "リバーシ"
mobile/views/pages/settings/settings.profile.vue:
title: "プロフィール"
name: "名前"
account: "アカウント"
location: "場所"
description: "自己紹介"
birthday: "誕生日"
avatar: "アイコン"
banner: "バナー"
is-cat: "このアカウントはCatです"
is-locked: "フォローを承認制にする"
careful-bot: "Botからのフォローだけ承認制にする"
advanced: "その他"
privacy: "プライバシー"
save: "保存"
saved: "プロフィールを保存しました"
uploading: "アップロード中"
upload-failed: "アップロードに失敗しました"
mobile/views/pages/search.vue: mobile/views/pages/search.vue:
search: "検索" search: "検索"
empty: "「{}」に関する投稿は見つかりませんでした。" empty: "「{}」に関する投稿は見つかりませんでした。"

View File

@ -5,7 +5,7 @@ meta:
common: common:
misskey: "Une ⭐ du fédiverse" misskey: "Une ⭐ du fédiverse"
about-title: "Une ⭐ du fédivers." about-title: "Une ⭐ du fédivers."
about: "Merci d'avoir découvert Misskey. Misskey est une <b>plateforme de microblogage distribuée</b> née sur Terre. Parce qu'il fait partie du Fédivers (un univers composé de diverses plateformes de réseaux sociaux organisées), il est mutuellement connecté avec d'autres plateformes de réseaux sociaux. Désirez-vous prendre une pause, pendant un instant, loin de l'agitation de la ville et plonger dans un nouvel Internet ?" about: "Merci davoir choisis Misskey. Misskey est une <b>plateforme de micro-blogging distribuée</b> née sur Terre et fait partie du Fédiverse (un univers composé de diverses plateformes de réseaux sociaux organisées), elle est connectée mutuellement avec dautres plateformes de réseaux sociaux. Désirez-vous prendre une pause, un court instant, loin de lagitation de la ville et plonger dans un Internet dun nouveau genre ?"
intro: intro:
title: "Cest quoi Misskey ?" title: "Cest quoi Misskey ?"
about: "Misskeyはオープンソースの<b>分散型マイクロブログSNS</b>です。リッチで高度にカスタマイズできるUI、投稿へのリアクション、ファイルを一元管理できるドライブなど、先進的な機能を揃えています。また、Fediverseと呼ばれるネットワークに接続できるため、他のSNSともやり取りできます。例えば、あなたが何か投稿すると、その投稿はMisskeyだけでなく他のSNSにも伝わります。ちょうどある惑星から他の惑星に電波を発信している様子をイメージしてください。" about: "Misskeyはオープンソースの<b>分散型マイクロブログSNS</b>です。リッチで高度にカスタマイズできるUI、投稿へのリアクション、ファイルを一元管理できるドライブなど、先進的な機能を揃えています。また、Fediverseと呼ばれるネットワークに接続できるため、他のSNSともやり取りできます。例えば、あなたが何か投稿すると、その投稿はMisskeyだけでなく他のSNSにも伝わります。ちょうどある惑星から他の惑星に電波を発信している様子をイメージしてください。"
@ -43,7 +43,7 @@ common:
quoted-by: "Cité·e par {} :" quoted-by: "Cité·e par {} :"
time: time:
unknown: "inconnu" unknown: "inconnu"
future: "à l'instant" future: "à linstant"
just_now: "à l'instant" just_now: "à l'instant"
seconds_ago: "Il y a {} seconde·s" seconds_ago: "Il y a {} seconde·s"
minutes_ago: "Il y a {} minute·s" minutes_ago: "Il y a {} minute·s"
@ -254,7 +254,7 @@ common/views/components/connect-failed.troubleshooter.vue:
no-network: "Aucune connexion au réseau" no-network: "Aucune connexion au réseau"
no-network-desc: "Veuillez vérifier que vous êtes bien connecté au réseau." no-network-desc: "Veuillez vérifier que vous êtes bien connecté au réseau."
no-internet: "Aucune connexion internet." no-internet: "Aucune connexion internet."
no-internet-desc: "Veuillez vérifier que vous êtes bien connecté à internet." no-internet-desc: "Assurez-vous que vous êtes bien connectés à internet."
no-server: "Impossible de se connecter au serveur" no-server: "Impossible de se connecter au serveur"
no-server-desc: "Votre connexion semble correcte, mais il a été impossible de vous connecter au serveur de Misskey. Il se peut que le serveur soit hors-ligne ou en maintenance, veuillez ressayer plus tard." no-server-desc: "Votre connexion semble correcte, mais il a été impossible de vous connecter au serveur de Misskey. Il se peut que le serveur soit hors-ligne ou en maintenance, veuillez ressayer plus tard."
success: "Connexion au serveur de Misskey réussie !" success: "Connexion au serveur de Misskey réussie !"
@ -265,8 +265,8 @@ common/views/components/media-banner.vue:
sensitive: "Contenu sensible" sensitive: "Contenu sensible"
click-to-show: "Cliquer pour afficher" click-to-show: "Cliquer pour afficher"
common/views/components/theme.vue: common/views/components/theme.vue:
light-theme: "非ダークモード時に使用するテーマ" light-theme: "Thème durant le mode clair"
dark-theme: "ダークモード時に使用するテーマ" dark-theme: "Thème durant le mode sombre"
light-themes: "Thème clair" light-themes: "Thème clair"
dark-themes: "Thème sombre" dark-themes: "Thème sombre"
install-a-theme: "Installer un thème" install-a-theme: "Installer un thème"
@ -335,7 +335,7 @@ common/views/components/note-menu.vue:
detail: "Détails" detail: "Détails"
copy-link: "Copier le lien" copy-link: "Copier le lien"
favorite: "Mettre cette note en favoris" favorite: "Mettre cette note en favoris"
unfavorite: "お気に入り解除" unfavorite: "Retirer des favoris"
pin: "Épingler sur votre profil" pin: "Épingler sur votre profil"
unpin: "Désépingler" unpin: "Désépingler"
delete: "Supprimer" delete: "Supprimer"
@ -416,6 +416,25 @@ common/views/components/visibility-chooser.vue:
common/views/components/trends.vue: common/views/components/trends.vue:
count: "{} utilisateurs·rices mentionnés·es" count: "{} utilisateurs·rices mentionnés·es"
empty: "Aucune tendance" empty: "Aucune tendance"
common/views/components/profile-editor.vue:
title: "プロフィール"
name: "名前"
account: "アカウント"
location: "場所"
description: "自己紹介"
birthday: "誕生日"
avatar: "アイコン"
banner: "バナー"
is-cat: "このアカウントはCatです"
is-bot: "このアカウントはBotです"
is-locked: "フォローを承認制にする"
careful-bot: "Botからのフォローだけ承認制にする"
advanced: "その他"
privacy: "プライバシー"
save: "保存"
saved: "プロフィールを保存しました"
uploading: "アップロード中"
upload-failed: "アップロードに失敗しました"
common/views/widgets/broadcast.vue: common/views/widgets/broadcast.vue:
fetching: "Récupération" fetching: "Récupération"
no-broadcasts: "Aucune annonce" no-broadcasts: "Aucune annonce"
@ -640,14 +659,14 @@ desktop/views/components/note-detail.vue:
location: "Géolocalisation" location: "Géolocalisation"
renote: "Republier" renote: "Republier"
add-reaction: "Ajouter votre reaction" add-reaction: "Ajouter votre reaction"
desktop/views/components/notes.note.vue: desktop/views/components/note.vue:
reposted-by: "Reposté par {}" reposted-by: "{}がRenote"
reply: "Répondre" reply: "返信"
renote: "Republier" renote: "Renote"
add-reaction: "Ajouter votre reaction" add-reaction: "リアクション"
detail: "Afficher les détails" detail: "詳細"
private: "cette publication est privée" private: "この投稿は非公開です"
deleted: "cette publication a été supprimée" deleted: "この投稿は削除されました"
desktop/views/components/notes.vue: desktop/views/components/notes.vue:
error: "Échec du chargement." error: "Échec du chargement."
retry: "Réessayer" retry: "Réessayer"
@ -726,8 +745,11 @@ desktop/views/components/settings.vue:
advanced: "Paramètres avancés" advanced: "Paramètres avancés"
api-via-stream: "Requête API via le flux" api-via-stream: "Requête API via le flux"
api-via-stream-desc: "この設定をオンにすると、websocket接続を経由してAPIリクエストが行われます(パフォーマンス向上が期待できます)。オフにすると、ネイティブの fetch APIが利用されます。この設定はこのデバイスのみ有効です。" api-via-stream-desc: "この設定をオンにすると、websocket接続を経由してAPIリクエストが行われます(パフォーマンス向上が期待できます)。オフにすると、ネイティブの fetch APIが利用されます。この設定はこのデバイスのみ有効です。"
deck-nav: "デッキ内ナビゲーション"
deck-nav-desc: "デッキを使用しているとき、ナビゲーションが発生する際にページ遷移を行わずに一時的なカラムで受けるようにします。"
display: "Affichage et design" display: "Affichage et design"
customize: "Personnaliser l'Accueil" customize: "Personnaliser l'Accueil"
wallpaper: "壁紙"
choose-wallpaper: "Sélectionner un fond d'écran" choose-wallpaper: "Sélectionner un fond d'écran"
delete-wallpaper: "Supprimer le fond d'écran" delete-wallpaper: "Supprimer le fond d'écran"
dark-mode: "Mode nuit" dark-mode: "Mode nuit"
@ -739,17 +761,19 @@ desktop/views/components/settings.vue:
suggest-recent-hashtags: "Afficher les hashtags populaires dans le champs de saisie" suggest-recent-hashtags: "Afficher les hashtags populaires dans le champs de saisie"
show-clock-on-header: "Afficher l'horloge à droite sur le coté supérieur" show-clock-on-header: "Afficher l'horloge à droite sur le coté supérieur"
show-reply-target: "Afficher les réponses" show-reply-target: "Afficher les réponses"
timeline: "タイムライン"
show-my-renotes: "Afficher mes republications dans le fil" show-my-renotes: "Afficher mes republications dans le fil"
show-renoted-my-notes: "Afficher mes republications dans les fils" show-renoted-my-notes: "Afficher mes republications dans les fils"
show-local-renotes: "ローカルの投稿のRenoteをタイムラインに表示する" show-local-renotes: "ローカルの投稿のRenoteをタイムラインに表示する"
show-maps: "Afficher la carte" show-maps: "Afficher la carte"
deck-column-align: "デッキのカラムの位置"
deck-column-align-center: "中央"
deck-column-align-left: "左"
sound: "Son" sound: "Son"
enable-sounds: "Activer le son" enable-sounds: "Activer le son"
enable-sounds-desc: "Jouer un son lorsque vous recevez un message. Ce paramètre est sauvegardé dans le navigateur." enable-sounds-desc: "Jouer un son lorsque vous recevez un message. Ce paramètre est sauvegardé dans le navigateur."
volume: "Volume" volume: "Volume"
test: "Test" test: "Test"
mobile: "Mobile"
disable-via-mobile: "Enlever la mention publié via 'un périphérique mobile'"
language: "Langue" language: "Langue"
pick-language: "Sélectionner une langue" pick-language: "Sélectionner une langue"
recommended: "Recommandé" recommended: "Recommandé"
@ -786,9 +810,9 @@ desktop/views/components/settings.vue:
task-manager: "Gestionnaire de tâches" task-manager: "Gestionnaire de tâches"
third-parties: "Services tiers" third-parties: "Services tiers"
navbar-position: "ナビゲーションバーの位置" navbar-position: "ナビゲーションバーの位置"
navbar-position-top: "" navbar-position-top: "En haut"
navbar-position-left: "" navbar-position-left: "à gauche"
navbar-position-right: "" navbar-position-right: "à droite"
desktop/views/components/settings.2fa.vue: desktop/views/components/settings.2fa.vue:
intro: "Si vous configurez la vérication en deux étapes vous aurez non seulement besoin de votre mot de passe mais aussi un appareil déjà pré-enregistré(tel que votre smartphone) ce qui ameliora grandement la sécurité de votre compte." intro: "Si vous configurez la vérication en deux étapes vous aurez non seulement besoin de votre mot de passe mais aussi un appareil déjà pré-enregistré(tel que votre smartphone) ce qui ameliora grandement la sécurité de votre compte."
detail: "Voir les détails..." detail: "Voir les détails..."
@ -828,21 +852,6 @@ desktop/views/components/settings.password.vue:
enter-new-password-again: "Entrez à nouveau le nouveau mot de passe" enter-new-password-again: "Entrez à nouveau le nouveau mot de passe"
not-match: "Le nouveau mot de passe ne correspond pas." not-match: "Le nouveau mot de passe ne correspond pas."
changed: "Mot de passe modifié avec succès" changed: "Mot de passe modifié avec succès"
desktop/views/components/settings.profile.vue:
avatar: "Avatar"
choice-avatar: "Choose an image"
name: "Nom"
location: "Localisation"
description: "Description"
birthday: "Date de naissance"
save: "Mettre à jour le profil"
locked-account: "Protéger votre compte"
is-locked: "Demande dabonnement en attente dapprobation"
careful-bot: "Botからのフォローだけ承認制にする"
other: "Autre"
is-bot: "Ce compte est un Bot"
is-cat: "Ce compte est un Chat"
profile-updated: "Profil mis à jour"
desktop/views/components/sub-note-content.vue: desktop/views/components/sub-note-content.vue:
private: "cette publication est privée" private: "cette publication est privée"
deleted: "cette publication a été supprimée" deleted: "cette publication a été supprimée"
@ -941,10 +950,8 @@ desktop/views/pages/deck/deck.tl-column.vue:
is-media-only: "Les publications médias uniquement" is-media-only: "Les publications médias uniquement"
is-media-view: "Vue média" is-media-view: "Vue média"
edit: "Options" edit: "Options"
desktop/views/pages/deck/deck.note.vue: desktop/views/pages/deck/deck.user-column.vue:
reposted-by: "Reposté par {}" pinned-notes: "ピン留めされた投稿"
private: "cette publication est privée"
deleted: "cette publication a été supprimée"
desktop/views/pages/stats/stats.vue: desktop/views/pages/stats/stats.vue:
all-users: "Toutes les utilisateurrices" all-users: "Toutes les utilisateurrices"
original-users: "Utilisateur·rice·s sur cette instance" original-users: "Utilisateur·rice·s sur cette instance"
@ -1221,24 +1228,6 @@ mobile/views/pages/notifications.vue:
read-all: "Êtes vous sûr de vouloir marqués toutes les notifications non-lus en tant que lus?" read-all: "Êtes vous sûr de vouloir marqués toutes les notifications non-lus en tant que lus?"
mobile/views/pages/games/reversi.vue: mobile/views/pages/games/reversi.vue:
reversi: "Reversi" reversi: "Reversi"
mobile/views/pages/settings/settings.profile.vue:
title: "Profil"
name: "Nom"
account: "Compte"
location: "Lieu"
description: "Description"
birthday: "Date de naissance"
avatar: "Avatar"
banner: "Bannière"
is-cat: "Ce compte est un Bot"
is-locked: "Demande dabonnement en attente dapprobation"
careful-bot: "Botからのフォローだけ承認制にする"
advanced: "Avancé"
privacy: "Vie privée"
save: "Mettre à jour le profil"
saved: "Profil mis à jour avec succès"
uploading: "En cours d'envoi"
upload-failed: "Échec de l'envoi"
mobile/views/pages/search.vue: mobile/views/pages/search.vue:
search: "Chercher" search: "Chercher"
empty: "Aucun message trouvé pour '{}' " empty: "Aucun message trouvé pour '{}' "

View File

@ -416,6 +416,25 @@ common/views/components/visibility-chooser.vue:
common/views/components/trends.vue: common/views/components/trends.vue:
count: "{}人が投稿" count: "{}人が投稿"
empty: "トレンドなし" empty: "トレンドなし"
common/views/components/profile-editor.vue:
title: "プロフィール"
name: "名前"
account: "アカウント"
location: "場所"
description: "自己紹介"
birthday: "誕生日"
avatar: "アイコン"
banner: "バナー"
is-cat: "このアカウントはCatです"
is-bot: "このアカウントはBotです"
is-locked: "フォローを承認制にする"
careful-bot: "Botからのフォローだけ承認制にする"
advanced: "その他"
privacy: "プライバシー"
save: "保存"
saved: "プロフィールを保存しました"
uploading: "アップロード中"
upload-failed: "アップロードに失敗しました"
common/views/widgets/broadcast.vue: common/views/widgets/broadcast.vue:
fetching: "確認中" fetching: "確認中"
no-broadcasts: "お知らせはありません" no-broadcasts: "お知らせはありません"
@ -640,7 +659,7 @@ desktop/views/components/note-detail.vue:
location: "位置情報" location: "位置情報"
renote: "Renote" renote: "Renote"
add-reaction: "リアクション" add-reaction: "リアクション"
desktop/views/components/notes.note.vue: desktop/views/components/note.vue:
reposted-by: "{}がRenote" reposted-by: "{}がRenote"
reply: "返信" reply: "返信"
renote: "Renote" renote: "Renote"
@ -726,8 +745,11 @@ desktop/views/components/settings.vue:
advanced: "詳細設定" advanced: "詳細設定"
api-via-stream: "ストリームを経由したAPIリクエスト" api-via-stream: "ストリームを経由したAPIリクエスト"
api-via-stream-desc: "この設定をオンにすると、websocket接続を経由してAPIリクエストが行われます(パフォーマンス向上が期待できます)。オフにすると、ネイティブの fetch APIが利用されます。この設定はこのデバイスのみ有効です。" api-via-stream-desc: "この設定をオンにすると、websocket接続を経由してAPIリクエストが行われます(パフォーマンス向上が期待できます)。オフにすると、ネイティブの fetch APIが利用されます。この設定はこのデバイスのみ有効です。"
deck-nav: "デッキ内ナビゲーション"
deck-nav-desc: "デッキを使用しているとき、ナビゲーションが発生する際にページ遷移を行わずに一時的なカラムで受けるようにします。"
display: "デザインと表示" display: "デザインと表示"
customize: "ホームをカスタマイズ" customize: "ホームをカスタマイズ"
wallpaper: "壁紙"
choose-wallpaper: "壁紙を選択" choose-wallpaper: "壁紙を選択"
delete-wallpaper: "壁紙を削除" delete-wallpaper: "壁紙を削除"
dark-mode: "ダークモード" dark-mode: "ダークモード"
@ -739,17 +761,19 @@ desktop/views/components/settings.vue:
suggest-recent-hashtags: "最近のハッシュタグを投稿フォームに表示する" suggest-recent-hashtags: "最近のハッシュタグを投稿フォームに表示する"
show-clock-on-header: "右上に時計を表示する" show-clock-on-header: "右上に時計を表示する"
show-reply-target: "リプライ先を表示する" show-reply-target: "リプライ先を表示する"
timeline: "タイムライン"
show-my-renotes: "自分の行ったRenoteをタイムラインに表示する" show-my-renotes: "自分の行ったRenoteをタイムラインに表示する"
show-renoted-my-notes: "自分の投稿のRenoteをタイムラインに表示する" show-renoted-my-notes: "自分の投稿のRenoteをタイムラインに表示する"
show-local-renotes: "ローカルの投稿のRenoteをタイムラインに表示する" show-local-renotes: "ローカルの投稿のRenoteをタイムラインに表示する"
show-maps: "マップの自動展開" show-maps: "マップの自動展開"
deck-column-align: "デッキのカラムの位置"
deck-column-align-center: "中央"
deck-column-align-left: "左"
sound: "サウンド" sound: "サウンド"
enable-sounds: "サウンドを有効にする" enable-sounds: "サウンドを有効にする"
enable-sounds-desc: "投稿やメッセージを送受信したときなどにサウンドを再生します。この設定はブラウザに記憶されます。" enable-sounds-desc: "投稿やメッセージを送受信したときなどにサウンドを再生します。この設定はブラウザに記憶されます。"
volume: "ボリューム" volume: "ボリューム"
test: "テスト" test: "テスト"
mobile: "モバイル"
disable-via-mobile: "「モバイルからの投稿」フラグを付けない"
language: "言語" language: "言語"
pick-language: "言語を選択" pick-language: "言語を選択"
recommended: "推奨" recommended: "推奨"
@ -828,21 +852,6 @@ desktop/views/components/settings.password.vue:
enter-new-password-again: "もう一度新しいパスワードを入力してください" enter-new-password-again: "もう一度新しいパスワードを入力してください"
not-match: "新しいパスワードが一致しません" not-match: "新しいパスワードが一致しません"
changed: "パスワードを変更しました" changed: "パスワードを変更しました"
desktop/views/components/settings.profile.vue:
avatar: "アイコン"
choice-avatar: "画像を選択"
name: "名前"
location: "場所"
description: "自己紹介"
birthday: "誕生日"
save: "保存"
locked-account: "アカウントの保護"
is-locked: "フォローを承認制にする"
careful-bot: "Botからのフォローだけ承認制にする"
other: "その他"
is-bot: "このアカウントはBotです"
is-cat: "このアカウントはCatです"
profile-updated: "プロフィールを更新しました"
desktop/views/components/sub-note-content.vue: desktop/views/components/sub-note-content.vue:
private: "この投稿は非公開です" private: "この投稿は非公開です"
deleted: "この投稿は削除されました" deleted: "この投稿は削除されました"
@ -941,10 +950,8 @@ desktop/views/pages/deck/deck.tl-column.vue:
is-media-only: "メディア投稿のみ" is-media-only: "メディア投稿のみ"
is-media-view: "メディアビュー" is-media-view: "メディアビュー"
edit: "オプション" edit: "オプション"
desktop/views/pages/deck/deck.note.vue: desktop/views/pages/deck/deck.user-column.vue:
reposted-by: "{}がRenote" pinned-notes: "ピン留めされた投稿"
private: "この投稿は非公開です"
deleted: "この投稿は削除されました"
desktop/views/pages/stats/stats.vue: desktop/views/pages/stats/stats.vue:
all-users: "全てのユーザー" all-users: "全てのユーザー"
original-users: "このインスタンスのユーザー" original-users: "このインスタンスのユーザー"
@ -1221,24 +1228,6 @@ mobile/views/pages/notifications.vue:
read-all: "すべての通知を既読にしますか?" read-all: "すべての通知を既読にしますか?"
mobile/views/pages/games/reversi.vue: mobile/views/pages/games/reversi.vue:
reversi: "リバーシ" reversi: "リバーシ"
mobile/views/pages/settings/settings.profile.vue:
title: "プロフィール"
name: "名前"
account: "アカウント"
location: "場所"
description: "自己紹介"
birthday: "誕生日"
avatar: "アイコン"
banner: "バナー"
is-cat: "このアカウントはCatです"
is-locked: "フォローを承認制にする"
careful-bot: "Botからのフォローだけ承認制にする"
advanced: "その他"
privacy: "プライバシー"
save: "保存"
saved: "プロフィールを保存しました"
uploading: "アップロード中"
upload-failed: "アップロードに失敗しました"
mobile/views/pages/search.vue: mobile/views/pages/search.vue:
search: "検索" search: "検索"
empty: "「{}」に関する投稿は見つかりませんでした。" empty: "「{}」に関する投稿は見つかりませんでした。"

View File

@ -456,6 +456,26 @@ common/views/components/trends.vue:
count: "{}人が投稿" count: "{}人が投稿"
empty: "トレンドなし" empty: "トレンドなし"
common/views/components/profile-editor.vue:
title: "プロフィール"
name: "名前"
account: "アカウント"
location: "場所"
description: "自己紹介"
birthday: "誕生日"
avatar: "アイコン"
banner: "バナー"
is-cat: "このアカウントはCatです"
is-bot: "このアカウントはBotです"
is-locked: "フォローを承認制にする"
careful-bot: "Botからのフォローだけ承認制にする"
advanced: "その他"
privacy: "プライバシー"
save: "保存"
saved: "プロフィールを保存しました"
uploading: "アップロード中"
upload-failed: "アップロードに失敗しました"
common/views/widgets/broadcast.vue: common/views/widgets/broadcast.vue:
fetching: "確認中" fetching: "確認中"
no-broadcasts: "お知らせはありません" no-broadcasts: "お知らせはありません"
@ -718,7 +738,7 @@ desktop/views/components/note-detail.vue:
renote: "Renote" renote: "Renote"
add-reaction: "リアクション" add-reaction: "リアクション"
desktop/views/components/notes.note.vue: desktop/views/components/note.vue:
reposted-by: "{}がRenote" reposted-by: "{}がRenote"
reply: "返信" reply: "返信"
renote: "Renote" renote: "Renote"
@ -814,9 +834,13 @@ desktop/views/components/settings.vue:
advanced: "詳細設定" advanced: "詳細設定"
api-via-stream: "ストリームを経由したAPIリクエスト" api-via-stream: "ストリームを経由したAPIリクエスト"
api-via-stream-desc: "この設定をオンにすると、websocket接続を経由してAPIリクエストが行われます(パフォーマンス向上が期待できます)。オフにすると、ネイティブの fetch APIが利用されます。この設定はこのデバイスのみ有効です。" api-via-stream-desc: "この設定をオンにすると、websocket接続を経由してAPIリクエストが行われます(パフォーマンス向上が期待できます)。オフにすると、ネイティブの fetch APIが利用されます。この設定はこのデバイスのみ有効です。"
deck-nav: "デッキ内ナビゲーション"
deck-nav-desc: "デッキを使用しているとき、ナビゲーションが発生する際にページ遷移を行わずに一時的なカラムで受けるようにします。"
deck-default: "デッキをデフォルトのUIにする"
display: "デザインと表示" display: "デザインと表示"
customize: "ホームをカスタマイズ" customize: "ホームをカスタマイズ"
wallpaper: "壁紙"
choose-wallpaper: "壁紙を選択" choose-wallpaper: "壁紙を選択"
delete-wallpaper: "壁紙を削除" delete-wallpaper: "壁紙を削除"
dark-mode: "ダークモード" dark-mode: "ダークモード"
@ -828,10 +852,14 @@ desktop/views/components/settings.vue:
suggest-recent-hashtags: "最近のハッシュタグを投稿フォームに表示する" suggest-recent-hashtags: "最近のハッシュタグを投稿フォームに表示する"
show-clock-on-header: "右上に時計を表示する" show-clock-on-header: "右上に時計を表示する"
show-reply-target: "リプライ先を表示する" show-reply-target: "リプライ先を表示する"
timeline: "タイムライン"
show-my-renotes: "自分の行ったRenoteをタイムラインに表示する" show-my-renotes: "自分の行ったRenoteをタイムラインに表示する"
show-renoted-my-notes: "自分の投稿のRenoteをタイムラインに表示する" show-renoted-my-notes: "自分の投稿のRenoteをタイムラインに表示する"
show-local-renotes: "ローカルの投稿のRenoteをタイムラインに表示する" show-local-renotes: "ローカルの投稿のRenoteをタイムラインに表示する"
show-maps: "マップの自動展開" show-maps: "マップの自動展開"
deck-column-align: "デッキのカラムの位置"
deck-column-align-center: "中央"
deck-column-align-left: "左"
sound: "サウンド" sound: "サウンド"
enable-sounds: "サウンドを有効にする" enable-sounds: "サウンドを有効にする"
@ -839,9 +867,6 @@ desktop/views/components/settings.vue:
volume: "ボリューム" volume: "ボリューム"
test: "テスト" test: "テスト"
mobile: "モバイル"
disable-via-mobile: "「モバイルからの投稿」フラグを付けない"
language: "言語" language: "言語"
pick-language: "言語を選択" pick-language: "言語を選択"
recommended: "推奨" recommended: "推奨"
@ -933,22 +958,6 @@ desktop/views/components/settings.password.vue:
not-match: "新しいパスワードが一致しません" not-match: "新しいパスワードが一致しません"
changed: "パスワードを変更しました" changed: "パスワードを変更しました"
desktop/views/components/settings.profile.vue:
avatar: "アイコン"
choice-avatar: "画像を選択"
name: "名前"
location: "場所"
description: "自己紹介"
birthday: "誕生日"
save: "保存"
locked-account: "アカウントの保護"
is-locked: "フォローを承認制にする"
careful-bot: "Botからのフォローだけ承認制にする"
other: "その他"
is-bot: "このアカウントはBotです"
is-cat: "このアカウントはCatです"
profile-updated: "プロフィールを更新しました"
desktop/views/components/sub-note-content.vue: desktop/views/components/sub-note-content.vue:
private: "この投稿は非公開です" private: "この投稿は非公開です"
deleted: "この投稿は削除されました" deleted: "この投稿は削除されました"
@ -1069,10 +1078,8 @@ desktop/views/pages/deck/deck.tl-column.vue:
is-media-view: "メディアビュー" is-media-view: "メディアビュー"
edit: "オプション" edit: "オプション"
desktop/views/pages/deck/deck.note.vue: desktop/views/pages/deck/deck.user-column.vue:
reposted-by: "{}がRenote" pinned-notes: "ピン留めされた投稿"
private: "この投稿は非公開です"
deleted: "この投稿は削除されました"
desktop/views/pages/stats/stats.vue: desktop/views/pages/stats/stats.vue:
all-users: "全てのユーザー" all-users: "全てのユーザー"
@ -1417,25 +1424,6 @@ mobile/views/pages/notifications.vue:
mobile/views/pages/games/reversi.vue: mobile/views/pages/games/reversi.vue:
reversi: "リバーシ" reversi: "リバーシ"
mobile/views/pages/settings/settings.profile.vue:
title: "プロフィール"
name: "名前"
account: "アカウント"
location: "場所"
description: "自己紹介"
birthday: "誕生日"
avatar: "アイコン"
banner: "バナー"
is-cat: "このアカウントはCatです"
is-locked: "フォローを承認制にする"
careful-bot: "Botからのフォローだけ承認制にする"
advanced: "その他"
privacy: "プライバシー"
save: "保存"
saved: "プロフィールを保存しました"
uploading: "アップロード中"
upload-failed: "アップロードに失敗しました"
mobile/views/pages/search.vue: mobile/views/pages/search.vue:
search: "検索" search: "検索"
empty: "「{}」に関する投稿は見つかりませんでした。" empty: "「{}」に関する投稿は見つかりませんでした。"

View File

@ -17,7 +17,7 @@ common:
ui: "インターフェイス" ui: "インターフェイス"
ui-desc: "このUIええ言うてたで、知らんけど。あんたの好みのUIなんて知ったこっちゃない。Misskeyは好きにいじれるからな、レイアウトやデザイン変えたり、色んなウィジェットひっつけたりして、あんただけのMisskey作って楽しんでな" ui-desc: "このUIええ言うてたで、知らんけど。あんたの好みのUIなんて知ったこっちゃない。Misskeyは好きにいじれるからな、レイアウトやデザイン変えたり、色んなウィジェットひっつけたりして、あんただけのMisskey作って楽しんでな"
drive: "ドライブ" drive: "ドライブ"
drive-desc: "「こないだの画像、どこやったかな…また投稿したいんやけど…」「さっきのファイルあのフォルダに直しといて」そんなこと言わんとって。Misskeyはもとからドライブ機能持っとるさかい、心配あらへん。ファイルの「わけわけ」したってな。" drive-desc: "「こないだの画像、どこやったかな…また投稿したいんやけど…」「さっきのファイルあのフォルダに直しといて」そんなこと言わんとって。Misskeyはもとからドライブ機能持っとるさかい、心配あらへん。ファイルの「わけわけ」したってな。"
outro: "Misskeyの機能は無限大や知らんけど。知らん言うとるやんけ、あんたが見に行けやMisskeyは分散型SNSやから、ここがあかんくても他がある。阪神でもオリックスでもワイは応援するで" outro: "Misskeyの機能は無限大や知らんけど。知らん言うとるやんけ、あんたが見に行けやMisskeyは分散型SNSやから、ここがあかんくても他がある。阪神でもオリックスでもワイは応援するで"
adblock: adblock:
detected: "広告ブロッカーを無効にしてや" detected: "広告ブロッカーを無効にしてや"
@ -369,7 +369,7 @@ common/views/components/signup.vue:
invitation-code: "招待コード" invitation-code: "招待コード"
invitation-info: "招待コードをもっとらんのやったら、<a href=\"{}\">管理者</a>まで連絡してや。" invitation-info: "招待コードをもっとらんのやったら、<a href=\"{}\">管理者</a>まで連絡してや。"
username: "ユーザー名" username: "ユーザー名"
checking: "確認中や…" checking: "確認中や…"
available: "使えるで" available: "使えるで"
unavailable: "もう使われとるで" unavailable: "もう使われとるで"
error: "通信あかんわ" error: "通信あかんわ"
@ -416,6 +416,25 @@ common/views/components/visibility-chooser.vue:
common/views/components/trends.vue: common/views/components/trends.vue:
count: "{}人が投稿" count: "{}人が投稿"
empty: "流行は自分で作るんや" empty: "流行は自分で作るんや"
common/views/components/profile-editor.vue:
title: "プロフィール"
name: "名前"
account: "アカウント"
location: "場所"
description: "自己紹介"
birthday: "誕生日"
avatar: "アイコン"
banner: "バナー"
is-cat: "このアカウントはCatです"
is-bot: "このアカウントはBotです"
is-locked: "フォローを承認制にする"
careful-bot: "Botからのフォローだけ承認制にする"
advanced: "その他"
privacy: "プライバシー"
save: "保存"
saved: "プロフィールを保存しました"
uploading: "アップロード中"
upload-failed: "アップロードに失敗しました"
common/views/widgets/broadcast.vue: common/views/widgets/broadcast.vue:
fetching: "見てみるわ…" fetching: "見てみるわ…"
no-broadcasts: "お知らせはあらへんで" no-broadcasts: "お知らせはあらへんで"
@ -491,10 +510,10 @@ desktop:
choose-avatar: "アバターにする画像選んでや" choose-avatar: "アバターにする画像選んでや"
invalid-filetype: "この形式のファイル無理やねん" invalid-filetype: "この形式のファイル無理やねん"
desktop/views/components/activity.chart.vue: desktop/views/components/activity.chart.vue:
total: "黒いの 全部" total: "黒いの ... 全部"
notes: "青いの 投稿" notes: "青いの ... 投稿"
replies: "赤いの 返信" replies: "赤いの ... 返信"
renotes: "みどり… Renotes" renotes: "碧いの ... Renotes"
desktop/views/components/activity.vue: desktop/views/components/activity.vue:
title: "アクティビティ" title: "アクティビティ"
toggle: "表示変える" toggle: "表示変える"
@ -552,7 +571,7 @@ desktop/views/components/drive.file.vue:
unmark-as-sensitive: "やっぱ見せたるわ" unmark-as-sensitive: "やっぱ見せたるわ"
copy-url: "URLをコピー" copy-url: "URLをコピー"
download: "ダウンロード" download: "ダウンロード"
else-files: "もっとあるで…" else-files: "まだあんで..."
set-as-avatar: "アイコンにする" set-as-avatar: "アイコンにする"
set-as-banner: "バナーにする" set-as-banner: "バナーにする"
open-in-app: "アプリで開く" open-in-app: "アプリで開く"
@ -586,7 +605,7 @@ desktop/views/components/drive.vue:
url-upload: "URLアップロード" url-upload: "URLアップロード"
url-of-file: "このURLのファイルをアップロードしたいねん" url-of-file: "このURLのファイルをアップロードしたいねん"
url-upload-requested: "アップロードしたい言うといたで" url-upload-requested: "アップロードしたい言うといたで"
may-take-time: "アップロード終わるまで時間かかるわ、知らんけど。たこ焼き何個食べれるやろか…" may-take-time: "アップロード終わるんにちょい時間かかるかもしれへんわ。"
create-folder: "フォルダー作成" create-folder: "フォルダー作成"
folder-name: "フォルダー名" folder-name: "フォルダー名"
contextmenu: contextmenu:
@ -616,7 +635,7 @@ desktop/views/components/following.vue:
desktop/views/components/friends-maker.vue: desktop/views/components/friends-maker.vue:
title: "おもろそうやな:" title: "おもろそうやな:"
empty: "おもろいユーザー居らんかったわ" empty: "おもろいユーザー居らんかったわ"
fetching: "読みんどるで…" fetching: "読みんどります"
refresh: "もっとあるやろ!" refresh: "もっとあるやろ!"
close: "さいなら" close: "さいなら"
desktop/views/components/game-window.vue: desktop/views/components/game-window.vue:
@ -640,14 +659,14 @@ desktop/views/components/note-detail.vue:
location: "ここおるで:" location: "ここおるで:"
renote: "Renote" renote: "Renote"
add-reaction: "リアクション" add-reaction: "リアクション"
desktop/views/components/notes.note.vue: desktop/views/components/note.vue:
reposted-by: "{}がRenote" reposted-by: "{}がRenote"
reply: "返" reply: "返"
renote: "Renote" renote: "Renote"
add-reaction: "リアクション" add-reaction: "リアクション"
detail: "もっと" detail: "詳細"
private: "この投稿は見せられへんわ" private: "この投稿は非公開です"
deleted: "この投稿なんか無くなってもうたわ" deleted: "この投稿は削除されました"
desktop/views/components/notes.vue: desktop/views/components/notes.vue:
error: "あかん、読み込めへんわ" error: "あかん、読み込めへんわ"
retry: "もっぺん" retry: "もっぺん"
@ -688,11 +707,11 @@ desktop/views/components/post-form-window.vue:
note: "新規投稿" note: "新規投稿"
reply: "返す" reply: "返す"
attaches: "添付: {}メディア" attaches: "添付: {}メディア"
uploading-media: "{}個のメディアを上げてるで…" uploading-media: "{}個のメディアを上げとんねん……"
desktop/views/components/progress-dialog.vue: desktop/views/components/progress-dialog.vue:
waiting: "待っとる" waiting: "待っとる"
desktop/views/components/renote-form.vue: desktop/views/components/renote-form.vue:
quote: "ってくる…" quote: "ってくる…"
cancel: "やめとくわ" cancel: "やめとくわ"
renote: "Renote" renote: "Renote"
reposting: "やっとります..." reposting: "やっとります..."
@ -726,8 +745,11 @@ desktop/views/components/settings.vue:
advanced: "もっと設定" advanced: "もっと設定"
api-via-stream: "ストリームを経由したAPIリクエスト" api-via-stream: "ストリームを経由したAPIリクエスト"
api-via-stream-desc: "この設定をオンにすると、WebSocket接続を経由してAPIリクエストが行われんで(パフォーマンス向上するかも、知らんけど)。オフにすると、ネイティブの fetch API が利用されるで。この設定はこのデバイスのみ有効やで。" api-via-stream-desc: "この設定をオンにすると、WebSocket接続を経由してAPIリクエストが行われんで(パフォーマンス向上するかも、知らんけど)。オフにすると、ネイティブの fetch API が利用されるで。この設定はこのデバイスのみ有効やで。"
deck-nav: "デッキ内ナビゲーション"
deck-nav-desc: "デッキを使用しているとき、ナビゲーションが発生する際にページ遷移を行わずに一時的なカラムで受けるようにします。"
display: "見た感じ" display: "見た感じ"
customize: "ホームをカスタマイズ" customize: "ホームをカスタマイズ"
wallpaper: "壁紙"
choose-wallpaper: "壁紙選ぶ" choose-wallpaper: "壁紙選ぶ"
delete-wallpaper: "壁紙ほかす" delete-wallpaper: "壁紙ほかす"
dark-mode: "夜にすんで" dark-mode: "夜にすんで"
@ -739,17 +761,19 @@ desktop/views/components/settings.vue:
suggest-recent-hashtags: "最近のハッシュタグを投稿フォームに表示すんで" suggest-recent-hashtags: "最近のハッシュタグを投稿フォームに表示すんで"
show-clock-on-header: "右上をカリヨン広場にする(時計表示)" show-clock-on-header: "右上をカリヨン広場にする(時計表示)"
show-reply-target: "どこにリプライするんや見せて" show-reply-target: "どこにリプライするんや見せて"
timeline: "タイムライン"
show-my-renotes: "わしのRenoteもタイムライン載せてくれや" show-my-renotes: "わしのRenoteもタイムライン載せてくれや"
show-renoted-my-notes: "わしのRenoteもタイムライン載せてくれや" show-renoted-my-notes: "わしのRenoteもタイムライン載せてくれや"
show-local-renotes: "ローカル投稿のRenoteも見たいんや" show-local-renotes: "ローカル投稿のRenoteも見たいんや"
show-maps: "地図勝手にバァーって開いてくれ" show-maps: "地図勝手にバァーって開いてくれ"
deck-column-align: "デッキのカラムの位置"
deck-column-align-center: "中央"
deck-column-align-left: "左"
sound: "サウンド" sound: "サウンド"
enable-sounds: "サウンド鳴らす" enable-sounds: "サウンド鳴らす"
enable-sounds-desc: "投稿やメッセージもろたとき、音鳴らしたるわ。大丈夫や、この設定はブラウザが覚えてくれとる。" enable-sounds-desc: "投稿やメッセージもろたとき、音鳴らしたるわ。大丈夫や、この設定はブラウザが覚えてくれとる。"
volume: "ボリューム" volume: "ボリューム"
test: "テスト" test: "テスト"
mobile: "モバイル"
disable-via-mobile: "「モバイルからの投稿」フラグなんて要らんわ"
language: "言語" language: "言語"
pick-language: "言語選んでや" pick-language: "言語選んでや"
recommended: "おすすめ" recommended: "おすすめ"
@ -768,7 +792,7 @@ desktop/views/components/settings.vue:
update: "Misskey Update" update: "Misskey Update"
version: "バージョン:" version: "バージョン:"
latest-version: "最新のバージョン:" latest-version: "最新のバージョン:"
update-checking: "アップデートはあらへんか…" update-checking: "アップデートはあらへんか…"
do-update: "アップデートあるか見てみる" do-update: "アップデートあるか見てみる"
update-settings: "もっと設定" update-settings: "もっと設定"
prevent-update: "アップデートしたないわ、また今度や(やめときや)" prevent-update: "アップデートしたないわ、また今度や(やめときや)"
@ -828,21 +852,6 @@ desktop/views/components/settings.password.vue:
enter-new-password-again: "もういっぺんさらのパスワードを入れてや" enter-new-password-again: "もういっぺんさらのパスワードを入れてや"
not-match: "パスワードがおうとらん" not-match: "パスワードがおうとらん"
changed: "パスワード変えたわ" changed: "パスワード変えたわ"
desktop/views/components/settings.profile.vue:
avatar: "アイコン"
choice-avatar: "画像選んでや"
name: "名前"
location: "場所"
description: "ワイのこと"
birthday: "誕生日"
save: "保存"
locked-account: "アカウント守る"
is-locked: "他人のフォローは許可してからや!"
careful-bot: "Botからのフォローだけ承認制にする"
other: "その他"
is-bot: "このアカウントはBotやで"
is-cat: "このアカウントはCatやで"
profile-updated: "プロフィールを更新したで"
desktop/views/components/sub-note-content.vue: desktop/views/components/sub-note-content.vue:
private: "この投稿は見せられへんわ" private: "この投稿は見せられへんわ"
deleted: "この投稿なんか無くなってもうたわ" deleted: "この投稿なんか無くなってもうたわ"
@ -903,7 +912,7 @@ desktop/views/components/users-list.vue:
all: "すべて" all: "すべて"
iknow: "知っとる" iknow: "知っとる"
load-more: "もっと" load-more: "もっと"
fetching: "読みんどるで…" fetching: "読みんどります"
desktop/views/components/users-list-item.vue: desktop/views/components/users-list-item.vue:
followed: "フォローされとるで" followed: "フォローされとるで"
desktop/views/components/window.vue: desktop/views/components/window.vue:
@ -941,21 +950,19 @@ desktop/views/pages/deck/deck.tl-column.vue:
is-media-only: "メディア投稿だけや" is-media-only: "メディア投稿だけや"
is-media-view: "メディアビュー" is-media-view: "メディアビュー"
edit: "オプション" edit: "オプション"
desktop/views/pages/deck/deck.note.vue: desktop/views/pages/deck/deck.user-column.vue:
reposted-by: "{}がRenote" pinned-notes: "ピン留めされた投稿"
private: "この投稿は見せられへんわ"
deleted: "この投稿なんか無くなってもうたわ"
desktop/views/pages/stats/stats.vue: desktop/views/pages/stats/stats.vue:
all-users: "全てのユーザー" all-users: "全てのユーザー"
original-users: "ここの人らだけ" original-users: "ここの人らだけ"
all-notes: "全ての投稿" all-notes: "全ての投稿"
original-notes: "このインスタンスの投稿" original-notes: "このインスタンスの投稿"
desktop/views/pages/welcome.vue: desktop/views/pages/welcome.vue:
about: "もっと…" about: "もうちょい……"
gotit: "ほい" gotit: "ほい"
signin: "サインイン" signin: "サインイン"
signup: "サインアップ" signup: "サインアップ"
signin-button: "サインイン中…" signin-button: "やっとる"
signup-button: "サインアップ" signup-button: "サインアップ"
timeline: "タイムライン" timeline: "タイムライン"
announcements: "知っときや" announcements: "知っときや"
@ -989,11 +996,11 @@ desktop/views/pages/user-list.users.vue:
username: "ユーザー名" username: "ユーザー名"
desktop/views/pages/user/user.followers-you-know.vue: desktop/views/pages/user/user.followers-you-know.vue:
title: "知っとるフォロワー" title: "知っとるフォロワー"
loading: "読み込んどる…" loading: "読み込んどります"
no-users: "フォロワー全員知らんわ" no-users: "フォロワー全員知らんわ"
desktop/views/pages/user/user.friends.vue: desktop/views/pages/user/user.friends.vue:
title: "よう話すツレ" title: "よう話すツレ"
loading: "読み込んどる…" loading: "読み込んどります"
no-users: "よう話すツレは居らん" no-users: "よう話すツレは居らん"
desktop/views/pages/user/user.vue: desktop/views/pages/user/user.vue:
is-suspended: "このユーザーはあかんわ。凍結されとる。" is-suspended: "このユーザーはあかんわ。凍結されとる。"
@ -1003,7 +1010,7 @@ desktop/views/pages/user/user.home.vue:
last-used-at: "最後いつ来た?" last-used-at: "最後いつ来た?"
desktop/views/pages/user/user.photos.vue: desktop/views/pages/user/user.photos.vue:
title: "写真" title: "写真"
loading: "読み込んどる…" loading: "読み込んどります"
no-photos: "写真はあらへんで" no-photos: "写真はあらへんで"
desktop/views/pages/user/user.profile.vue: desktop/views/pages/user/user.profile.vue:
follows-you: "フォローされとるで" follows-you: "フォローされとるで"
@ -1096,7 +1103,7 @@ mobile/views/components/follow-button.vue:
mobile/views/components/friends-maker.vue: mobile/views/components/friends-maker.vue:
title: "おもろそうやな" title: "おもろそうやな"
empty: "おすすめのユーザーはおらん。" empty: "おすすめのユーザーはおらん。"
fetching: "読みんどるで…" fetching: "読みんどります"
refresh: "もっとあるやろ!" refresh: "もっとあるやろ!"
close: "さいなら" close: "さいなら"
mobile/views/components/note.vue: mobile/views/components/note.vue:
@ -1221,24 +1228,6 @@ mobile/views/pages/notifications.vue:
read-all: "通知全部読んだか?" read-all: "通知全部読んだか?"
mobile/views/pages/games/reversi.vue: mobile/views/pages/games/reversi.vue:
reversi: "リバーシ" reversi: "リバーシ"
mobile/views/pages/settings/settings.profile.vue:
title: "プロフィール"
name: "名前"
account: "アカウント"
location: "場所"
description: "ワイのこと"
birthday: "誕生日"
avatar: "アイコン"
banner: "バナー"
is-cat: "このアカウントはCatや"
is-locked: "他人のフォローは許可してからや!"
careful-bot: "Botからのフォローだけ承認制にする"
advanced: "その他"
privacy: "プライバシーってなんや?オカンの年齢か?"
save: "保存"
saved: "プロフィールを保存したで"
uploading: "アップロードしとるで…"
upload-failed: "これアップロードでけへんわ"
mobile/views/pages/search.vue: mobile/views/pages/search.vue:
search: "探す" search: "探す"
empty: "ワイは「{}」なんて投稿知らんわ、無いんちゃう?知らんけど。" empty: "ワイは「{}」なんて投稿知らんわ、無いんちゃう?知らんけど。"
@ -1284,7 +1273,7 @@ mobile/views/pages/settings.vue:
update: "あんたのMisskeyいつのや" update: "あんたのMisskeyいつのや"
version: "バージョン:" version: "バージョン:"
latest-version: "いっちゃん新しいやつ:" latest-version: "いっちゃん新しいやつ:"
update-checking: "アップデートはあらへんか…" update-checking: "アップデートあるか見とるで"
check-for-updates: "アップデートあるんかな?" check-for-updates: "アップデートあるんかな?"
no-updates: "アップデートあらへんわ" no-updates: "アップデートあらへんわ"
no-updates-desc: "つこてるMisskeyは最新や" no-updates-desc: "つこてるMisskeyは最新や"
@ -1315,16 +1304,16 @@ mobile/views/pages/user/home.vue:
followers-you-know: "知っとるフォロワー" followers-you-know: "知っとるフォロワー"
last-used-at: "最後いつ来た?" last-used-at: "最後いつ来た?"
mobile/views/pages/user/home.followers-you-know.vue: mobile/views/pages/user/home.followers-you-know.vue:
loading: "読み込んどる…" loading: "読み込んどります"
no-users: "知っとるユーザーは居らん" no-users: "知っとるユーザーは居らん"
mobile/views/pages/user/home.friends.vue: mobile/views/pages/user/home.friends.vue:
loading: "読み込んどる…" loading: "読み込んどります"
no-users: "よう話すユーザーは居らん" no-users: "よう話すユーザーは居らん"
mobile/views/pages/user/home.notes.vue: mobile/views/pages/user/home.notes.vue:
loading: "読み込んどる…" loading: "読み込んどります"
no-notes: "投稿はあらへん" no-notes: "投稿はあらへん"
mobile/views/pages/user/home.photos.vue: mobile/views/pages/user/home.photos.vue:
loading: "読み込んどる…" loading: "読み込んどります"
no-photos: "写真はあらへんで" no-photos: "写真はあらへんで"
docs: docs:
edit-this-page-on-github: "間違いや改善点を見つけましたか?" edit-this-page-on-github: "間違いや改善点を見つけましたか?"

View File

@ -416,6 +416,25 @@ common/views/components/visibility-chooser.vue:
common/views/components/trends.vue: common/views/components/trends.vue:
count: "{}人が投稿" count: "{}人が投稿"
empty: "トレンドなし" empty: "トレンドなし"
common/views/components/profile-editor.vue:
title: "プロフィール"
name: "名前"
account: "アカウント"
location: "場所"
description: "自己紹介"
birthday: "誕生日"
avatar: "アイコン"
banner: "バナー"
is-cat: "このアカウントはCatです"
is-bot: "このアカウントはBotです"
is-locked: "フォローを承認制にする"
careful-bot: "Botからのフォローだけ承認制にする"
advanced: "その他"
privacy: "プライバシー"
save: "保存"
saved: "プロフィールを保存しました"
uploading: "アップロード中"
upload-failed: "アップロードに失敗しました"
common/views/widgets/broadcast.vue: common/views/widgets/broadcast.vue:
fetching: "確認中" fetching: "確認中"
no-broadcasts: "お知らせはありません" no-broadcasts: "お知らせはありません"
@ -640,7 +659,7 @@ desktop/views/components/note-detail.vue:
location: "位置情報" location: "位置情報"
renote: "Renote" renote: "Renote"
add-reaction: "リアクション" add-reaction: "リアクション"
desktop/views/components/notes.note.vue: desktop/views/components/note.vue:
reposted-by: "{}がRenote" reposted-by: "{}がRenote"
reply: "返信" reply: "返信"
renote: "Renote" renote: "Renote"
@ -726,8 +745,11 @@ desktop/views/components/settings.vue:
advanced: "詳細設定" advanced: "詳細設定"
api-via-stream: "ストリームを経由したAPIリクエスト" api-via-stream: "ストリームを経由したAPIリクエスト"
api-via-stream-desc: "この設定をオンにすると、websocket接続を経由してAPIリクエストが行われます(パフォーマンス向上が期待できます)。オフにすると、ネイティブの fetch APIが利用されます。この設定はこのデバイスのみ有効です。" api-via-stream-desc: "この設定をオンにすると、websocket接続を経由してAPIリクエストが行われます(パフォーマンス向上が期待できます)。オフにすると、ネイティブの fetch APIが利用されます。この設定はこのデバイスのみ有効です。"
deck-nav: "デッキ内ナビゲーション"
deck-nav-desc: "デッキを使用しているとき、ナビゲーションが発生する際にページ遷移を行わずに一時的なカラムで受けるようにします。"
display: "デザインと表示" display: "デザインと表示"
customize: "ホームをカスタマイズ" customize: "ホームをカスタマイズ"
wallpaper: "壁紙"
choose-wallpaper: "壁紙を選択" choose-wallpaper: "壁紙を選択"
delete-wallpaper: "壁紙を削除" delete-wallpaper: "壁紙を削除"
dark-mode: "ダークモード" dark-mode: "ダークモード"
@ -739,17 +761,19 @@ desktop/views/components/settings.vue:
suggest-recent-hashtags: "最近のハッシュタグを投稿フォームに表示する" suggest-recent-hashtags: "最近のハッシュタグを投稿フォームに表示する"
show-clock-on-header: "右上に時計を表示する" show-clock-on-header: "右上に時計を表示する"
show-reply-target: "リプライ先を表示する" show-reply-target: "リプライ先を表示する"
timeline: "タイムライン"
show-my-renotes: "自分の行ったRenoteをタイムラインに表示する" show-my-renotes: "自分の行ったRenoteをタイムラインに表示する"
show-renoted-my-notes: "自分の投稿のRenoteをタイムラインに表示する" show-renoted-my-notes: "自分の投稿のRenoteをタイムラインに表示する"
show-local-renotes: "ローカルの投稿のRenoteをタイムラインに表示する" show-local-renotes: "ローカルの投稿のRenoteをタイムラインに表示する"
show-maps: "マップの自動展開" show-maps: "マップの自動展開"
deck-column-align: "デッキのカラムの位置"
deck-column-align-center: "中央"
deck-column-align-left: "左"
sound: "サウンド" sound: "サウンド"
enable-sounds: "サウンドを有効にする" enable-sounds: "サウンドを有効にする"
enable-sounds-desc: "投稿やメッセージを送受信したときなどにサウンドを再生します。この設定はブラウザに記憶されます。" enable-sounds-desc: "投稿やメッセージを送受信したときなどにサウンドを再生します。この設定はブラウザに記憶されます。"
volume: "ボリューム" volume: "ボリューム"
test: "テスト" test: "テスト"
mobile: "モバイル"
disable-via-mobile: "「モバイルからの投稿」フラグを付けない"
language: "言語" language: "言語"
pick-language: "言語を選択" pick-language: "言語を選択"
recommended: "推奨" recommended: "推奨"
@ -828,21 +852,6 @@ desktop/views/components/settings.password.vue:
enter-new-password-again: "もう一度新しいパスワードを入力してください" enter-new-password-again: "もう一度新しいパスワードを入力してください"
not-match: "新しいパスワードが一致しません" not-match: "新しいパスワードが一致しません"
changed: "パスワードを変更しました" changed: "パスワードを変更しました"
desktop/views/components/settings.profile.vue:
avatar: "アイコン"
choice-avatar: "画像を選択"
name: "名前"
location: "場所"
description: "自己紹介"
birthday: "誕生日"
save: "保存"
locked-account: "アカウントの保護"
is-locked: "フォローを承認制にする"
careful-bot: "Botからのフォローだけ承認制にする"
other: "その他"
is-bot: "このアカウントはBotです"
is-cat: "このアカウントはCatです"
profile-updated: "プロフィールを更新しました"
desktop/views/components/sub-note-content.vue: desktop/views/components/sub-note-content.vue:
private: "この投稿は非公開です" private: "この投稿は非公開です"
deleted: "この投稿は削除されました" deleted: "この投稿は削除されました"
@ -941,10 +950,8 @@ desktop/views/pages/deck/deck.tl-column.vue:
is-media-only: "メディア投稿のみ" is-media-only: "メディア投稿のみ"
is-media-view: "メディアビュー" is-media-view: "メディアビュー"
edit: "オプション" edit: "オプション"
desktop/views/pages/deck/deck.note.vue: desktop/views/pages/deck/deck.user-column.vue:
reposted-by: "{}がRenote" pinned-notes: "ピン留めされた投稿"
private: "この投稿は非公開です"
deleted: "この投稿は削除されました"
desktop/views/pages/stats/stats.vue: desktop/views/pages/stats/stats.vue:
all-users: "全てのユーザー" all-users: "全てのユーザー"
original-users: "このインスタンスのユーザー" original-users: "このインスタンスのユーザー"
@ -1221,24 +1228,6 @@ mobile/views/pages/notifications.vue:
read-all: "すべての通知を既読にしますか?" read-all: "すべての通知を既読にしますか?"
mobile/views/pages/games/reversi.vue: mobile/views/pages/games/reversi.vue:
reversi: "リバーシ" reversi: "リバーシ"
mobile/views/pages/settings/settings.profile.vue:
title: "プロフィール"
name: "名前"
account: "アカウント"
location: "場所"
description: "自己紹介"
birthday: "誕生日"
avatar: "アイコン"
banner: "バナー"
is-cat: "このアカウントはCatです"
is-locked: "フォローを承認制にする"
careful-bot: "Botからのフォローだけ承認制にする"
advanced: "その他"
privacy: "プライバシー"
save: "保存"
saved: "プロフィールを保存しました"
uploading: "アップロード中"
upload-failed: "アップロードに失敗しました"
mobile/views/pages/search.vue: mobile/views/pages/search.vue:
search: "検索" search: "検索"
empty: "「{}」に関する投稿は見つかりませんでした。" empty: "「{}」に関する投稿は見つかりませんでした。"

View File

@ -416,6 +416,25 @@ common/views/components/visibility-chooser.vue:
common/views/components/trends.vue: common/views/components/trends.vue:
count: "{}人が投稿" count: "{}人が投稿"
empty: "トレンドなし" empty: "トレンドなし"
common/views/components/profile-editor.vue:
title: "プロフィール"
name: "名前"
account: "アカウント"
location: "場所"
description: "自己紹介"
birthday: "誕生日"
avatar: "アイコン"
banner: "バナー"
is-cat: "このアカウントはCatです"
is-bot: "このアカウントはBotです"
is-locked: "フォローを承認制にする"
careful-bot: "Botからのフォローだけ承認制にする"
advanced: "その他"
privacy: "プライバシー"
save: "保存"
saved: "プロフィールを保存しました"
uploading: "アップロード中"
upload-failed: "アップロードに失敗しました"
common/views/widgets/broadcast.vue: common/views/widgets/broadcast.vue:
fetching: "Bezig met ophalen" fetching: "Bezig met ophalen"
no-broadcasts: "Geen uitzendingen" no-broadcasts: "Geen uitzendingen"
@ -640,12 +659,12 @@ desktop/views/components/note-detail.vue:
location: "Locatie" location: "Locatie"
renote: "Renote" renote: "Renote"
add-reaction: "リアクション" add-reaction: "リアクション"
desktop/views/components/notes.note.vue: desktop/views/components/note.vue:
reposted-by: "Hergeplaatst door {}" reposted-by: "{}がRenote"
reply: "Antwoord" reply: "返信"
renote: "Renote" renote: "Renote"
add-reaction: "Reactie toevoegen" add-reaction: "リアクション"
detail: "Details tonen" detail: "詳細"
private: "この投稿は非公開です" private: "この投稿は非公開です"
deleted: "この投稿は削除されました" deleted: "この投稿は削除されました"
desktop/views/components/notes.vue: desktop/views/components/notes.vue:
@ -726,8 +745,11 @@ desktop/views/components/settings.vue:
advanced: "Geavanceerde instellingen" advanced: "Geavanceerde instellingen"
api-via-stream: "API-verzoek via stream" api-via-stream: "API-verzoek via stream"
api-via-stream-desc: "API-verzoek wordt uitgevoerd via de WebSocket-verbinding i.p.v. de ingebouwde ophaal-API (voor verbeterde prestaties). Deze instelling wordt opgeslagen in je browser." api-via-stream-desc: "API-verzoek wordt uitgevoerd via de WebSocket-verbinding i.p.v. de ingebouwde ophaal-API (voor verbeterde prestaties). Deze instelling wordt opgeslagen in je browser."
deck-nav: "デッキ内ナビゲーション"
deck-nav-desc: "デッキを使用しているとき、ナビゲーションが発生する際にページ遷移を行わずに一時的なカラムで受けるようにします。"
display: "Ontwerp en weergave" display: "Ontwerp en weergave"
customize: "Startpagina aanpassen" customize: "Startpagina aanpassen"
wallpaper: "壁紙"
choose-wallpaper: "壁紙を選択" choose-wallpaper: "壁紙を選択"
delete-wallpaper: "壁紙を削除" delete-wallpaper: "壁紙を削除"
dark-mode: "Donkere modus" dark-mode: "Donkere modus"
@ -739,17 +761,19 @@ desktop/views/components/settings.vue:
suggest-recent-hashtags: "最近のハッシュタグを投稿フォームに表示する" suggest-recent-hashtags: "最近のハッシュタグを投稿フォームに表示する"
show-clock-on-header: "右上に時計を表示する" show-clock-on-header: "右上に時計を表示する"
show-reply-target: "Antwoord-knop tonen" show-reply-target: "Antwoord-knop tonen"
timeline: "タイムライン"
show-my-renotes: "Mijn renote tonen op de tijdlijn" show-my-renotes: "Mijn renote tonen op de tijdlijn"
show-renoted-my-notes: "Mijn gerenote bericht tonen op de tijdlijn" show-renoted-my-notes: "Mijn gerenote bericht tonen op de tijdlijn"
show-local-renotes: "ローカルの投稿のRenoteをタイムラインに表示する" show-local-renotes: "ローカルの投稿のRenoteをタイムラインに表示する"
show-maps: "Kaart tonen" show-maps: "Kaart tonen"
deck-column-align: "デッキのカラムの位置"
deck-column-align-center: "中央"
deck-column-align-left: "左"
sound: "Geluid" sound: "Geluid"
enable-sounds: "Geluid inschakelen" enable-sounds: "Geluid inschakelen"
enable-sounds-desc: "Een geluid afspelen bij het ontvangen van een bericht. Deze instelling wordt opgeslagen in je browser." enable-sounds-desc: "Een geluid afspelen bij het ontvangen van een bericht. Deze instelling wordt opgeslagen in je browser."
volume: "Volume" volume: "Volume"
test: "Testen" test: "Testen"
mobile: "Mobiel"
disable-via-mobile: "Berichten niet markeren als 'via mobiel'"
language: "Taal" language: "Taal"
pick-language: "Selecteer een taal" pick-language: "Selecteer een taal"
recommended: "Aanbevolen" recommended: "Aanbevolen"
@ -828,21 +852,6 @@ desktop/views/components/settings.password.vue:
enter-new-password-again: "Voer je nieuwe wachtwoord nogmaals in" enter-new-password-again: "Voer je nieuwe wachtwoord nogmaals in"
not-match: "Het nieuwe wachtwoord komt niet overeen" not-match: "Het nieuwe wachtwoord komt niet overeen"
changed: "Wachtwoord bijgewerkt" changed: "Wachtwoord bijgewerkt"
desktop/views/components/settings.profile.vue:
avatar: "Gebruikersafbeelding"
choice-avatar: "Kies een afbeelding"
name: "Naam"
location: "Locatie"
description: "Omschrijving"
birthday: "Geboortedatum"
save: "Profiel bijwerken"
locked-account: "アカウントの保護"
is-locked: "フォローを承認制にする"
careful-bot: "Botからのフォローだけ承認制にする"
other: "その他"
is-bot: "Dit account is een Bot"
is-cat: "Dit account is een Kat"
profile-updated: "プロフィールを更新しました"
desktop/views/components/sub-note-content.vue: desktop/views/components/sub-note-content.vue:
private: "この投稿は非公開です" private: "この投稿は非公開です"
deleted: "この投稿は削除されました" deleted: "この投稿は削除されました"
@ -941,10 +950,8 @@ desktop/views/pages/deck/deck.tl-column.vue:
is-media-only: "メディア投稿のみ" is-media-only: "メディア投稿のみ"
is-media-view: "メディアビュー" is-media-view: "メディアビュー"
edit: "オプション" edit: "オプション"
desktop/views/pages/deck/deck.note.vue: desktop/views/pages/deck/deck.user-column.vue:
reposted-by: "{}がRenote" pinned-notes: "ピン留めされた投稿"
private: "この投稿は非公開です"
deleted: "この投稿は削除されました"
desktop/views/pages/stats/stats.vue: desktop/views/pages/stats/stats.vue:
all-users: "全てのユーザー" all-users: "全てのユーザー"
original-users: "このインスタンスのユーザー" original-users: "このインスタンスのユーザー"
@ -1221,24 +1228,6 @@ mobile/views/pages/notifications.vue:
read-all: "Weet je zeker dat je alle meldingen wilt markeren als gelezen?" read-all: "Weet je zeker dat je alle meldingen wilt markeren als gelezen?"
mobile/views/pages/games/reversi.vue: mobile/views/pages/games/reversi.vue:
reversi: "リバーシ" reversi: "リバーシ"
mobile/views/pages/settings/settings.profile.vue:
title: "Profiel"
name: "Naam"
account: "Account"
location: "Locatie"
description: "Omschrijving"
birthday: "Geboortedatum"
avatar: "Gebruikersafbeelding"
banner: "Omslagfoto"
is-cat: "Dit account is een Kat"
is-locked: "フォローを承認制にする"
careful-bot: "Botからのフォローだけ承認制にする"
advanced: "その他"
privacy: "プライバシー"
save: "Profiel bijwerken"
saved: "Profiel bijgewerkt"
uploading: "Bezig met uploaden"
upload-failed: "Upload mislukt"
mobile/views/pages/search.vue: mobile/views/pages/search.vue:
search: "Zoeken" search: "Zoeken"
empty: "Geen berichten gevonden voor '{}'" empty: "Geen berichten gevonden voor '{}'"

View File

@ -416,6 +416,25 @@ common/views/components/visibility-chooser.vue:
common/views/components/trends.vue: common/views/components/trends.vue:
count: "{}人が投稿" count: "{}人が投稿"
empty: "トレンドなし" empty: "トレンドなし"
common/views/components/profile-editor.vue:
title: "プロフィール"
name: "名前"
account: "アカウント"
location: "場所"
description: "自己紹介"
birthday: "誕生日"
avatar: "アイコン"
banner: "バナー"
is-cat: "このアカウントはCatです"
is-bot: "このアカウントはBotです"
is-locked: "フォローを承認制にする"
careful-bot: "Botからのフォローだけ承認制にする"
advanced: "その他"
privacy: "プライバシー"
save: "保存"
saved: "プロフィールを保存しました"
uploading: "アップロード中"
upload-failed: "アップロードに失敗しました"
common/views/widgets/broadcast.vue: common/views/widgets/broadcast.vue:
fetching: "Henter" fetching: "Henter"
no-broadcasts: "お知らせはありません" no-broadcasts: "お知らせはありません"
@ -640,12 +659,12 @@ desktop/views/components/note-detail.vue:
location: "Lokasjon" location: "Lokasjon"
renote: "Renote" renote: "Renote"
add-reaction: "リアクション" add-reaction: "リアクション"
desktop/views/components/notes.note.vue: desktop/views/components/note.vue:
reposted-by: "{}がRenote" reposted-by: "{}がRenote"
reply: "Svar" reply: "返信"
renote: "Renote" renote: "Renote"
add-reaction: "リアクション" add-reaction: "リアクション"
detail: "Vis detaljer" detail: "詳細"
private: "この投稿は非公開です" private: "この投稿は非公開です"
deleted: "この投稿は削除されました" deleted: "この投稿は削除されました"
desktop/views/components/notes.vue: desktop/views/components/notes.vue:
@ -726,8 +745,11 @@ desktop/views/components/settings.vue:
advanced: "Avanserte innstillinger" advanced: "Avanserte innstillinger"
api-via-stream: "ストリームを経由したAPIリクエスト" api-via-stream: "ストリームを経由したAPIリクエスト"
api-via-stream-desc: "この設定をオンにすると、websocket接続を経由してAPIリクエストが行われます(パフォーマンス向上が期待できます)。オフにすると、ネイティブの fetch APIが利用されます。この設定はこのデバイスのみ有効です。" api-via-stream-desc: "この設定をオンにすると、websocket接続を経由してAPIリクエストが行われます(パフォーマンス向上が期待できます)。オフにすると、ネイティブの fetch APIが利用されます。この設定はこのデバイスのみ有効です。"
deck-nav: "デッキ内ナビゲーション"
deck-nav-desc: "デッキを使用しているとき、ナビゲーションが発生する際にページ遷移を行わずに一時的なカラムで受けるようにします。"
display: "デザインと表示" display: "デザインと表示"
customize: "ホームをカスタマイズ" customize: "ホームをカスタマイズ"
wallpaper: "壁紙"
choose-wallpaper: "壁紙を選択" choose-wallpaper: "壁紙を選択"
delete-wallpaper: "壁紙を削除" delete-wallpaper: "壁紙を削除"
dark-mode: "ダークモード" dark-mode: "ダークモード"
@ -739,17 +761,19 @@ desktop/views/components/settings.vue:
suggest-recent-hashtags: "最近のハッシュタグを投稿フォームに表示する" suggest-recent-hashtags: "最近のハッシュタグを投稿フォームに表示する"
show-clock-on-header: "右上に時計を表示する" show-clock-on-header: "右上に時計を表示する"
show-reply-target: "リプライ先を表示する" show-reply-target: "リプライ先を表示する"
timeline: "タイムライン"
show-my-renotes: "自分の行ったRenoteをタイムラインに表示する" show-my-renotes: "自分の行ったRenoteをタイムラインに表示する"
show-renoted-my-notes: "自分の投稿のRenoteをタイムラインに表示する" show-renoted-my-notes: "自分の投稿のRenoteをタイムラインに表示する"
show-local-renotes: "ローカルの投稿のRenoteをタイムラインに表示する" show-local-renotes: "ローカルの投稿のRenoteをタイムラインに表示する"
show-maps: "マップの自動展開" show-maps: "マップの自動展開"
deck-column-align: "デッキのカラムの位置"
deck-column-align-center: "中央"
deck-column-align-left: "左"
sound: "Lyd" sound: "Lyd"
enable-sounds: "サウンドを有効にする" enable-sounds: "サウンドを有効にする"
enable-sounds-desc: "投稿やメッセージを送受信したときなどにサウンドを再生します。この設定はブラウザに記憶されます。" enable-sounds-desc: "投稿やメッセージを送受信したときなどにサウンドを再生します。この設定はブラウザに記憶されます。"
volume: "Volum" volume: "Volum"
test: "Test" test: "Test"
mobile: "Mobil"
disable-via-mobile: "「モバイルからの投稿」フラグを付けない"
language: "Språk" language: "Språk"
pick-language: "Velg språk" pick-language: "Velg språk"
recommended: "Anbefalt" recommended: "Anbefalt"
@ -828,21 +852,6 @@ desktop/views/components/settings.password.vue:
enter-new-password-again: "もう一度新しいパスワードを入力してください" enter-new-password-again: "もう一度新しいパスワードを入力してください"
not-match: "新しいパスワードが一致しません" not-match: "新しいパスワードが一致しません"
changed: "パスワードを変更しました" changed: "パスワードを変更しました"
desktop/views/components/settings.profile.vue:
avatar: "Avatar"
choice-avatar: "Velg et bilde"
name: "Navn"
location: "Lokasjon"
description: "Om meg"
birthday: "Bursdag"
save: "Lagre profilen"
locked-account: "アカウントの保護"
is-locked: "フォローを承認制にする"
careful-bot: "Botからのフォローだけ承認制にする"
other: "Annet"
is-bot: "このアカウントはBotです"
is-cat: "このアカウントはCatです"
profile-updated: "プロフィールを更新しました"
desktop/views/components/sub-note-content.vue: desktop/views/components/sub-note-content.vue:
private: "この投稿は非公開です" private: "この投稿は非公開です"
deleted: "この投稿は削除されました" deleted: "この投稿は削除されました"
@ -941,10 +950,8 @@ desktop/views/pages/deck/deck.tl-column.vue:
is-media-only: "メディア投稿のみ" is-media-only: "メディア投稿のみ"
is-media-view: "メディアビュー" is-media-view: "メディアビュー"
edit: "オプション" edit: "オプション"
desktop/views/pages/deck/deck.note.vue: desktop/views/pages/deck/deck.user-column.vue:
reposted-by: "{}がRenote" pinned-notes: "ピン留めされた投稿"
private: "この投稿は非公開です"
deleted: "この投稿は削除されました"
desktop/views/pages/stats/stats.vue: desktop/views/pages/stats/stats.vue:
all-users: "全てのユーザー" all-users: "全てのユーザー"
original-users: "このインスタンスのユーザー" original-users: "このインスタンスのユーザー"
@ -1221,24 +1228,6 @@ mobile/views/pages/notifications.vue:
read-all: "すべての通知を既読にしますか?" read-all: "すべての通知を既読にしますか?"
mobile/views/pages/games/reversi.vue: mobile/views/pages/games/reversi.vue:
reversi: "Reversi" reversi: "Reversi"
mobile/views/pages/settings/settings.profile.vue:
title: "プロフィール"
name: "Navn"
account: "Konto"
location: "Lokasjon"
description: "Om meg"
birthday: "Bursdag"
avatar: "Avatar"
banner: "Banner"
is-cat: "このアカウントはCatです"
is-locked: "フォローを承認制にする"
careful-bot: "Botからのフォローだけ承認制にする"
advanced: "Avansert"
privacy: "プライバシー"
save: "Lagre profilen"
saved: "プロフィールを保存しました"
uploading: "アップロード中"
upload-failed: "アップロードに失敗しました"
mobile/views/pages/search.vue: mobile/views/pages/search.vue:
search: "Søk" search: "Søk"
empty: "「{}」に関する投稿は見つかりませんでした。" empty: "「{}」に関する投稿は見つかりませんでした。"

View File

@ -416,6 +416,25 @@ common/views/components/visibility-chooser.vue:
common/views/components/trends.vue: common/views/components/trends.vue:
count: "{}人が投稿" count: "{}人が投稿"
empty: "トレンドなし" empty: "トレンドなし"
common/views/components/profile-editor.vue:
title: "プロフィール"
name: "名前"
account: "アカウント"
location: "場所"
description: "自己紹介"
birthday: "誕生日"
avatar: "アイコン"
banner: "バナー"
is-cat: "このアカウントはCatです"
is-bot: "このアカウントはBotです"
is-locked: "フォローを承認制にする"
careful-bot: "Botからのフォローだけ承認制にする"
advanced: "その他"
privacy: "プライバシー"
save: "保存"
saved: "プロフィールを保存しました"
uploading: "アップロード中"
upload-failed: "アップロードに失敗しました"
common/views/widgets/broadcast.vue: common/views/widgets/broadcast.vue:
fetching: "Sprawdzanie" fetching: "Sprawdzanie"
no-broadcasts: "Brak transmisji" no-broadcasts: "Brak transmisji"
@ -640,14 +659,14 @@ desktop/views/components/note-detail.vue:
location: "Informacje o lokalizacji" location: "Informacje o lokalizacji"
renote: "Udostępnienie" renote: "Udostępnienie"
add-reaction: "Dodaj reakcję" add-reaction: "Dodaj reakcję"
desktop/views/components/notes.note.vue: desktop/views/components/note.vue:
reposted-by: "Udostępniono przez {}" reposted-by: "{}がRenote"
reply: "Odpowiedz" reply: "返信"
renote: "Udostępnij" renote: "Renote"
add-reaction: "Dodaj reakcję" add-reaction: "リアクション"
detail: "Pokaż szczegóły" detail: "詳細"
private: "ten wpis jest prywatny" private: "この投稿は非公開です"
deleted: "ten wpis został usunięty" deleted: "この投稿は削除されました"
desktop/views/components/notes.vue: desktop/views/components/notes.vue:
error: "Ładowanie nie powiodło się." error: "Ładowanie nie powiodło się."
retry: "Spróbuj ponownie" retry: "Spróbuj ponownie"
@ -726,8 +745,11 @@ desktop/views/components/settings.vue:
advanced: "Ustawienia zaawansowane" advanced: "Ustawienia zaawansowane"
api-via-stream: "ストリームを経由したAPIリクエスト" api-via-stream: "ストリームを経由したAPIリクエスト"
api-via-stream-desc: "この設定をオンにすると、websocket接続を経由してAPIリクエストが行われます(パフォーマンス向上が期待できます)。オフにすると、ネイティブの fetch APIが利用されます。この設定はこのデバイスのみ有効です。" api-via-stream-desc: "この設定をオンにすると、websocket接続を経由してAPIリクエストが行われます(パフォーマンス向上が期待できます)。オフにすると、ネイティブの fetch APIが利用されます。この設定はこのデバイスのみ有効です。"
deck-nav: "デッキ内ナビゲーション"
deck-nav-desc: "デッキを使用しているとき、ナビゲーションが発生する際にページ遷移を行わずに一時的なカラムで受けるようにします。"
display: "Wygląd i wyświetlanie" display: "Wygląd i wyświetlanie"
customize: "Dostosuj stronę główną" customize: "Dostosuj stronę główną"
wallpaper: "壁紙"
choose-wallpaper: "Wybierz tło" choose-wallpaper: "Wybierz tło"
delete-wallpaper: "Usuń tło" delete-wallpaper: "Usuń tło"
dark-mode: "Tryb ciemny" dark-mode: "Tryb ciemny"
@ -739,17 +761,19 @@ desktop/views/components/settings.vue:
suggest-recent-hashtags: "最近のハッシュタグを投稿フォームに表示する" suggest-recent-hashtags: "最近のハッシュタグを投稿フォームに表示する"
show-clock-on-header: "右上に時計を表示する" show-clock-on-header: "右上に時計を表示する"
show-reply-target: "Pokazuj cel odpowiedzi" show-reply-target: "Pokazuj cel odpowiedzi"
timeline: "タイムライン"
show-my-renotes: "Pokazuj moje udostępnienia na osi czasu" show-my-renotes: "Pokazuj moje udostępnienia na osi czasu"
show-renoted-my-notes: "自分の投稿のRenoteをタイムラインに表示する" show-renoted-my-notes: "自分の投稿のRenoteをタイムラインに表示する"
show-local-renotes: "ローカルの投稿のRenoteをタイムラインに表示する" show-local-renotes: "ローカルの投稿のRenoteをタイムラインに表示する"
show-maps: "Automatycznie pokazuj mapę" show-maps: "Automatycznie pokazuj mapę"
deck-column-align: "デッキのカラムの位置"
deck-column-align-center: "中央"
deck-column-align-left: "左"
sound: "Dźwięk" sound: "Dźwięk"
enable-sounds: "Włącz dźwięk" enable-sounds: "Włącz dźwięk"
enable-sounds-desc: "Odtwarzaj dźwięk przy wstawianiu wpisów, wysyłaniu lub otrzymywaniu wiadomości. Opcja ta jest zapamiętywana przez przeglądarkę." enable-sounds-desc: "Odtwarzaj dźwięk przy wstawianiu wpisów, wysyłaniu lub otrzymywaniu wiadomości. Opcja ta jest zapamiętywana przez przeglądarkę."
volume: "Głośność" volume: "Głośność"
test: "Test" test: "Test"
mobile: "Wersja mobilna"
disable-via-mobile: "Nie oznaczaj wpisów jako „wysłane z telefonu”"
language: "Język" language: "Język"
pick-language: "Wybierz język" pick-language: "Wybierz język"
recommended: "Zalecane" recommended: "Zalecane"
@ -828,21 +852,6 @@ desktop/views/components/settings.password.vue:
enter-new-password-again: "Wprowadź ponownie nowe hasło" enter-new-password-again: "Wprowadź ponownie nowe hasło"
not-match: "Nowe hasła nie pasują do siebie" not-match: "Nowe hasła nie pasują do siebie"
changed: "Pomyślnie zmieniono hasło" changed: "Pomyślnie zmieniono hasło"
desktop/views/components/settings.profile.vue:
avatar: "Awatar"
choice-avatar: "Wybierz obraz"
name: "Nazwa"
location: "Lokalizacja"
description: "Opis"
birthday: "Data urodzenia"
save: "Aktualizuj profil"
locked-account: "Zabezpiecz swoje konto"
is-locked: "フォローを承認制にする"
careful-bot: "Botからのフォローだけ承認制にする"
other: "Inne"
is-bot: "To konto jest prowadzone przez bota"
is-cat: "To konto jest prowadzone przez kota"
profile-updated: "Zaktualizowano profil"
desktop/views/components/sub-note-content.vue: desktop/views/components/sub-note-content.vue:
private: "ten wpis jest prywatny" private: "ten wpis jest prywatny"
deleted: "ten wpis został usunięty" deleted: "ten wpis został usunięty"
@ -941,10 +950,8 @@ desktop/views/pages/deck/deck.tl-column.vue:
is-media-only: "Tylko wpisy z zawartością multimedialną" is-media-only: "Tylko wpisy z zawartością multimedialną"
is-media-view: "Widok multimediów" is-media-view: "Widok multimediów"
edit: "Opcje" edit: "Opcje"
desktop/views/pages/deck/deck.note.vue: desktop/views/pages/deck/deck.user-column.vue:
reposted-by: "Udostępniono przez {}" pinned-notes: "ピン留めされた投稿"
private: "ten wpis jest prywatny"
deleted: "ten wpis został usunięty"
desktop/views/pages/stats/stats.vue: desktop/views/pages/stats/stats.vue:
all-users: "全てのユーザー" all-users: "全てのユーザー"
original-users: "このインスタンスのユーザー" original-users: "このインスタンスのユーザー"
@ -1221,24 +1228,6 @@ mobile/views/pages/notifications.vue:
read-all: "Czy na pewno chcesz oznaczyć wszystkie powiadomienia jako przeczytane?" read-all: "Czy na pewno chcesz oznaczyć wszystkie powiadomienia jako przeczytane?"
mobile/views/pages/games/reversi.vue: mobile/views/pages/games/reversi.vue:
reversi: "Reversi" reversi: "Reversi"
mobile/views/pages/settings/settings.profile.vue:
title: "Profil"
name: "Nazwa"
account: "Konto"
location: "Lokalizacja"
description: "Opis"
birthday: "Data urodzenia"
avatar: "Awatar"
banner: "Baner"
is-cat: "To konto jest prowadzone przez kota"
is-locked: "フォローを承認制にする"
careful-bot: "Botからのフォローだけ承認制にする"
advanced: "その他"
privacy: "プライバシー"
save: "Aktualizuj profil"
saved: "Pomyślnie zaktualizowano profil"
uploading: "Wysyłanie"
upload-failed: "Wysyłanie nie powiodło się"
mobile/views/pages/search.vue: mobile/views/pages/search.vue:
search: "Szukaj" search: "Szukaj"
empty: "Nie znaleziono wpisów zawierających '{}'" empty: "Nie znaleziono wpisów zawierających '{}'"

View File

@ -416,6 +416,25 @@ common/views/components/visibility-chooser.vue:
common/views/components/trends.vue: common/views/components/trends.vue:
count: "{}人が投稿" count: "{}人が投稿"
empty: "トレンドなし" empty: "トレンドなし"
common/views/components/profile-editor.vue:
title: "プロフィール"
name: "名前"
account: "アカウント"
location: "場所"
description: "自己紹介"
birthday: "誕生日"
avatar: "アイコン"
banner: "バナー"
is-cat: "このアカウントはCatです"
is-bot: "このアカウントはBotです"
is-locked: "フォローを承認制にする"
careful-bot: "Botからのフォローだけ承認制にする"
advanced: "その他"
privacy: "プライバシー"
save: "保存"
saved: "プロフィールを保存しました"
uploading: "アップロード中"
upload-failed: "アップロードに失敗しました"
common/views/widgets/broadcast.vue: common/views/widgets/broadcast.vue:
fetching: "確認中" fetching: "確認中"
no-broadcasts: "お知らせはありません" no-broadcasts: "お知らせはありません"
@ -640,7 +659,7 @@ desktop/views/components/note-detail.vue:
location: "位置情報" location: "位置情報"
renote: "Renote" renote: "Renote"
add-reaction: "リアクション" add-reaction: "リアクション"
desktop/views/components/notes.note.vue: desktop/views/components/note.vue:
reposted-by: "{}がRenote" reposted-by: "{}がRenote"
reply: "返信" reply: "返信"
renote: "Renote" renote: "Renote"
@ -726,8 +745,11 @@ desktop/views/components/settings.vue:
advanced: "詳細設定" advanced: "詳細設定"
api-via-stream: "ストリームを経由したAPIリクエスト" api-via-stream: "ストリームを経由したAPIリクエスト"
api-via-stream-desc: "この設定をオンにすると、websocket接続を経由してAPIリクエストが行われます(パフォーマンス向上が期待できます)。オフにすると、ネイティブの fetch APIが利用されます。この設定はこのデバイスのみ有効です。" api-via-stream-desc: "この設定をオンにすると、websocket接続を経由してAPIリクエストが行われます(パフォーマンス向上が期待できます)。オフにすると、ネイティブの fetch APIが利用されます。この設定はこのデバイスのみ有効です。"
deck-nav: "デッキ内ナビゲーション"
deck-nav-desc: "デッキを使用しているとき、ナビゲーションが発生する際にページ遷移を行わずに一時的なカラムで受けるようにします。"
display: "デザインと表示" display: "デザインと表示"
customize: "ホームをカスタマイズ" customize: "ホームをカスタマイズ"
wallpaper: "壁紙"
choose-wallpaper: "壁紙を選択" choose-wallpaper: "壁紙を選択"
delete-wallpaper: "壁紙を削除" delete-wallpaper: "壁紙を削除"
dark-mode: "ダークモード" dark-mode: "ダークモード"
@ -739,17 +761,19 @@ desktop/views/components/settings.vue:
suggest-recent-hashtags: "最近のハッシュタグを投稿フォームに表示する" suggest-recent-hashtags: "最近のハッシュタグを投稿フォームに表示する"
show-clock-on-header: "右上に時計を表示する" show-clock-on-header: "右上に時計を表示する"
show-reply-target: "リプライ先を表示する" show-reply-target: "リプライ先を表示する"
timeline: "タイムライン"
show-my-renotes: "自分の行ったRenoteをタイムラインに表示する" show-my-renotes: "自分の行ったRenoteをタイムラインに表示する"
show-renoted-my-notes: "自分の投稿のRenoteをタイムラインに表示する" show-renoted-my-notes: "自分の投稿のRenoteをタイムラインに表示する"
show-local-renotes: "ローカルの投稿のRenoteをタイムラインに表示する" show-local-renotes: "ローカルの投稿のRenoteをタイムラインに表示する"
show-maps: "マップの自動展開" show-maps: "マップの自動展開"
deck-column-align: "デッキのカラムの位置"
deck-column-align-center: "中央"
deck-column-align-left: "左"
sound: "サウンド" sound: "サウンド"
enable-sounds: "サウンドを有効にする" enable-sounds: "サウンドを有効にする"
enable-sounds-desc: "投稿やメッセージを送受信したときなどにサウンドを再生します。この設定はブラウザに記憶されます。" enable-sounds-desc: "投稿やメッセージを送受信したときなどにサウンドを再生します。この設定はブラウザに記憶されます。"
volume: "ボリューム" volume: "ボリューム"
test: "テスト" test: "テスト"
mobile: "モバイル"
disable-via-mobile: "「モバイルからの投稿」フラグを付けない"
language: "言語" language: "言語"
pick-language: "言語を選択" pick-language: "言語を選択"
recommended: "推奨" recommended: "推奨"
@ -828,21 +852,6 @@ desktop/views/components/settings.password.vue:
enter-new-password-again: "もう一度新しいパスワードを入力してください" enter-new-password-again: "もう一度新しいパスワードを入力してください"
not-match: "新しいパスワードが一致しません" not-match: "新しいパスワードが一致しません"
changed: "パスワードを変更しました" changed: "パスワードを変更しました"
desktop/views/components/settings.profile.vue:
avatar: "アイコン"
choice-avatar: "画像を選択"
name: "名前"
location: "場所"
description: "自己紹介"
birthday: "誕生日"
save: "保存"
locked-account: "アカウントの保護"
is-locked: "フォローを承認制にする"
careful-bot: "Botからのフォローだけ承認制にする"
other: "その他"
is-bot: "このアカウントはBotです"
is-cat: "このアカウントはCatです"
profile-updated: "プロフィールを更新しました"
desktop/views/components/sub-note-content.vue: desktop/views/components/sub-note-content.vue:
private: "この投稿は非公開です" private: "この投稿は非公開です"
deleted: "この投稿は削除されました" deleted: "この投稿は削除されました"
@ -941,10 +950,8 @@ desktop/views/pages/deck/deck.tl-column.vue:
is-media-only: "メディア投稿のみ" is-media-only: "メディア投稿のみ"
is-media-view: "メディアビュー" is-media-view: "メディアビュー"
edit: "オプション" edit: "オプション"
desktop/views/pages/deck/deck.note.vue: desktop/views/pages/deck/deck.user-column.vue:
reposted-by: "{}がRenote" pinned-notes: "ピン留めされた投稿"
private: "この投稿は非公開です"
deleted: "この投稿は削除されました"
desktop/views/pages/stats/stats.vue: desktop/views/pages/stats/stats.vue:
all-users: "全てのユーザー" all-users: "全てのユーザー"
original-users: "このインスタンスのユーザー" original-users: "このインスタンスのユーザー"
@ -1221,24 +1228,6 @@ mobile/views/pages/notifications.vue:
read-all: "すべての通知を既読にしますか?" read-all: "すべての通知を既読にしますか?"
mobile/views/pages/games/reversi.vue: mobile/views/pages/games/reversi.vue:
reversi: "リバーシ" reversi: "リバーシ"
mobile/views/pages/settings/settings.profile.vue:
title: "プロフィール"
name: "Nome"
account: "Conta"
location: "Lugar"
description: "Biografia"
birthday: "Data de nascimento"
avatar: "Avatar"
banner: "Capa"
is-cat: "Esta conta é gato"
is-locked: "Pedido para seguir precisa ser aprovado"
careful-bot: "Botからのフォローだけ承認制にする"
advanced: "Avançado"
privacy: "Provacidade"
save: "Atualizar perfil"
saved: "Perfil atualizado"
uploading: "Enviando"
upload-failed: "Falha ao enviar"
mobile/views/pages/search.vue: mobile/views/pages/search.vue:
search: "Pesquisar" search: "Pesquisar"
empty: "「{}」に関する投稿は見つかりませんでした。" empty: "「{}」に関する投稿は見つかりませんでした。"

View File

@ -416,6 +416,25 @@ common/views/components/visibility-chooser.vue:
common/views/components/trends.vue: common/views/components/trends.vue:
count: "{}人が投稿" count: "{}人が投稿"
empty: "トレンドなし" empty: "トレンドなし"
common/views/components/profile-editor.vue:
title: "プロフィール"
name: "名前"
account: "アカウント"
location: "場所"
description: "自己紹介"
birthday: "誕生日"
avatar: "アイコン"
banner: "バナー"
is-cat: "このアカウントはCatです"
is-bot: "このアカウントはBotです"
is-locked: "フォローを承認制にする"
careful-bot: "Botからのフォローだけ承認制にする"
advanced: "その他"
privacy: "プライバシー"
save: "保存"
saved: "プロフィールを保存しました"
uploading: "アップロード中"
upload-failed: "アップロードに失敗しました"
common/views/widgets/broadcast.vue: common/views/widgets/broadcast.vue:
fetching: "確認中" fetching: "確認中"
no-broadcasts: "お知らせはありません" no-broadcasts: "お知らせはありません"
@ -640,7 +659,7 @@ desktop/views/components/note-detail.vue:
location: "位置情報" location: "位置情報"
renote: "Renote" renote: "Renote"
add-reaction: "リアクション" add-reaction: "リアクション"
desktop/views/components/notes.note.vue: desktop/views/components/note.vue:
reposted-by: "{}がRenote" reposted-by: "{}がRenote"
reply: "返信" reply: "返信"
renote: "Renote" renote: "Renote"
@ -726,8 +745,11 @@ desktop/views/components/settings.vue:
advanced: "詳細設定" advanced: "詳細設定"
api-via-stream: "ストリームを経由したAPIリクエスト" api-via-stream: "ストリームを経由したAPIリクエスト"
api-via-stream-desc: "この設定をオンにすると、websocket接続を経由してAPIリクエストが行われます(パフォーマンス向上が期待できます)。オフにすると、ネイティブの fetch APIが利用されます。この設定はこのデバイスのみ有効です。" api-via-stream-desc: "この設定をオンにすると、websocket接続を経由してAPIリクエストが行われます(パフォーマンス向上が期待できます)。オフにすると、ネイティブの fetch APIが利用されます。この設定はこのデバイスのみ有効です。"
deck-nav: "デッキ内ナビゲーション"
deck-nav-desc: "デッキを使用しているとき、ナビゲーションが発生する際にページ遷移を行わずに一時的なカラムで受けるようにします。"
display: "デザインと表示" display: "デザインと表示"
customize: "ホームをカスタマイズ" customize: "ホームをカスタマイズ"
wallpaper: "壁紙"
choose-wallpaper: "壁紙を選択" choose-wallpaper: "壁紙を選択"
delete-wallpaper: "壁紙を削除" delete-wallpaper: "壁紙を削除"
dark-mode: "ダークモード" dark-mode: "ダークモード"
@ -739,17 +761,19 @@ desktop/views/components/settings.vue:
suggest-recent-hashtags: "最近のハッシュタグを投稿フォームに表示する" suggest-recent-hashtags: "最近のハッシュタグを投稿フォームに表示する"
show-clock-on-header: "右上に時計を表示する" show-clock-on-header: "右上に時計を表示する"
show-reply-target: "リプライ先を表示する" show-reply-target: "リプライ先を表示する"
timeline: "タイムライン"
show-my-renotes: "自分の行ったRenoteをタイムラインに表示する" show-my-renotes: "自分の行ったRenoteをタイムラインに表示する"
show-renoted-my-notes: "自分の投稿のRenoteをタイムラインに表示する" show-renoted-my-notes: "自分の投稿のRenoteをタイムラインに表示する"
show-local-renotes: "ローカルの投稿のRenoteをタイムラインに表示する" show-local-renotes: "ローカルの投稿のRenoteをタイムラインに表示する"
show-maps: "マップの自動展開" show-maps: "マップの自動展開"
deck-column-align: "デッキのカラムの位置"
deck-column-align-center: "中央"
deck-column-align-left: "左"
sound: "サウンド" sound: "サウンド"
enable-sounds: "サウンドを有効にする" enable-sounds: "サウンドを有効にする"
enable-sounds-desc: "投稿やメッセージを送受信したときなどにサウンドを再生します。この設定はブラウザに記憶されます。" enable-sounds-desc: "投稿やメッセージを送受信したときなどにサウンドを再生します。この設定はブラウザに記憶されます。"
volume: "ボリューム" volume: "ボリューム"
test: "テスト" test: "テスト"
mobile: "モバイル"
disable-via-mobile: "「モバイルからの投稿」フラグを付けない"
language: "言語" language: "言語"
pick-language: "言語を選択" pick-language: "言語を選択"
recommended: "推奨" recommended: "推奨"
@ -828,21 +852,6 @@ desktop/views/components/settings.password.vue:
enter-new-password-again: "もう一度新しいパスワードを入力してください" enter-new-password-again: "もう一度新しいパスワードを入力してください"
not-match: "新しいパスワードが一致しません" not-match: "新しいパスワードが一致しません"
changed: "パスワードを変更しました" changed: "パスワードを変更しました"
desktop/views/components/settings.profile.vue:
avatar: "アイコン"
choice-avatar: "画像を選択"
name: "名前"
location: "場所"
description: "自己紹介"
birthday: "誕生日"
save: "保存"
locked-account: "アカウントの保護"
is-locked: "フォローを承認制にする"
careful-bot: "Botからのフォローだけ承認制にする"
other: "その他"
is-bot: "このアカウントはBotです"
is-cat: "このアカウントはCatです"
profile-updated: "プロフィールを更新しました"
desktop/views/components/sub-note-content.vue: desktop/views/components/sub-note-content.vue:
private: "この投稿は非公開です" private: "この投稿は非公開です"
deleted: "この投稿は削除されました" deleted: "この投稿は削除されました"
@ -941,10 +950,8 @@ desktop/views/pages/deck/deck.tl-column.vue:
is-media-only: "メディア投稿のみ" is-media-only: "メディア投稿のみ"
is-media-view: "メディアビュー" is-media-view: "メディアビュー"
edit: "オプション" edit: "オプション"
desktop/views/pages/deck/deck.note.vue: desktop/views/pages/deck/deck.user-column.vue:
reposted-by: "{}がRenote" pinned-notes: "ピン留めされた投稿"
private: "この投稿は非公開です"
deleted: "この投稿は削除されました"
desktop/views/pages/stats/stats.vue: desktop/views/pages/stats/stats.vue:
all-users: "全てのユーザー" all-users: "全てのユーザー"
original-users: "このインスタンスのユーザー" original-users: "このインスタンスのユーザー"
@ -1221,24 +1228,6 @@ mobile/views/pages/notifications.vue:
read-all: "すべての通知を既読にしますか?" read-all: "すべての通知を既読にしますか?"
mobile/views/pages/games/reversi.vue: mobile/views/pages/games/reversi.vue:
reversi: "リバーシ" reversi: "リバーシ"
mobile/views/pages/settings/settings.profile.vue:
title: "プロフィール"
name: "名前"
account: "アカウント"
location: "場所"
description: "自己紹介"
birthday: "誕生日"
avatar: "アイコン"
banner: "バナー"
is-cat: "このアカウントはCatです"
is-locked: "フォローを承認制にする"
careful-bot: "Botからのフォローだけ承認制にする"
advanced: "その他"
privacy: "プライバシー"
save: "保存"
saved: "プロフィールを保存しました"
uploading: "アップロード中"
upload-failed: "アップロードに失敗しました"
mobile/views/pages/search.vue: mobile/views/pages/search.vue:
search: "検索" search: "検索"
empty: "「{}」に関する投稿は見つかりませんでした。" empty: "「{}」に関する投稿は見つかりませんでした。"

View File

@ -416,6 +416,25 @@ common/views/components/visibility-chooser.vue:
common/views/components/trends.vue: common/views/components/trends.vue:
count: "{}人が投稿" count: "{}人が投稿"
empty: "トレンドなし" empty: "トレンドなし"
common/views/components/profile-editor.vue:
title: "プロフィール"
name: "名前"
account: "アカウント"
location: "場所"
description: "自己紹介"
birthday: "誕生日"
avatar: "アイコン"
banner: "バナー"
is-cat: "このアカウントはCatです"
is-bot: "このアカウントはBotです"
is-locked: "フォローを承認制にする"
careful-bot: "Botからのフォローだけ承認制にする"
advanced: "その他"
privacy: "プライバシー"
save: "保存"
saved: "プロフィールを保存しました"
uploading: "アップロード中"
upload-failed: "アップロードに失敗しました"
common/views/widgets/broadcast.vue: common/views/widgets/broadcast.vue:
fetching: "確認中" fetching: "確認中"
no-broadcasts: "お知らせはありません" no-broadcasts: "お知らせはありません"
@ -640,7 +659,7 @@ desktop/views/components/note-detail.vue:
location: "位置情報" location: "位置情報"
renote: "Renote" renote: "Renote"
add-reaction: "リアクション" add-reaction: "リアクション"
desktop/views/components/notes.note.vue: desktop/views/components/note.vue:
reposted-by: "{}がRenote" reposted-by: "{}がRenote"
reply: "返信" reply: "返信"
renote: "Renote" renote: "Renote"
@ -726,8 +745,11 @@ desktop/views/components/settings.vue:
advanced: "詳細設定" advanced: "詳細設定"
api-via-stream: "ストリームを経由したAPIリクエスト" api-via-stream: "ストリームを経由したAPIリクエスト"
api-via-stream-desc: "この設定をオンにすると、websocket接続を経由してAPIリクエストが行われます(パフォーマンス向上が期待できます)。オフにすると、ネイティブの fetch APIが利用されます。この設定はこのデバイスのみ有効です。" api-via-stream-desc: "この設定をオンにすると、websocket接続を経由してAPIリクエストが行われます(パフォーマンス向上が期待できます)。オフにすると、ネイティブの fetch APIが利用されます。この設定はこのデバイスのみ有効です。"
deck-nav: "デッキ内ナビゲーション"
deck-nav-desc: "デッキを使用しているとき、ナビゲーションが発生する際にページ遷移を行わずに一時的なカラムで受けるようにします。"
display: "デザインと表示" display: "デザインと表示"
customize: "ホームをカスタマイズ" customize: "ホームをカスタマイズ"
wallpaper: "壁紙"
choose-wallpaper: "壁紙を選択" choose-wallpaper: "壁紙を選択"
delete-wallpaper: "壁紙を削除" delete-wallpaper: "壁紙を削除"
dark-mode: "ダークモード" dark-mode: "ダークモード"
@ -739,17 +761,19 @@ desktop/views/components/settings.vue:
suggest-recent-hashtags: "最近のハッシュタグを投稿フォームに表示する" suggest-recent-hashtags: "最近のハッシュタグを投稿フォームに表示する"
show-clock-on-header: "右上に時計を表示する" show-clock-on-header: "右上に時計を表示する"
show-reply-target: "リプライ先を表示する" show-reply-target: "リプライ先を表示する"
timeline: "タイムライン"
show-my-renotes: "自分の行ったRenoteをタイムラインに表示する" show-my-renotes: "自分の行ったRenoteをタイムラインに表示する"
show-renoted-my-notes: "自分の投稿のRenoteをタイムラインに表示する" show-renoted-my-notes: "自分の投稿のRenoteをタイムラインに表示する"
show-local-renotes: "ローカルの投稿のRenoteをタイムラインに表示する" show-local-renotes: "ローカルの投稿のRenoteをタイムラインに表示する"
show-maps: "マップの自動展開" show-maps: "マップの自動展開"
deck-column-align: "デッキのカラムの位置"
deck-column-align-center: "中央"
deck-column-align-left: "左"
sound: "サウンド" sound: "サウンド"
enable-sounds: "サウンドを有効にする" enable-sounds: "サウンドを有効にする"
enable-sounds-desc: "投稿やメッセージを送受信したときなどにサウンドを再生します。この設定はブラウザに記憶されます。" enable-sounds-desc: "投稿やメッセージを送受信したときなどにサウンドを再生します。この設定はブラウザに記憶されます。"
volume: "ボリューム" volume: "ボリューム"
test: "テスト" test: "テスト"
mobile: "モバイル"
disable-via-mobile: "「モバイルからの投稿」フラグを付けない"
language: "言語" language: "言語"
pick-language: "言語を選択" pick-language: "言語を選択"
recommended: "推奨" recommended: "推奨"
@ -828,21 +852,6 @@ desktop/views/components/settings.password.vue:
enter-new-password-again: "もう一度新しいパスワードを入力してください" enter-new-password-again: "もう一度新しいパスワードを入力してください"
not-match: "新しいパスワードが一致しません" not-match: "新しいパスワードが一致しません"
changed: "パスワードを変更しました" changed: "パスワードを変更しました"
desktop/views/components/settings.profile.vue:
avatar: "アイコン"
choice-avatar: "画像を選択"
name: "名前"
location: "場所"
description: "自己紹介"
birthday: "誕生日"
save: "保存"
locked-account: "アカウントの保護"
is-locked: "フォローを承認制にする"
careful-bot: "Botからのフォローだけ承認制にする"
other: "その他"
is-bot: "このアカウントはBotです"
is-cat: "このアカウントはCatです"
profile-updated: "プロフィールを更新しました"
desktop/views/components/sub-note-content.vue: desktop/views/components/sub-note-content.vue:
private: "この投稿は非公開です" private: "この投稿は非公開です"
deleted: "この投稿は削除されました" deleted: "この投稿は削除されました"
@ -941,10 +950,8 @@ desktop/views/pages/deck/deck.tl-column.vue:
is-media-only: "メディア投稿のみ" is-media-only: "メディア投稿のみ"
is-media-view: "メディアビュー" is-media-view: "メディアビュー"
edit: "オプション" edit: "オプション"
desktop/views/pages/deck/deck.note.vue: desktop/views/pages/deck/deck.user-column.vue:
reposted-by: "{}がRenote" pinned-notes: "ピン留めされた投稿"
private: "この投稿は非公開です"
deleted: "この投稿は削除されました"
desktop/views/pages/stats/stats.vue: desktop/views/pages/stats/stats.vue:
all-users: "全てのユーザー" all-users: "全てのユーザー"
original-users: "このインスタンスのユーザー" original-users: "このインスタンスのユーザー"
@ -1221,24 +1228,6 @@ mobile/views/pages/notifications.vue:
read-all: "すべての通知を既読にしますか?" read-all: "すべての通知を既読にしますか?"
mobile/views/pages/games/reversi.vue: mobile/views/pages/games/reversi.vue:
reversi: "リバーシ" reversi: "リバーシ"
mobile/views/pages/settings/settings.profile.vue:
title: "プロフィール"
name: "名前"
account: "アカウント"
location: "場所"
description: "自己紹介"
birthday: "誕生日"
avatar: "アイコン"
banner: "バナー"
is-cat: "このアカウントはCatです"
is-locked: "フォローを承認制にする"
careful-bot: "Botからのフォローだけ承認制にする"
advanced: "その他"
privacy: "プライバシー"
save: "保存"
saved: "プロフィールを保存しました"
uploading: "アップロード中"
upload-failed: "アップロードに失敗しました"
mobile/views/pages/search.vue: mobile/views/pages/search.vue:
search: "検索" search: "検索"
empty: "「{}」に関する投稿は見つかりませんでした。" empty: "「{}」に関する投稿は見つかりませんでした。"

View File

@ -1,8 +1,8 @@
{ {
"name": "misskey", "name": "misskey",
"author": "syuilo <i@syuilo.com>", "author": "syuilo <i@syuilo.com>",
"version": "10.21.1", "version": "10.24.0",
"clientVersion": "1.0.10618", "clientVersion": "1.0.10734",
"codename": "nighthike", "codename": "nighthike",
"main": "./built/index.js", "main": "./built/index.js",
"private": true, "private": true,
@ -33,7 +33,7 @@
"@types/debug": "0.0.31", "@types/debug": "0.0.31",
"@types/deep-equal": "1.0.1", "@types/deep-equal": "1.0.1",
"@types/double-ended-queue": "2.1.0", "@types/double-ended-queue": "2.1.0",
"@types/elasticsearch": "5.0.27", "@types/elasticsearch": "5.0.28",
"@types/file-type": "5.2.1", "@types/file-type": "5.2.1",
"@types/gulp": "3.8.36", "@types/gulp": "3.8.36",
"@types/gulp-htmlmin": "1.3.32", "@types/gulp-htmlmin": "1.3.32",
@ -179,7 +179,7 @@
"qrcode": "1.3.0", "qrcode": "1.3.0",
"ratelimiter": "3.2.0", "ratelimiter": "3.2.0",
"recaptcha-promise": "0.1.3", "recaptcha-promise": "0.1.3",
"reconnecting-websocket": "4.1.8", "reconnecting-websocket": "4.1.9",
"redis": "2.8.0", "redis": "2.8.0",
"request": "2.88.0", "request": "2.88.0",
"request-promise-native": "1.0.5", "request-promise-native": "1.0.5",
@ -190,7 +190,7 @@
"sass-loader": "7.1.0", "sass-loader": "7.1.0",
"seedrandom": "2.4.4", "seedrandom": "2.4.4",
"sharp": "0.21.0", "sharp": "0.21.0",
"showdown": "1.8.6", "showdown": "1.8.7",
"showdown-highlightjs-extension": "0.1.2", "showdown-highlightjs-extension": "0.1.2",
"single-line-log": "1.1.2", "single-line-log": "1.1.2",
"speakeasy": "2.0.0", "speakeasy": "2.0.0",
@ -224,7 +224,7 @@
"vue-router": "3.0.1", "vue-router": "3.0.1",
"vue-style-loader": "4.1.2", "vue-style-loader": "4.1.2",
"vue-svg-inline-loader": "1.2.1", "vue-svg-inline-loader": "1.2.1",
"vue-sweetalert2": "1.5.5", "vue-sweetalert2": "1.5.6",
"vue-template-compiler": "2.5.17", "vue-template-compiler": "2.5.17",
"vuedraggable": "2.16.0", "vuedraggable": "2.16.0",
"vuewordcloud": "18.7.11", "vuewordcloud": "18.7.11",
@ -232,7 +232,7 @@
"vuex-persistedstate": "2.5.4", "vuex-persistedstate": "2.5.4",
"web-push": "3.3.3", "web-push": "3.3.3",
"webfinger.js": "2.6.6", "webfinger.js": "2.6.6",
"webpack": "4.20.2", "webpack": "4.21.0",
"webpack-cli": "3.1.2", "webpack-cli": "3.1.2",
"websocket": "1.0.28", "websocket": "1.0.28",
"ws": "6.1.0", "ws": "6.1.0",

View File

@ -1,5 +1,6 @@
import Vue from 'vue'; import Vue from 'vue';
import profileEditor from './profile-editor.vue';
import noteSkeleton from './note-skeleton.vue'; import noteSkeleton from './note-skeleton.vue';
import theme from './theme.vue'; import theme from './theme.vue';
import instance from './instance.vue'; import instance from './instance.vue';
@ -45,6 +46,7 @@ import uiSelect from './ui/select.vue';
import formButton from './ui/form/button.vue'; import formButton from './ui/form/button.vue';
import formRadio from './ui/form/radio.vue'; import formRadio from './ui/form/radio.vue';
Vue.component('mk-profile-editor', profileEditor);
Vue.component('mk-note-skeleton', noteSkeleton); Vue.component('mk-note-skeleton', noteSkeleton);
Vue.component('mk-theme', theme); Vue.component('mk-theme', theme);
Vue.component('mk-instance', instance); Vue.component('mk-instance', instance);

View File

@ -49,6 +49,7 @@
<div> <div>
<ui-switch v-model="isCat" @change="save(false)">%i18n:@is-cat%</ui-switch> <ui-switch v-model="isCat" @change="save(false)">%i18n:@is-cat%</ui-switch>
<ui-switch v-model="isBot" @change="save(false)">%i18n:@is-bot%</ui-switch>
<ui-switch v-model="alwaysMarkNsfw">%i18n:common.always-mark-nsfw%</ui-switch> <ui-switch v-model="alwaysMarkNsfw">%i18n:common.always-mark-nsfw%</ui-switch>
</div> </div>
</section> </section>
@ -66,7 +67,7 @@
<script lang="ts"> <script lang="ts">
import Vue from 'vue'; import Vue from 'vue';
import { apiUrl, host } from '../../../../config'; import { apiUrl, host } from '../../../config';
export default Vue.extend({ export default Vue.extend({
data() { data() {
@ -80,6 +81,7 @@ export default Vue.extend({
avatarId: null, avatarId: null,
bannerId: null, bannerId: null,
isCat: false, isCat: false,
isBot: false,
isLocked: false, isLocked: false,
carefulBot: false, carefulBot: false,
saving: false, saving: false,
@ -104,6 +106,7 @@ export default Vue.extend({
this.avatarId = this.$store.state.i.avatarId; this.avatarId = this.$store.state.i.avatarId;
this.bannerId = this.$store.state.i.bannerId; this.bannerId = this.$store.state.i.bannerId;
this.isCat = this.$store.state.i.isCat; this.isCat = this.$store.state.i.isCat;
this.isBot = this.$store.state.i.isBot;
this.isLocked = this.$store.state.i.isLocked; this.isLocked = this.$store.state.i.isLocked;
this.carefulBot = this.$store.state.i.carefulBot; this.carefulBot = this.$store.state.i.carefulBot;
}, },
@ -164,6 +167,7 @@ export default Vue.extend({
avatarId: this.avatarId, avatarId: this.avatarId,
bannerId: this.bannerId, bannerId: this.bannerId,
isCat: this.isCat, isCat: this.isCat,
isBot: this.isBot,
isLocked: this.isLocked, isLocked: this.isLocked,
carefulBot: this.carefulBot carefulBot: this.carefulBot
}).then(i => { }).then(i => {

View File

@ -1,5 +1,5 @@
<template> <template>
<div class="ui-card"> <div class="ui-card" :class="{ shadow: $store.state.settings.useShadow }">
<header> <header>
<slot name="title"></slot> <slot name="title"></slot>
</header> </header>
@ -24,7 +24,10 @@ export default Vue.extend({
margin 16px margin 16px
color var(--faceText) color var(--faceText)
background var(--face) background var(--face)
box-shadow 0 3px 1px -2px rgba(#000, 0.2), 0 2px 2px 0 rgba(#000, 0.14), 0 1px 5px 0 rgba(#000, 0.12) border-radius var(--round)
&.shadow
box-shadow 0 3px 1px -2px rgba(#000, 0.2), 0 2px 2px 0 rgba(#000, 0.14), 0 1px 5px 0 rgba(#000, 0.12)
> header > header
padding 16px padding 16px

View File

@ -122,17 +122,19 @@ export default Vue.extend({
} }
}, },
mounted() { mounted() {
if (this.$refs.prefix) { this.$nextTick(() => {
this.$refs.label.style.left = (this.$refs.prefix.offsetLeft + this.$refs.prefix.offsetWidth) + 'px'; if (this.$refs.prefix) {
if (this.$refs.prefix.offsetWidth) { this.$refs.label.style.left = (this.$refs.prefix.offsetLeft + this.$refs.prefix.offsetWidth) + 'px';
this.$refs.input.style.paddingLeft = this.$refs.prefix.offsetWidth + 'px'; if (this.$refs.prefix.offsetWidth) {
this.$refs.input.style.paddingLeft = this.$refs.prefix.offsetWidth + 'px';
}
} }
} if (this.$refs.suffix) {
if (this.$refs.suffix) { if (this.$refs.suffix.offsetWidth) {
if (this.$refs.suffix.offsetWidth) { this.$refs.input.style.paddingRight = this.$refs.suffix.offsetWidth + 'px';
this.$refs.input.style.paddingRight = this.$refs.suffix.offsetWidth + 'px'; }
} }
} });
}, },
methods: { methods: {
focus() { focus() {

View File

@ -73,9 +73,6 @@ export default define({
border-radius 8px border-radius 8px
.stream .stream
display -webkit-flex
display -moz-flex
display -ms-flex
display flex display flex
justify-content center justify-content center
flex-wrap wrap flex-wrap wrap

View File

@ -21,6 +21,7 @@ import updateAvatar from './api/update-avatar';
import updateBanner from './api/update-banner'; import updateBanner from './api/update-banner';
import MkIndex from './views/pages/index.vue'; import MkIndex from './views/pages/index.vue';
import MkHome from './views/pages/home.vue';
import MkDeck from './views/pages/deck/deck.vue'; import MkDeck from './views/pages/deck/deck.vue';
import MkAdmin from './views/pages/admin/admin.vue'; import MkAdmin from './views/pages/admin/admin.vue';
import MkStats from './views/pages/stats/stats.vue'; import MkStats from './views/pages/stats/stats.vue';
@ -54,6 +55,7 @@ init(async (launch) => {
mode: 'history', mode: 'history',
routes: [ routes: [
{ path: '/', name: 'index', component: MkIndex }, { path: '/', name: 'index', component: MkIndex },
{ path: '/home', name: 'home', component: MkHome },
{ path: '/deck', name: 'deck', component: MkDeck }, { path: '/deck', name: 'deck', component: MkDeck },
{ path: '/admin', name: 'admin', component: MkAdmin }, { path: '/admin', name: 'admin', component: MkAdmin },
{ path: '/stats', name: 'stats', component: MkStats }, { path: '/stats', name: 'stats', component: MkStats },
@ -67,8 +69,8 @@ init(async (launch) => {
{ path: '/tags/:tag', component: MkTag }, { path: '/tags/:tag', component: MkTag },
{ path: '/share', component: MkShare }, { path: '/share', component: MkShare },
{ path: '/reversi/:game?', component: MkReversi }, { path: '/reversi/:game?', component: MkReversi },
{ path: '/@:user', component: MkUser }, { path: '/@:user', name: 'user', component: MkUser },
{ path: '/notes/:note', component: MkNote }, { path: '/notes/:note', name: 'note', component: MkNote },
{ path: '/authorize-follow', component: MkFollow } { path: '/authorize-follow', component: MkFollow }
] ]
}); });

View File

@ -91,7 +91,7 @@ import MkPostFormWindow from './post-form-window.vue';
import MkRenoteFormWindow from './renote-form-window.vue'; import MkRenoteFormWindow from './renote-form-window.vue';
import MkNoteMenu from '../../../common/views/components/note-menu.vue'; import MkNoteMenu from '../../../common/views/components/note-menu.vue';
import MkReactionPicker from '../../../common/views/components/reaction-picker.vue'; import MkReactionPicker from '../../../common/views/components/reaction-picker.vue';
import XSub from './notes.note.sub.vue'; import XSub from './note.sub.vue';
import { sum } from '../../../../../prelude/array'; import { sum } from '../../../../../prelude/array';
import noteSubscriber from '../../../common/scripts/note-subscriber'; import noteSubscriber from '../../../common/scripts/note-subscriber';

View File

@ -1,5 +1,5 @@
<template> <template>
<div class="tkfdzaxtkdeianobciwadajxzbddorql" :title="title"> <div class="tkfdzaxtkdeianobciwadajxzbddorql" :class="{ mini }" :title="title">
<mk-avatar class="avatar" :user="note.user"/> <mk-avatar class="avatar" :user="note.user"/>
<div class="main"> <div class="main">
<mk-note-header class="header" :note="note"/> <mk-note-header class="header" :note="note"/>
@ -24,6 +24,11 @@ export default Vue.extend({
note: { note: {
type: Object, type: Object,
required: true required: true
},
mini: {
type: Boolean,
required: false,
default: false
} }
}, },
@ -44,11 +49,19 @@ export default Vue.extend({
<style lang="stylus" scoped> <style lang="stylus" scoped>
.tkfdzaxtkdeianobciwadajxzbddorql .tkfdzaxtkdeianobciwadajxzbddorql
display flex display flex
margin 0
padding 16px 32px padding 16px 32px
font-size 0.9em font-size 0.9em
background var(--subNoteBg) background var(--subNoteBg)
&.mini
padding 16px
font-size 10px
> .avatar
margin 0 8px 0 0
width 38px
height 38px
> .avatar > .avatar
flex-shrink 0 flex-shrink 0
display block display block

View File

@ -1,7 +1,17 @@
<template> <template>
<div class="note" v-show="appearNote.deletedAt == null" :tabindex="appearNote.deletedAt == null ? '-1' : null" v-hotkey="keymap" :title="title"> <div
class="note"
:class="{ mini }"
v-show="appearNote.deletedAt == null"
:tabindex="appearNote.deletedAt == null ? '-1' : null"
v-hotkey="keymap"
:title="title"
>
<div class="conversation" v-if="detail && conversation.length > 0">
<x-sub v-for="note in conversation" :key="note.id" :note="note" :mini="mini"/>
</div>
<div class="reply-to" v-if="appearNote.reply && (!$store.getters.isSignedIn || $store.state.settings.showReplyTarget)"> <div class="reply-to" v-if="appearNote.reply && (!$store.getters.isSignedIn || $store.state.settings.showReplyTarget)">
<x-sub :note="appearNote.reply"/> <x-sub :note="appearNote.reply" :mini="mini"/>
</div> </div>
<div class="renote" v-if="isRenote"> <div class="renote" v-if="isRenote">
<mk-avatar class="avatar" :user="note.user"/> <mk-avatar class="avatar" :user="note.user"/>
@ -32,8 +42,8 @@
</div> </div>
<mk-poll v-if="appearNote.poll" :note="appearNote" ref="pollViewer"/> <mk-poll v-if="appearNote.poll" :note="appearNote" ref="pollViewer"/>
<a class="location" v-if="appearNote.geo" :href="`https://maps.google.com/maps?q=${appearNote.geo.coordinates[1]},${appearNote.geo.coordinates[0]}`" target="_blank">%fa:map-marker-alt% 位置情報</a> <a class="location" v-if="appearNote.geo" :href="`https://maps.google.com/maps?q=${appearNote.geo.coordinates[1]},${appearNote.geo.coordinates[0]}`" target="_blank">%fa:map-marker-alt% 位置情報</a>
<div class="renote" v-if="appearNote.renote"><mk-note-preview :note="appearNote.renote"/></div> <div class="renote" v-if="appearNote.renote"><mk-note-preview :note="appearNote.renote" :mini="mini"/></div>
<mk-url-preview v-for="url in urls" :url="url" :key="url"/> <mk-url-preview v-for="url in urls" :url="url" :key="url" :mini="mini"/>
</div> </div>
</div> </div>
<footer> <footer>
@ -55,15 +65,16 @@
</footer> </footer>
</div> </div>
</article> </article>
<div class="replies" v-if="detail && replies.length > 0">
<x-sub v-for="note in replies" :key="note.id" :note="note" :mini="mini"/>
</div>
</div> </div>
</template> </template>
<script lang="ts"> <script lang="ts">
import Vue from 'vue'; import Vue from 'vue';
import MkPostFormWindow from './post-form-window.vue'; import XSub from './note.sub.vue';
import MkRenoteFormWindow from './renote-form-window.vue';
import XSub from './notes.note.sub.vue';
import noteMixin from '../../../common/scripts/note-mixin'; import noteMixin from '../../../common/scripts/note-mixin';
import noteSubscriber from '../../../common/scripts/note-subscriber'; import noteSubscriber from '../../../common/scripts/note-subscriber';
@ -81,6 +92,40 @@ export default Vue.extend({
note: { note: {
type: Object, type: Object,
required: true required: true
},
detail: {
type: Boolean,
required: false,
default: false
},
mini: {
type: Boolean,
required: false,
default: false
}
},
data() {
return {
conversation: [],
replies: []
};
},
created() {
if (this.detail) {
(this as any).api('notes/replies', {
noteId: this.appearNote.id,
limit: 8
}).then(replies => {
this.replies = replies;
});
(this as any).api('notes/conversation', {
noteId: this.appearNote.replyId
}).then(conversation => {
this.conversation = conversation.reverse();
});
} }
} }
}); });
@ -93,14 +138,23 @@ export default Vue.extend({
background var(--face) background var(--face)
border-bottom solid 1px var(--faceDivider) border-bottom solid 1px var(--faceDivider)
&[data-round] &.mini
&:first-child font-size 13px
border-top-left-radius 6px
border-top-right-radius 6px
> .renote > .renote
border-top-left-radius 6px padding 8px 16px 0 16px
border-top-right-radius 6px
.avatar
width 20px
height 20px
> article
padding 16px 16px 4px
> .avatar
margin 0 10px 8px 0
width 42px
height 42px
&:last-of-type &:last-of-type
border-bottom none border-bottom none
@ -129,6 +183,7 @@ export default Vue.extend({
background linear-gradient(to bottom, var(--renoteGradient) 0%, var(--face) 100%) background linear-gradient(to bottom, var(--renoteGradient) 0%, var(--face) 100%)
.avatar .avatar
flex-shrink 0
display inline-block display inline-block
width 28px width 28px
height 28px height 28px
@ -273,6 +328,9 @@ export default Vue.extend({
border none border none
cursor pointer cursor pointer
&:last-child
margin-right 0
&:hover &:hover
color var(--noteActionsHover) color var(--noteActionsHover)

View File

@ -40,7 +40,7 @@ import Vue from 'vue';
import * as config from '../../../config'; import * as config from '../../../config';
import getNoteSummary from '../../../../../misc/get-note-summary'; import getNoteSummary from '../../../../../misc/get-note-summary';
import XNote from './notes.note.vue'; import XNote from './note.vue';
const displayLimit = 30; const displayLimit = 30;

View File

@ -307,7 +307,7 @@ export default Vue.extend({
display block display block
width 100% width 100%
padding 16px padding 16px
color #555 color var(--text)
border-top solid 1px rgba(#000, 0.05) border-top solid 1px rgba(#000, 0.05)
&:hover &:hover
@ -326,6 +326,6 @@ export default Vue.extend({
margin 0 margin 0
padding 16px padding 16px
text-align center text-align center
color #aaa color var(--text)
</style> </style>

View File

@ -2,10 +2,10 @@
<div class="2fa"> <div class="2fa">
<p>%i18n:@intro%<a href="%i18n:@url%" target="_blank">%i18n:@detail%</a></p> <p>%i18n:@intro%<a href="%i18n:@url%" target="_blank">%i18n:@detail%</a></p>
<div class="ui info warn"><p>%fa:exclamation-triangle%%i18n:@caution%</p></div> <div class="ui info warn"><p>%fa:exclamation-triangle%%i18n:@caution%</p></div>
<p v-if="!data && !$store.state.i.twoFactorEnabled"><button @click="register" class="ui primary">%i18n:@register%</button></p> <p v-if="!data && !$store.state.i.twoFactorEnabled"><ui-button @click="register">%i18n:@register%</ui-button></p>
<template v-if="$store.state.i.twoFactorEnabled"> <template v-if="$store.state.i.twoFactorEnabled">
<p>%i18n:@already-registered%</p> <p>%i18n:@already-registered%</p>
<button @click="unregister" class="ui">%i18n:@unregister%</button> <ui-button @click="unregister">%i18n:@unregister%</ui-button>
</template> </template>
<div v-if="data"> <div v-if="data">
<ol> <ol>
@ -13,7 +13,7 @@
<li>%i18n:@scan%<br><img :src="data.qr"></li> <li>%i18n:@scan%<br><img :src="data.qr"></li>
<li>%i18n:@done%<br> <li>%i18n:@done%<br>
<input type="number" v-model="token" class="ui"> <input type="number" v-model="token" class="ui">
<button @click="submit" class="ui primary">%i18n:@submit%</button> <ui-button primary @click="submit">%i18n:@submit%</ui-button>
</li> </li>
</ol> </ol>
<div class="ui info"><p>%fa:info-circle%%i18n:@info%</p></div> <div class="ui info"><p>%fa:info-circle%%i18n:@info%</p></div>

View File

@ -1,10 +1,12 @@
<template> <template>
<div class="root api"> <div class="root api">
<p>%i18n:@token% <code>{{ $store.state.i.token }}</code></p> <ui-input :value="$store.state.i.token" readonly>
<span>%i18n:@token%</span>
</ui-input>
<p>%i18n:@intro%</p> <p>%i18n:@intro%</p>
<div class="ui info warn"><p>%fa:exclamation-triangle%%i18n:@caution%</p></div> <div class="ui info warn"><p>%fa:exclamation-triangle%%i18n:@caution%</p></div>
<p>%i18n:@regeneration-of-token%</p> <p>%i18n:@regeneration-of-token%</p>
<button class="ui" @click="regenerateToken">%i18n:@regenerate-token%</button> <ui-button @click="regenerateToken">%i18n:@regenerate-token%</ui-button>
</div> </div>
</template> </template>

View File

@ -1,6 +1,6 @@
<template> <template>
<div> <div>
<button @click="reset" class="ui primary">%i18n:@reset%</button> <ui-button @click="reset">%i18n:@reset%</ui-button>
</div> </div>
</template> </template>

View File

@ -1,106 +0,0 @@
<template>
<div class="profile">
<label class="avatar ui from group">
<p>%i18n:@avatar%</p>
<img class="avatar" :src="$store.state.i.avatarUrl" alt="avatar"/>
<button class="ui" @click="updateAvatar">%i18n:@choice-avatar%</button>
</label>
<label class="ui from group">
<ui-input v-model="name" type="text">%i18n:@name%</ui-input>
</label>
<label class="ui from group">
<ui-input v-model="location" type="text">%i18n:@location%</ui-input>
</label>
<label class="ui from group">
<ui-textarea v-model="description">%i18n:@description%</ui-textarea>
</label>
<label class="ui from group">
<p>%i18n:@birthday%</p>
<input type="date" v-model="birthday"/>
</label>
<ui-button primary @click="save">%i18n:@save%</ui-button>
<section>
<h2>%i18n:@locked-account%</h2>
<ui-switch v-model="isLocked" @change="save(false)">%i18n:@is-locked%</ui-switch>
<ui-switch v-model="carefulBot" @change="save(false)">%i18n:@careful-bot%</ui-switch>
</section>
<section>
<h2>%i18n:@other%</h2>
<ui-switch v-model="isBot" @change="save(false)">%i18n:@is-bot%</ui-switch>
<ui-switch v-model="isCat" @change="save(false)">%i18n:@is-cat%</ui-switch>
<ui-switch v-model="alwaysMarkNsfw">%i18n:common.always-mark-nsfw%</ui-switch>
</section>
</div>
</template>
<script lang="ts">
import Vue from 'vue';
export default Vue.extend({
data() {
return {
name: null,
location: null,
description: null,
birthday: null,
isBot: false,
isCat: false,
isLocked: false,
carefulBot: false,
};
},
computed: {
alwaysMarkNsfw: {
get() { return this.$store.state.i.settings.alwaysMarkNsfw; },
set(value) { (this as any).api('i/update', { alwaysMarkNsfw: value }); }
},
},
created() {
this.name = this.$store.state.i.name || '';
this.location = this.$store.state.i.profile.location;
this.description = this.$store.state.i.description;
this.birthday = this.$store.state.i.profile.birthday;
this.isCat = this.$store.state.i.isCat;
this.isBot = this.$store.state.i.isBot;
this.isLocked = this.$store.state.i.isLocked;
this.carefulBot = this.$store.state.i.carefulBot;
},
methods: {
updateAvatar() {
(this as any).apis.updateAvatar();
},
save(notify) {
(this as any).api('i/update', {
name: this.name || null,
location: this.location || null,
description: this.description || null,
birthday: this.birthday || null,
isCat: this.isCat,
isBot: this.isBot,
isLocked: this.isLocked,
carefulBot: this.carefulBot
}).then(() => {
if (notify) {
(this as any).apis.notify('%i18n:@profile-updated%');
}
});
}
}
});
</script>
<style lang="stylus" scoped>
.profile
> .avatar
> img
display inline-block
vertical-align top
width 64px
height 64px
border-radius 4px
> button
margin-left 8px
</style>

View File

@ -2,38 +2,66 @@
<div class="mk-settings"> <div class="mk-settings">
<div class="nav"> <div class="nav">
<p :class="{ active: page == 'profile' }" @mousedown="page = 'profile'">%fa:user .fw%%i18n:@profile%</p> <p :class="{ active: page == 'profile' }" @mousedown="page = 'profile'">%fa:user .fw%%i18n:@profile%</p>
<p :class="{ active: page == 'theme' }" @mousedown="page = 'theme'">%fa:palette .fw%%i18n:@theme%</p>
<p :class="{ active: page == 'web' }" @mousedown="page = 'web'">%fa:desktop .fw%Web</p> <p :class="{ active: page == 'web' }" @mousedown="page = 'web'">%fa:desktop .fw%Web</p>
<p :class="{ active: page == 'notification' }" @mousedown="page = 'notification'">%fa:R bell .fw%%i18n:@notification%</p> <p :class="{ active: page == 'notification' }" @mousedown="page = 'notification'">%fa:R bell .fw%%i18n:@notification%</p>
<p :class="{ active: page == 'drive' }" @mousedown="page = 'drive'">%fa:cloud .fw%%i18n:@drive%</p> <p :class="{ active: page == 'drive' }" @mousedown="page = 'drive'">%fa:cloud .fw%%i18n:@drive%</p>
<p :class="{ active: page == 'hashtags' }" @mousedown="page = 'hashtags'">%fa:hashtag .fw%%i18n:@tags%</p> <p :class="{ active: page == 'hashtags' }" @mousedown="page = 'hashtags'">%fa:hashtag .fw%%i18n:@tags%</p>
<p :class="{ active: page == 'mute' }" @mousedown="page = 'mute'">%fa:ban .fw%%i18n:@mute%</p> <p :class="{ active: page == 'mute' }" @mousedown="page = 'mute'">%fa:ban .fw%%i18n:@mute%</p>
<p :class="{ active: page == 'apps' }" @mousedown="page = 'apps'">%fa:puzzle-piece .fw%%i18n:@apps%</p> <p :class="{ active: page == 'apps' }" @mousedown="page = 'apps'">%fa:puzzle-piece .fw%%i18n:@apps%</p>
<p :class="{ active: page == 'twitter' }" @mousedown="page = 'twitter'">%fa:B twitter .fw%Twitter</p>
<p :class="{ active: page == 'security' }" @mousedown="page = 'security'">%fa:unlock-alt .fw%%i18n:@security%</p> <p :class="{ active: page == 'security' }" @mousedown="page = 'security'">%fa:unlock-alt .fw%%i18n:@security%</p>
<p :class="{ active: page == 'api' }" @mousedown="page = 'api'">%fa:key .fw%API</p> <p :class="{ active: page == 'api' }" @mousedown="page = 'api'">%fa:key .fw%API</p>
<p :class="{ active: page == 'other' }" @mousedown="page = 'other'">%fa:cogs .fw%%i18n:@other%</p> <p :class="{ active: page == 'other' }" @mousedown="page = 'other'">%fa:cogs .fw%%i18n:@other%</p>
</div> </div>
<div class="pages"> <div class="pages">
<section class="profile" v-show="page == 'profile'"> <div class="profile" v-show="page == 'profile'">
<h1>%i18n:@profile%</h1> <mk-profile-editor/>
<x-profile/>
</section>
<section class="web" v-show="page == 'web'"> <ui-card>
<h1>%i18n:@theme%</h1> <div slot="title">%fa:B twitter% %i18n:@twitter%</div>
<mk-theme/> <section>
</section> <mk-twitter-setting/>
</section>
</ui-card>
</div>
<section class="web" v-show="page == 'web'"> <ui-card class="theme" v-show="page == 'theme'">
<h1>%i18n:@behaviour%</h1> <div slot="title">%fa:palette% %i18n:@theme%</div>
<ui-switch v-model="fetchOnScroll">
%i18n:@fetch-on-scroll% <section>
<span slot="desc">%i18n:@fetch-on-scroll-desc%</span> <mk-theme/>
</ui-switch> </section>
<ui-switch v-model="autoPopout"> </ui-card>
%i18n:@auto-popout%
<span slot="desc">%i18n:@auto-popout-desc%</span> <ui-card class="web" v-show="page == 'web'">
</ui-switch> <div slot="title">%fa:sliders-h% %i18n:@behaviour%</div>
<section>
<ui-switch v-model="fetchOnScroll">
%i18n:@fetch-on-scroll%
<span slot="desc">%i18n:@fetch-on-scroll-desc%</span>
</ui-switch>
<ui-switch v-model="autoPopout">
%i18n:@auto-popout%
<span slot="desc">%i18n:@auto-popout-desc%</span>
</ui-switch>
<ui-switch v-model="deckNav">%i18n:@deck-nav%<span slot="desc">%i18n:@deck-nav-desc%</span></ui-switch>
<details>
<summary>%i18n:@advanced%</summary>
<ui-switch v-model="apiViaStream">
%i18n:@api-via-stream%
<span slot="desc">%i18n:@api-via-stream-desc%</span>
</ui-switch>
</details>
</section>
<section>
<header>%i18n:@timeline%</header>
<ui-switch v-model="showMyRenotes">%i18n:@show-my-renotes%</ui-switch>
<ui-switch v-model="showRenotedMyNotes">%i18n:@show-renoted-my-notes%</ui-switch>
<ui-switch v-model="showLocalRenotes">%i18n:@show-local-renotes%</ui-switch>
</section>
<section> <section>
<header>%i18n:@note-visibility%</header> <header>%i18n:@note-visibility%</header>
@ -49,24 +77,30 @@
</ui-select> </ui-select>
</section> </section>
</section> </section>
</ui-card>
<details> <ui-card class="web" v-show="page == 'web'">
<summary>%i18n:@advanced%</summary> <div slot="title">%fa:desktop% %i18n:@display%</div>
<ui-switch v-model="apiViaStream">
%i18n:@api-via-stream%
<span slot="desc">%i18n:@api-via-stream-desc%</span>
</ui-switch>
</details>
</section>
<section class="web" v-show="page == 'web'"> <section>
<h1>%i18n:@display%</h1> <ui-switch v-model="showPostFormOnTopOfTl">%i18n:@post-form-on-timeline%</ui-switch>
<div class="div"> <ui-button @click="customizeHome">%i18n:@customize%</ui-button>
<button class="ui button" @click="customizeHome" style="margin-bottom: 16px">%i18n:@customize%</button> </section>
</div> <section>
<div class="div"> <header>%i18n:@wallpaper%</header>
<button class="ui" @click="updateWallpaper">%i18n:@choose-wallpaper%</button> <ui-button @click="updateWallpaper">%i18n:@choose-wallpaper%</ui-button>
<button class="ui" @click="deleteWallpaper">%i18n:@delete-wallpaper%</button> <ui-button @click="deleteWallpaper">%i18n:@delete-wallpaper%</ui-button>
</section>
<section>
<header>%i18n:@navbar-position%</header>
<ui-radio v-model="navbar" value="top">%i18n:@navbar-position-top%</ui-radio>
<ui-radio v-model="navbar" value="left">%i18n:@navbar-position-left%</ui-radio>
<ui-radio v-model="navbar" value="right">%i18n:@navbar-position-right%</ui-radio>
</section>
<section>
<ui-switch v-model="deckDefault">%i18n:@deck-default%</ui-switch>
</section>
<section>
<ui-switch v-model="darkmode">%i18n:@dark-mode%</ui-switch> <ui-switch v-model="darkmode">%i18n:@dark-mode%</ui-switch>
<ui-switch v-model="useShadow">%i18n:@use-shadow%</ui-switch> <ui-switch v-model="useShadow">%i18n:@use-shadow%</ui-switch>
<ui-switch v-model="roundedCorners">%i18n:@rounded-corners%</ui-switch> <ui-switch v-model="roundedCorners">%i18n:@rounded-corners%</ui-switch>
@ -75,171 +109,192 @@
<ui-switch v-model="contrastedAcct">%i18n:@contrasted-acct%</ui-switch> <ui-switch v-model="contrastedAcct">%i18n:@contrasted-acct%</ui-switch>
<ui-switch v-model="showFullAcct">%i18n:common.show-full-acct%</ui-switch> <ui-switch v-model="showFullAcct">%i18n:common.show-full-acct%</ui-switch>
<ui-switch v-model="iLikeSushi">%i18n:common.i-like-sushi%</ui-switch> <ui-switch v-model="iLikeSushi">%i18n:common.i-like-sushi%</ui-switch>
</div> </section>
<ui-switch v-model="showPostFormOnTopOfTl">%i18n:@post-form-on-timeline%</ui-switch> <section>
<ui-switch v-model="suggestRecentHashtags">%i18n:@suggest-recent-hashtags%</ui-switch> <ui-switch v-model="suggestRecentHashtags">%i18n:@suggest-recent-hashtags%</ui-switch>
<ui-switch v-model="showClockOnHeader">%i18n:@show-clock-on-header%</ui-switch> <ui-switch v-model="showClockOnHeader">%i18n:@show-clock-on-header%</ui-switch>
<ui-switch v-model="alwaysShowNsfw">%i18n:common.always-show-nsfw%</ui-switch> <ui-switch v-model="alwaysShowNsfw">%i18n:common.always-show-nsfw%</ui-switch>
<ui-switch v-model="showReplyTarget">%i18n:@show-reply-target%</ui-switch> <ui-switch v-model="showReplyTarget">%i18n:@show-reply-target%</ui-switch>
<ui-switch v-model="showMyRenotes">%i18n:@show-my-renotes%</ui-switch> <ui-switch v-model="showMaps">%i18n:@show-maps%</ui-switch>
<ui-switch v-model="showRenotedMyNotes">%i18n:@show-renoted-my-notes%</ui-switch> <ui-switch v-model="disableAnimatedMfm">%i18n:common.disable-animated-mfm%</ui-switch>
<ui-switch v-model="showLocalRenotes">%i18n:@show-local-renotes%</ui-switch> </section>
<ui-switch v-model="showMaps">%i18n:@show-maps%</ui-switch> <section>
<ui-switch v-model="disableAnimatedMfm">%i18n:common.disable-animated-mfm%</ui-switch> <header>%i18n:@deck-column-align%</header>
<ui-switch v-model="games_reversi_showBoardLabels">%i18n:common.show-reversi-board-labels%</ui-switch> <ui-radio v-model="deckColumnAlign" value="center">%i18n:@deck-column-align-center%</ui-radio>
<ui-switch v-model="games_reversi_useContrastStones">%i18n:common.use-contrast-reversi-stones%</ui-switch> <ui-radio v-model="deckColumnAlign" value="left">%i18n:@deck-column-align-left%</ui-radio>
</section>
<section>
<ui-switch v-model="games_reversi_showBoardLabels">%i18n:common.show-reversi-board-labels%</ui-switch>
<ui-switch v-model="games_reversi_useContrastStones">%i18n:common.use-contrast-reversi-stones%</ui-switch>
</section>
</ui-card>
<ui-card class="web" v-show="page == 'web'">
<div slot="title">%fa:volume-up% %i18n:@sound%</div>
<section> <section>
<header>%i18n:@navbar-position%</header> <ui-switch v-model="enableSounds">
<ui-radio v-model="navbar" value="top">%i18n:@navbar-position-top%</ui-radio> %i18n:@enable-sounds%
<ui-radio v-model="navbar" value="left">%i18n:@navbar-position-left%</ui-radio> <span slot="desc">%i18n:@enable-sounds-desc%</span>
<ui-radio v-model="navbar" value="right">%i18n:@navbar-position-right%</ui-radio>
</section>
</section>
<section class="web" v-show="page == 'web'">
<h1>%i18n:@sound%</h1>
<ui-switch v-model="enableSounds">
%i18n:@enable-sounds%
<span slot="desc">%i18n:@enable-sounds-desc%</span>
</ui-switch>
<label>%i18n:@volume%</label>
<input type="range"
v-model="soundVolume"
:disabled="!enableSounds"
max="1"
step="0.1"
/>
<button class="ui button" @click="soundTest">%fa:volume-up% %i18n:@test%</button>
</section>
<section class="web" v-show="page == 'web'">
<h1>%i18n:@mobile%</h1>
<ui-switch v-model="disableViaMobile">%i18n:@disable-via-mobile%</ui-switch>
</section>
<section class="web" v-show="page == 'web'">
<h1>%i18n:@language%</h1>
<select v-model="lang" placeholder="%i18n:@pick-language%">
<optgroup label="%i18n:@recommended%">
<option value="">%i18n:@auto%</option>
</optgroup>
<optgroup label="%i18n:@specify-language%">
<option v-for="x in langs" :value="x[0]" :key="x[0]">{{ x[1] }}</option>
</optgroup>
</select>
<div class="none ui info">
<p>%fa:info-circle%%i18n:@language-desc%</p>
</div>
</section>
<section class="web" v-show="page == 'web'">
<h1>%i18n:@cache%</h1>
<button class="ui button" @click="clean">%i18n:@clean-cache%</button>
<div class="none ui info warn">
<p>%fa:exclamation-triangle%%i18n:@cache-warn%</p>
</div>
</section>
<section class="notification" v-show="page == 'notification'">
<h1>%i18n:@notification%</h1>
<ui-switch v-model="$store.state.i.settings.autoWatch" @change="onChangeAutoWatch">
%i18n:@auto-watch%
<span slot="desc">%i18n:@auto-watch-desc%</span>
</ui-switch>
</section>
<section class="drive" v-show="page == 'drive'">
<h1>%i18n:@drive%</h1>
<x-drive/>
</section>
<section class="hashtags" v-show="page == 'hashtags'">
<h1>%i18n:@tags%</h1>
<x-tags/>
</section>
<section class="mute" v-show="page == 'mute'">
<h1>%i18n:@mute%</h1>
<x-mute/>
</section>
<section class="apps" v-show="page == 'apps'">
<h1>%i18n:@apps%</h1>
<x-apps/>
</section>
<section class="twitter" v-show="page == 'twitter'">
<h1>Twitter</h1>
<mk-twitter-setting/>
</section>
<section class="password" v-show="page == 'security'">
<h1>%i18n:@password%</h1>
<x-password/>
</section>
<section class="2fa" v-show="page == 'security'">
<h1>%i18n:@2fa%</h1>
<x-2fa/>
</section>
<section class="signin" v-show="page == 'security'">
<h1>%i18n:@signin%</h1>
<x-signins/>
</section>
<section class="api" v-show="page == 'api'">
<h1>API</h1>
<x-api/>
</section>
<section class="other" v-show="page == 'other'">
<h1>%i18n:@about%</h1>
<p v-if="meta">%i18n:@operator%: <i><a :href="meta.maintainer.url" target="_blank">{{ meta.maintainer.name }}</a></i></p>
</section>
<section class="other" v-show="page == 'other'">
<h1>%i18n:@update%</h1>
<p>
<span>%i18n:@version% <i>{{ version }}</i></span>
<template v-if="latestVersion !== undefined">
<br>
<span>%i18n:@latest-version% <i>{{ latestVersion ? latestVersion : version }}</i></span>
</template>
</p>
<button class="ui button block" @click="checkForUpdate" :disabled="checkingForUpdate">
<template v-if="checkingForUpdate">%i18n:@update-checking%<mk-ellipsis/></template>
<template v-else>%i18n:@do-update%</template>
</button>
<details>
<summary>%i18n:@update-settings%</summary>
<ui-switch v-model="preventUpdate">
%i18n:@prevent-update%
<span slot="desc">%i18n:@prevent-update-desc%</span>
</ui-switch> </ui-switch>
</details> <label>%i18n:@volume%</label>
</section> <input type="range"
v-model="soundVolume"
:disabled="!enableSounds"
max="1"
step="0.1"
/>
<ui-button @click="soundTest">%fa:volume-up% %i18n:@test%</ui-button>
</section>
</ui-card>
<section class="other" v-show="page == 'other'"> <ui-card class="web" v-show="page == 'web'">
<h1>%i18n:@advanced-settings%</h1> <div slot="title">%fa:language% %i18n:@language%</div>
<ui-switch v-model="debug"> <section class="fit-top">
%i18n:@debug-mode% <ui-select v-model="lang" placeholder="%i18n:@pick-language%">
<span slot="desc">%i18n:@debug-mode-desc%</span> <optgroup label="%i18n:@recommended%">
</ui-switch> <option value="">%i18n:@auto%</option>
<ui-switch v-model="enableExperimentalFeatures"> </optgroup>
%i18n:@experimental%
<span slot="desc">%i18n:@experimental-desc%</span> <optgroup label="%i18n:@specify-language%">
</ui-switch> <option v-for="x in langs" :value="x[0]" :key="x[0]">{{ x[1] }}</option>
</section> </optgroup>
</ui-select>
<div class="none ui info">
<p>%fa:info-circle%%i18n:@language-desc%</p>
</div>
</section>
</ui-card>
<ui-card class="web" v-show="page == 'web'">
<div slot="title">%fa:trash-alt R% %i18n:@cache%</div>
<section>
<ui-button @click="clean">%i18n:@clean-cache%</ui-button>
<div class="none ui info warn">
<p>%fa:exclamation-triangle%%i18n:@cache-warn%</p>
</div>
</section>
</ui-card>
<ui-card class="notification" v-show="page == 'notification'">
<div slot="title">%fa:bell R% %i18n:@notification%</div>
<section>
<ui-switch v-model="$store.state.i.settings.autoWatch" @change="onChangeAutoWatch">
%i18n:@auto-watch%
<span slot="desc">%i18n:@auto-watch-desc%</span>
</ui-switch>
<section>
<ui-button @click="readAllUnreadNotes">%i18n:@mark-as-read-all-unread-notes%</ui-button>
</section>
</section>
</ui-card>
<ui-card class="drive" v-show="page == 'drive'">
<div slot="title">%fa:cloud% %i18n:@drive%</div>
<section>
<x-drive/>
</section>
</ui-card>
<ui-card class="hashtags" v-show="page == 'hashtags'">
<div slot="title">%fa:hashtag% %i18n:@tags%</div>
<section>
<x-tags/>
</section>
</ui-card>
<ui-card class="mute" v-show="page == 'mute'">
<div slot="title">%fa:ban% %i18n:@mute%</div>
<section>
<x-mute/>
</section>
</ui-card>
<ui-card class="apps" v-show="page == 'apps'">
<div slot="title">%fa:puzzle-piece% %i18n:@apps%</div>
<section>
<x-apps/>
</section>
</ui-card>
<ui-card class="password" v-show="page == 'security'">
<div slot="title">%fa:unlock-alt% %i18n:@password%</div>
<section>
<x-password/>
</section>
</ui-card>
<ui-card class="2fa" v-show="page == 'security'">
<div slot="title">%fa:mobile-alt% %i18n:@2fa%</div>
<section>
<x-2fa/>
</section>
</ui-card>
<ui-card class="signin" v-show="page == 'security'">
<div slot="title">%fa:sign-in-alt% %i18n:@signin%</div>
<section>
<x-signins/>
</section>
</ui-card>
<ui-card class="api" v-show="page == 'api'">
<div slot="title">%fa:key% API</div>
<section class="fit-top">
<x-api/>
</section>
</ui-card>
<ui-card class="other" v-show="page == 'other'">
<div slot="title">%fa:info-circle% %i18n:@about%</div>
<section>
<p v-if="meta">%i18n:@operator%: <i><a :href="meta.maintainer.url" target="_blank">{{ meta.maintainer.name }}</a></i></p>
</section>
</ui-card>
<ui-card class="other" v-show="page == 'other'">
<div slot="title">%fa:sync-alt% %i18n:@update%</div>
<section>
<p>
<span>%i18n:@version% <i>{{ version }}</i></span>
<template v-if="latestVersion !== undefined">
<br>
<span>%i18n:@latest-version% <i>{{ latestVersion ? latestVersion : version }}</i></span>
</template>
</p>
<button class="ui button block" @click="checkForUpdate" :disabled="checkingForUpdate">
<template v-if="checkingForUpdate">%i18n:@update-checking%<mk-ellipsis/></template>
<template v-else>%i18n:@do-update%</template>
</button>
<details>
<summary>%i18n:@update-settings%</summary>
<ui-switch v-model="preventUpdate">
%i18n:@prevent-update%
<span slot="desc">%i18n:@prevent-update-desc%</span>
</ui-switch>
</details>
</section>
</ui-card>
<ui-card class="other" v-show="page == 'other'">
<div slot="title">%fa:cogs% %i18n:@advanced-settings%</div>
<section>
<ui-switch v-model="debug">
%i18n:@debug-mode%
<span slot="desc">%i18n:@debug-mode-desc%</span>
</ui-switch>
<ui-switch v-model="enableExperimentalFeatures">
%i18n:@experimental%
<span slot="desc">%i18n:@experimental-desc%</span>
</ui-switch>
</section>
</ui-card>
</div> </div>
</div> </div>
</template> </template>
<script lang="ts"> <script lang="ts">
import Vue from 'vue'; import Vue from 'vue';
import XProfile from './settings.profile.vue';
import XMute from './settings.mute.vue'; import XMute from './settings.mute.vue';
import XPassword from './settings.password.vue'; import XPassword from './settings.password.vue';
import X2fa from './settings.2fa.vue'; import X2fa from './settings.2fa.vue';
@ -253,7 +308,6 @@ import checkForUpdate from '../../../common/scripts/check-for-update';
export default Vue.extend({ export default Vue.extend({
components: { components: {
XProfile,
XMute, XMute,
XPassword, XPassword,
X2fa, X2fa,
@ -295,6 +349,11 @@ export default Vue.extend({
set(value) { this.$store.commit('device/set', { key: 'autoPopout', value }); } set(value) { this.$store.commit('device/set', { key: 'autoPopout', value }); }
}, },
deckNav: {
get() { return this.$store.state.settings.deckNav; },
set(value) { this.$store.commit('settings/set', { key: 'deckNav', value }); }
},
darkmode: { darkmode: {
get() { return this.$store.state.device.darkmode; }, get() { return this.$store.state.device.darkmode; },
set(value) { this.$store.commit('device/set', { key: 'darkmode', value }); } set(value) { this.$store.commit('device/set', { key: 'darkmode', value }); }
@ -305,6 +364,16 @@ export default Vue.extend({
set(value) { this.$store.commit('device/set', { key: 'navbar', value }); } set(value) { this.$store.commit('device/set', { key: 'navbar', value }); }
}, },
deckColumnAlign: {
get() { return this.$store.state.device.deckColumnAlign; },
set(value) { this.$store.commit('device/set', { key: 'deckColumnAlign', value }); }
},
deckDefault: {
get() { return this.$store.state.device.deckDefault; },
set(value) { this.$store.commit('device/set', { key: 'deckDefault', value }); }
},
enableSounds: { enableSounds: {
get() { return this.$store.state.device.enableSounds; }, get() { return this.$store.state.device.enableSounds; },
set(value) { this.$store.commit('device/set', { key: 'enableSounds', value }); } set(value) { this.$store.commit('device/set', { key: 'enableSounds', value }); }
@ -438,11 +507,6 @@ export default Vue.extend({
disableAnimatedMfm: { disableAnimatedMfm: {
get() { return this.$store.state.settings.disableAnimatedMfm; }, get() { return this.$store.state.settings.disableAnimatedMfm; },
set(value) { this.$store.dispatch('settings/set', { key: 'disableAnimatedMfm', value }); } set(value) { this.$store.dispatch('settings/set', { key: 'disableAnimatedMfm', value }); }
},
disableViaMobile: {
get() { return this.$store.state.settings.disableViaMobile; },
set(value) { this.$store.dispatch('settings/set', { key: 'disableViaMobile', value }); }
} }
}, },
created() { created() {
@ -451,6 +515,9 @@ export default Vue.extend({
}); });
}, },
methods: { methods: {
readAllUnreadNotes() {
(this as any).api('i/read_all_unread_notes');
},
customizeHome() { customizeHome() {
this.$router.push('/i/customize-home'); this.$router.push('/i/customize-home');
this.$emit('done'); this.$emit('done');
@ -520,7 +587,8 @@ export default Vue.extend({
height 100% height 100%
padding 16px 0 0 0 padding 16px 0 0 0
overflow auto overflow auto
border-right solid 1px var(--faceDivider) box-shadow var(--shadowRight)
z-index 1
> p > p
display block display block
@ -546,34 +614,10 @@ export default Vue.extend({
height 100% height 100%
flex auto flex auto
overflow auto overflow auto
background var(--bg)
> section > section
margin 32px margin 32px
color var(--text) color var(--text)
> h1
margin 0 0 1em 0
padding 0 0 8px 0
font-size 1em
border-bottom solid 1px var(--faceDivider)
&, >>> *
.ui.button.block
margin 16px 0
> section
margin 32px 0
> h2
margin 0 0 1em 0
padding 0 0 8px 0
font-size 1em
color var(--text)
border-bottom solid 1px var(--faceDivider)
> .web
> .div
border-bottom solid 1px var(--faceDivider)
margin 16px 0
</style> </style>

View File

@ -2,18 +2,22 @@
<div class="nav"> <div class="nav">
<ul> <ul>
<template v-if="$store.getters.isSignedIn"> <template v-if="$store.getters.isSignedIn">
<li class="home" :class="{ active: $route.name == 'index' }" @click="goToTop"> <template v-if="$store.state.device.deckDefault">
<router-link to="/"> <li class="deck" :class="{ active: $route.name == 'deck' || $route.name == 'index' }" @click="goToTop">
%fa:home% <router-link to="/">%fa:columns%<p>%i18n:@deck%</p></router-link>
<p>%i18n:@home%</p> </li>
</router-link> <li class="home" :class="{ active: $route.name == 'home' }" @click="goToTop">
</li> <router-link to="/home">%fa:home%<p>%i18n:@home%</p></router-link>
<li class="deck" :class="{ active: $route.name == 'deck' }" @click="goToTop"> </li>
<router-link to="/deck"> </template>
%fa:columns% <template v-else>
<p>%i18n:@deck%</p> <li class="home" :class="{ active: $route.name == 'home' || $route.name == 'index' }" @click="goToTop">
</router-link> <router-link to="/">%fa:home%<p>%i18n:@home%</p></router-link>
</li> </li>
<li class="deck" :class="{ active: $route.name == 'deck' }" @click="goToTop">
<router-link to="/deck">%fa:columns%<p>%i18n:@deck%</p></router-link>
</li>
</template>
<li class="messaging"> <li class="messaging">
<a @click="messaging"> <a @click="messaging">
%fa:comments% %fa:comments%

View File

@ -6,12 +6,22 @@
</div> </div>
<div class="nav" v-if="$store.getters.isSignedIn"> <div class="nav" v-if="$store.getters.isSignedIn">
<div class="home" :class="{ active: $route.name == 'index' }" @click="goToTop"> <template v-if="$store.state.device.deckDefault">
<router-link to="/">%fa:home%</router-link> <div class="deck" :class="{ active: $route.name == 'deck' || $route.name == 'index' }" @click="goToTop">
</div> <router-link to="/">%fa:columns%</router-link>
<div class="deck" :class="{ active: $route.name == 'deck' }" @click="goToTop"> </div>
<router-link to="/deck">%fa:columns%</router-link> <div class="home" :class="{ active: $route.name == 'home' }" @click="goToTop">
</div> <router-link to="/home">%fa:home%</router-link>
</div>
</template>
<template v-else>
<div class="home" :class="{ active: $route.name == 'home' || $route.name == 'index' }" @click="goToTop">
<router-link to="/">%fa:home%</router-link>
</div>
<div class="deck" :class="{ active: $route.name == 'deck' }" @click="goToTop">
<router-link to="/deck">%fa:columns%</router-link>
</div>
</template>
<div class="messaging"> <div class="messaging">
<a @click="messaging">%fa:comments%<template v-if="hasUnreadMessagingMessage">%fa:circle%</template></a> <a @click="messaging">%fa:comments%<template v-if="hasUnreadMessagingMessage">%fa:circle%</template></a>
</div> </div>

View File

@ -2,8 +2,8 @@
<div class="mk-ui" v-hotkey.global="keymap"> <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.i.wallpaperUrl" :style="style"></div>
<x-header class="header" v-if="navbar == 'top'" v-show="!zenMode" ref="header"/> <x-header class="header" v-if="navbar == 'top'" v-show="!zenMode" ref="header"/>
<x-sidebar class="sidebar" v-if="navbar != 'top'" ref="sidebar"/> <x-sidebar class="sidebar" v-if="navbar != 'top'" v-show="!zenMode" ref="sidebar"/>
<div class="content" :class="[{ sidebar: navbar != 'top' }, navbar]"> <div class="content" :class="[{ sidebar: navbar != 'top', zen: zenMode }, navbar]">
<slot></slot> <slot></slot>
</div> </div>
<mk-stream-indicator v-if="$store.getters.isSignedIn"/> <mk-stream-indicator v-if="$store.getters.isSignedIn"/>
@ -73,7 +73,9 @@ export default Vue.extend({
toggleZenMode() { toggleZenMode() {
this.zenMode = !this.zenMode; this.zenMode = !this.zenMode;
this.$nextTick(() => { this.$nextTick(() => {
this.$store.commit('setUiHeaderHeight', this.$refs.header.$el.offsetHeight); if (this.$refs.header) {
this.$store.commit('setUiHeaderHeight', this.$refs.header.$el.offsetHeight);
}
}); });
} }
} }
@ -102,4 +104,7 @@ export default Vue.extend({
> .content.sidebar.right > .content.sidebar.right
padding-right 68px padding-right 68px
> .content.zen
padding 0 !important
</style> </style>

View File

@ -1,7 +1,6 @@
<template> <template>
<div class="dnpfarvgbnfmyzbdquhhzyxcmstpdqzs" :class="{ naked, narrow, active, isStacked, draghover, dragging, dropready }" <div class="dnpfarvgbnfmyzbdquhhzyxcmstpdqzs" :class="{ naked, narrow, active, isStacked, draghover, dragging, dropready }"
@dragover.prevent.stop="onDragover" @dragover.prevent.stop="onDragover"
@dragenter.prevent="onDragenter"
@dragleave="onDragleave" @dragleave="onDragleave"
@drop.prevent.stop="onDrop"> @drop.prevent.stop="onDrop">
<header :class="{ indicate: count > 0 }" <header :class="{ indicate: count > 0 }"
@ -16,7 +15,8 @@
</button> </button>
<slot name="header"></slot> <slot name="header"></slot>
<span class="count" v-if="count > 0">({{ count }})</span> <span class="count" v-if="count > 0">({{ count }})</span>
<button class="menu" ref="menu" @click.stop="showMenu">%fa:caret-down%</button> <button v-if="!isTemporaryColumn" class="menu" ref="menu" @click.stop="showMenu">%fa:caret-down%</button>
<button v-else class="close" @click.stop="close">%fa:times%</button>
</header> </header>
<div ref="body" v-show="active"> <div ref="body" v-show="active">
<slot></slot> <slot></slot>
@ -34,11 +34,13 @@ export default Vue.extend({
props: { props: {
column: { column: {
type: Object, type: Object,
required: true required: false,
default: null
}, },
isStacked: { isStacked: {
type: Boolean, type: Boolean,
required: true required: false,
default: false
}, },
name: { name: {
type: String, type: String,
@ -61,6 +63,12 @@ export default Vue.extend({
} }
}, },
computed: {
isTemporaryColumn(): boolean {
return this.column == null;
}
},
inject: { inject: {
getColumnVm: { from: 'getColumnVm' } getColumnVm: { from: 'getColumnVm' }
}, },
@ -96,14 +104,20 @@ export default Vue.extend({
mounted() { mounted() {
this.$refs.body.addEventListener('scroll', this.onScroll, { passive: true }); this.$refs.body.addEventListener('scroll', this.onScroll, { passive: true });
this.$root.$on('deck.column.dragStart', this.onOtherDragStart);
this.$root.$on('deck.column.dragEnd', this.onOtherDragEnd); if (!this.isTemporaryColumn) {
this.$root.$on('deck.column.dragStart', this.onOtherDragStart);
this.$root.$on('deck.column.dragEnd', this.onOtherDragEnd);
}
}, },
beforeDestroy() { beforeDestroy() {
this.$refs.body.removeEventListener('scroll', this.onScroll); this.$refs.body.removeEventListener('scroll', this.onScroll);
this.$root.$off('deck.column.dragStart', this.onOtherDragStart);
this.$root.$off('deck.column.dragEnd', this.onOtherDragEnd); if (!this.isTemporaryColumn) {
this.$root.$off('deck.column.dragStart', this.onOtherDragStart);
this.$root.$off('deck.column.dragEnd', this.onOtherDragEnd);
}
}, },
methods: { methods: {
@ -203,6 +217,7 @@ export default Vue.extend({
}, },
onContextmenu(e) { onContextmenu(e) {
if (this.isTemporaryColumn) return;
contextmenu((this as any).os)(e, this.getMenu()); contextmenu((this as any).os)(e, this.getMenu());
}, },
@ -214,6 +229,13 @@ export default Vue.extend({
}); });
}, },
close() {
this.$store.commit('device/set', {
key: 'deckTemporaryColumn',
value: null
});
},
goTop() { goTop() {
this.$refs.body.scrollTo({ this.$refs.body.scrollTo({
top: 0, top: 0,
@ -222,6 +244,12 @@ export default Vue.extend({
}, },
onDragstart(e) { onDragstart(e) {
// テンポラリカラムはドラッグさせない
if (this.isTemporaryColumn) {
e.preventDefault();
return;
}
e.dataTransfer.effectAllowed = 'move'; e.dataTransfer.effectAllowed = 'move';
e.dataTransfer.setData('mk-deck-column', this.column.id); e.dataTransfer.setData('mk-deck-column', this.column.id);
this.dragging = true; this.dragging = true;
@ -232,6 +260,12 @@ export default Vue.extend({
}, },
onDragover(e) { onDragover(e) {
// テンポラリカラムにはドロップさせない
if (this.isTemporaryColumn) {
e.dataTransfer.dropEffect = 'none';
return;
}
// 自分自身がドラッグされている場合 // 自分自身がドラッグされている場合
if (this.dragging) { if (this.dragging) {
// 自分自身にはドロップさせない // 自分自身にはドロップさせない
@ -242,9 +276,7 @@ export default Vue.extend({
const isDeckColumn = e.dataTransfer.types[0] == 'mk-deck-column'; const isDeckColumn = e.dataTransfer.types[0] == 'mk-deck-column';
e.dataTransfer.dropEffect = isDeckColumn ? 'move' : 'none'; e.dataTransfer.dropEffect = isDeckColumn ? 'move' : 'none';
},
onDragenter() {
if (!this.dragging) this.draghover = true; if (!this.dragging) this.draghover = true;
}, },
@ -349,6 +381,7 @@ export default Vue.extend({
> .toggleActive > .toggleActive
> .menu > .menu
> .close
padding 0 padding 0
width $header-height width $header-height
line-height $header-height line-height $header-height
@ -365,6 +398,7 @@ export default Vue.extend({
margin-left -16px margin-left -16px
> .menu > .menu
> .close
margin-left auto margin-left auto
margin-right -16px margin-right -16px

View File

@ -0,0 +1,69 @@
<template>
<x-column>
<span slot="header">
%fa:comment-alt R%<span>{{ title }}</span>
</span>
<div class="rvtscbadixhhbsczoorqoaygovdeecsx" v-if="note">
<div class="is-remote" v-if="note.user.host != null">%fa:exclamation-triangle% %i18n:@is-remote%<a :href="note.url || note.uri" target="_blank">%i18n:@view-remote%</a></div>
<x-note :note="note" :detail="true" :mini="true"/>
</div>
</x-column>
</template>
<script lang="ts">
import Vue from 'vue';
import XColumn from './deck.column.vue';
import XNotes from './deck.notes.vue';
import XNote from '../../components/note.vue';
export default Vue.extend({
components: {
XColumn,
XNotes,
XNote
},
props: {
noteId: {
type: String,
required: true
}
},
data() {
return {
note: null,
fetching: true
};
},
computed: {
title(): string {
return this.note ? Vue.filter('userName')(this.note.user) : '';
}
},
created() {
(this as any).api('notes/show', { noteId: this.noteId }).then(note => {
this.note = note;
this.fetching = false;
});
}
});
</script>
<style lang="stylus" scoped>
.rvtscbadixhhbsczoorqoaygovdeecsx
> .is-remote
padding 8px 16px
font-size 12px
&.is-remote
color var(--remoteInfoFg)
background var(--remoteInfoBg)
> a
font-weight bold
</style>

View File

@ -1,71 +0,0 @@
<template>
<div class="fnlfosztlhtptnongximhlbykxblytcq">
<mk-avatar class="avatar" :user="note.user"/>
<div class="main">
<mk-note-header class="header" :note="note" :mini="true"/>
<div class="body">
<mk-sub-note-content class="text" :note="note"/>
</div>
</div>
</div>
</template>
<script lang="ts">
import Vue from 'vue';
export default Vue.extend({
props: {
note: {
type: Object,
required: true
},
// TODO
truncate: {
type: Boolean,
default: true
}
}
});
</script>
<style lang="stylus" scoped>
.fnlfosztlhtptnongximhlbykxblytcq
display flex
padding 16px
font-size 10px
background var(--subNoteBg)
&.smart
> .main
width 100%
> header
align-items center
> .avatar
flex-shrink 0
display block
margin 0 8px 0 0
width 38px
height 38px
border-radius 8px
> .main
flex 1
min-width 0
> .header
margin-bottom 2px
> .body
> .text
margin 0
padding 0
color var(--subNoteText)
pre
max-height 120px
font-size 80%
</style>

View File

@ -1,323 +0,0 @@
<template>
<div
v-if="!mediaView"
v-show="appearNote.deletedAt == null"
:tabindex="appearNote.deletedAt == null ? '-1' : null"
class="zyjjkidcqjnlegkqebitfviomuqmseqk"
:class="{ renote: isRenote }"
v-hotkey="keymap"
:title="title"
>
<div class="reply-to" v-if="appearNote.reply && (!$store.getters.isSignedIn || $store.state.settings.showReplyTarget)">
<x-sub :note="appearNote.reply"/>
</div>
<div class="renote" v-if="isRenote">
<mk-avatar class="avatar" :user="note.user"/>
%fa:retweet%
<span>{{ '%i18n:@reposted-by%'.substr(0, '%i18n:@reposted-by%'.indexOf('{')) }}</span>
<router-link class="name" :to="note.user | userPage">{{ note.user | userName }}</router-link>
<span>{{ '%i18n:@reposted-by%'.substr('%i18n:@reposted-by%'.indexOf('}') + 1) }}</span>
<mk-time :time="note.createdAt"/>
</div>
<article>
<mk-avatar class="avatar" :user="appearNote.user"/>
<div class="main">
<mk-note-header class="header" :note="appearNote" :mini="true"/>
<div class="body">
<p v-if="appearNote.cw != null" class="cw">
<span class="text" v-if="appearNote.cw != ''">{{ appearNote.cw }}</span>
<mk-cw-button v-model="showContent"/>
</p>
<div class="content" v-show="appearNote.cw == null || showContent">
<div class="text">
<span v-if="appearNote.isHidden" style="opacity: 0.5">(%i18n:@private%)</span>
<a class="reply" v-if="appearNote.reply">%fa:reply%</a>
<misskey-flavored-markdown v-if="appearNote.text" :text="appearNote.text" :i="$store.state.i"/>
<a class="rp" v-if="appearNote.renote != null">RP:</a>
</div>
<div class="files" v-if="appearNote.files.length > 0">
<mk-media-list :media-list="appearNote.files"/>
</div>
<mk-poll v-if="appearNote.poll" :note="appearNote" ref="pollViewer"/>
<a class="location" v-if="appearNote.geo" :href="`https://maps.google.com/maps?q=${appearNote.geo.coordinates[1]},${appearNote.geo.coordinates[0]}`" target="_blank">%fa:map-marker-alt% %i18n:@location%</a>
<div class="renote" v-if="appearNote.renote">
<mk-note-preview :note="appearNote.renote" :mini="true"/>
</div>
<mk-url-preview v-for="url in urls" :url="url" :key="url" :detail="false" :mini="true"/>
</div>
<span class="app" v-if="appearNote.app">via <b>{{ appearNote.app.name }}</b></span>
</div>
<footer>
<mk-reactions-viewer :note="appearNote" ref="reactionsViewer"/>
<button @click="reply()">
<template v-if="appearNote.reply">%fa:reply-all%</template>
<template v-else>%fa:reply%</template>
</button>
<button @click="renote()" title="Renote">%fa:retweet%</button>
<button :class="{ reacted: appearNote.myReaction != null }" @click="react()" ref="reactButton">%fa:plus%</button>
<button class="menu" @click="menu()" ref="menuButton">%fa:ellipsis-h%</button>
</footer>
</div>
</article>
</div>
<div v-else class="srwrkujossgfuhrbnvqkybtzxpblgchi">
<div v-if="note.files.length > 0">
<mk-media-list :media-list="note.files"/>
</div>
<div v-if="note.renote && note.renote.files.length > 0">
<mk-media-list :media-list="note.renote.files"/>
</div>
</div>
</template>
<script lang="ts">
import Vue from 'vue';
import MkPostFormWindow from '../../components/post-form-window.vue';
import MkRenoteFormWindow from '../../components/renote-form-window.vue';
import XSub from './deck.note.sub.vue';
import noteMixin from '../../../../common/scripts/note-mixin';
import noteSubscriber from '../../../../common/scripts/note-subscriber';
export default Vue.extend({
components: {
XSub
},
mixins: [
noteMixin(),
noteSubscriber('note')
],
props: {
note: {
type: Object,
required: true
},
mediaView: {
type: Boolean,
required: false,
default: false
}
}
});
</script>
<style lang="stylus" scoped>
.srwrkujossgfuhrbnvqkybtzxpblgchi
font-size 13px
margin 4px 12px
&:first-child
margin-top 12px
&:last-child
margin-bottom 12px
.zyjjkidcqjnlegkqebitfviomuqmseqk
font-size 13px
border-bottom solid 1px var(--faceDivider)
&:focus
z-index 1
&:after
content ""
pointer-events none
position absolute
top 2px
right 2px
bottom 2px
left 2px
border 2px solid var(--primaryAlpha03)
border-radius 4px
&:last-of-type
border-bottom none
&.smart
> article
> .main
> header
align-items center
margin-bottom 4px
> .renote
display flex
align-items center
padding 8px 16px 0 16px
line-height 28px
white-space pre
color var(--renoteText)
background linear-gradient(to bottom, var(--renoteGradient) 0%, var(--face) 100%)
.avatar
flex-shrink 0
display inline-block
width 20px
height 20px
margin 0 8px 0 0
border-radius 6px
[data-fa]
margin-right 4px
> span
flex-shrink 0
&:last-of-type
margin-right 8px
.name
overflow hidden
flex-shrink 1
text-overflow ellipsis
white-space nowrap
font-weight bold
> .mk-time
display block
margin-left auto
flex-shrink 0
font-size 0.9em
& + article
padding-top 8px
> article
display flex
padding 16px 16px 4px
> .avatar
flex-shrink 0
display block
margin 0 10px 8px 0
width 42px
height 42px
border-radius 6px
//position -webkit-sticky
//position sticky
//top 62px
> .main
flex 1
min-width 0
> .body
> .cw
cursor default
display block
margin 0
padding 0
overflow-wrap break-word
color var(--noteText)
> .text
margin-right 8px
> .content
> .text
display block
margin 0
padding 0
overflow-wrap break-word
color var(--noteText)
>>> .title
display block
margin-bottom 4px
padding 4px
font-size 90%
text-align center
background var(--mfmTitleBg)
border-radius 4px
>>> .code
margin 8px 0
>>> .quote
margin 8px
padding 6px 12px
color var(--mfmQuote)
border-left solid 3px var(--mfmQuoteLine)
> .reply
margin-right 8px
color var(--noteText)
> .rp
margin-left 4px
font-style oblique
color var(--renoteText)
[data-is-me]:after
content "you"
padding 0 4px
margin-left 4px
font-size 80%
color var(--primaryForeground)
background var(--primary)
border-radius 4px
.mk-url-preview
margin-top 8px
> .files
> img
display block
max-width 100%
> .location
margin 4px 0
font-size 12px
color #ccc
> .map
width 100%
height 200px
&:empty
display none
> .mk-poll
font-size 80%
> .renote
margin 8px 0
> *
padding 16px
border dashed 1px var(--quoteBorder)
border-radius 8px
> .app
font-size 12px
color #ccc
> footer
> button
margin 0
padding 4px 8px 8px 8px
background transparent
border none
box-shadow none
font-size 1em
color var(--noteActions)
cursor pointer
&:not(:last-child)
margin-right 28px
&:hover
color var(--noteActionsHover)
> .count
display inline
margin 0 0 0 8px
color #999
&.reacted
color var(--primary)
</style>

View File

@ -17,7 +17,7 @@
<!--<transition-group name="mk-notes" class="transition">--> <!--<transition-group name="mk-notes" class="transition">-->
<div class="notes"> <div class="notes">
<template v-for="(note, i) in _notes"> <template v-for="(note, i) in _notes">
<x-note :note="note" :key="note.id" @update:note="onNoteUpdated(i, $event)" :media-view="mediaView"/> <x-note :note="note" :key="note.id" @update:note="onNoteUpdated(i, $event)" :media-view="mediaView" :mini="true"/>
<p class="date" :key="note.id + '_date'" v-if="i != notes.length - 1 && note._date != _notes[i + 1]._date"> <p class="date" :key="note.id + '_date'" v-if="i != notes.length - 1 && note._date != _notes[i + 1]._date">
<span>%fa:angle-up%{{ note._datetext }}</span> <span>%fa:angle-up%{{ note._datetext }}</span>
<span>%fa:angle-down%{{ _notes[i + 1]._datetext }}</span> <span>%fa:angle-down%{{ _notes[i + 1]._datetext }}</span>
@ -38,7 +38,7 @@
<script lang="ts"> <script lang="ts">
import Vue from 'vue'; import Vue from 'vue';
import XNote from './deck.note.vue'; import XNote from '../../components/note.vue';
const displayLimit = 20; const displayLimit = 20;
@ -220,7 +220,7 @@ export default Vue.extend({
display block display block
margin 0 margin 0
line-height 32px line-height 32px
font-size 14px font-size 12px
text-align center text-align center
color var(--dateDividerFg) color var(--dateDividerFg)
background var(--dateDividerBg) background var(--dateDividerBg)

View File

@ -66,15 +66,15 @@
</div> </div>
<template v-if="notification.type == 'quote'"> <template v-if="notification.type == 'quote'">
<x-note :note="notification.note" @update:note="onNoteUpdated"/> <x-note :note="notification.note" @update:note="onNoteUpdated" :mini="true"/>
</template> </template>
<template v-if="notification.type == 'reply'"> <template v-if="notification.type == 'reply'">
<x-note :note="notification.note" @update:note="onNoteUpdated"/> <x-note :note="notification.note" @update:note="onNoteUpdated" :mini="true"/>
</template> </template>
<template v-if="notification.type == 'mention'"> <template v-if="notification.type == 'mention'">
<x-note :note="notification.note" @update:note="onNoteUpdated"/> <x-note :note="notification.note" @update:note="onNoteUpdated" :mini="true"/>
</template> </template>
</div> </div>
</template> </template>
@ -82,7 +82,7 @@
<script lang="ts"> <script lang="ts">
import Vue from 'vue'; import Vue from 'vue';
import getNoteSummary from '../../../../../../misc/get-note-summary'; import getNoteSummary from '../../../../../../misc/get-note-summary';
import XNote from './deck.note.vue'; import XNote from '../../components/note.vue';
export default Vue.extend({ export default Vue.extend({
components: { components: {

View File

@ -0,0 +1,269 @@
<template>
<x-column>
<span slot="header">
%fa:user%<span>{{ title }}</span>
</span>
<div class="zubukjlciycdsyynicqrnlsmdwmymzqu" v-if="user">
<div class="is-remote" v-if="user.host != null">%fa:exclamation-triangle% %i18n:@is-remote%<a :href="user.url || user.uri" target="_blank">%i18n:@view-remote%</a></div>
<header :style="bannerStyle">
<div>
<mk-follow-button v-if="$store.getters.isSignedIn && user.id != $store.state.i.id" :user="user" class="follow"/>
<mk-avatar class="avatar" :user="user" :disable-preview="true"/>
<span class="name">{{ user | userName }}</span>
<span class="acct">@{{ user | acct }}</span>
</div>
</header>
<div class="info">
<div class="description">
<misskey-flavored-markdown v-if="user.description" :text="user.description" :i="$store.state.i"/>
</div>
</div>
<div class="pinned" v-if="user.pinnedNotes && user.pinnedNotes.length > 0">
<p>%fa:thumbtack% %i18n:@pinned-notes%</p>
<div class="notes">
<x-note v-for="n in user.pinnedNotes" :key="n.id" :note="n" :mini="true"/>
</div>
</div>
<div class="images" v-if="images.length > 0">
<router-link v-for="image in images" :style="`background-image: url(${image.thumbnailUrl})`" :key="`${image.id}:${image._note.id}`" :to="image._note | notePage"></router-link>
</div>
<div class="tl">
<x-notes ref="timeline" :more="existMore ? fetchMoreNotes : null"/>
</div>
</div>
</x-column>
</template>
<script lang="ts">
import Vue from 'vue';
import parseAcct from '../../../../../../misc/acct/parse';
import XColumn from './deck.column.vue';
import XNotes from './deck.notes.vue';
import XNote from '../../components/note.vue';
import { concat } from '../../../../../../prelude/array';
const fetchLimit = 10;
export default Vue.extend({
components: {
XColumn,
XNotes,
XNote
},
props: {
acct: {
type: String,
required: true
}
},
data() {
return {
user: null,
fetching: true,
existMore: false,
moreFetching: false,
withFiles: false,
images: []
};
},
computed: {
title(): string {
return this.user ? Vue.filter('userName')(this.user) : '';
},
bannerStyle(): any {
if (this.user == null) return {};
if (this.user.bannerUrl == null) return {};
return {
backgroundColor: this.user.bannerColor && this.user.bannerColor.length == 3 ? `rgb(${ this.user.bannerColor.join(',') })` : null,
backgroundImage: `url(${ this.user.bannerUrl })`
};
},
},
created() {
(this as any).api('users/show', parseAcct(this.acct)).then(user => {
this.user = user;
this.fetching = false;
this.$nextTick(() => {
(this.$refs.timeline as any).init(() => this.initTl());
});
const image = [
'image/jpeg',
'image/png',
'image/gif'
];
(this as any).api('users/notes', {
userId: this.user.id,
fileType: image,
limit: 9
}).then(notes => {
notes.forEach(note => {
note.files.forEach(file => {
file._note = note;
});
});
const files = concat(notes.map((n: any): any[] => n.files));
this.images = files.filter(f => image.includes(f.type)).slice(0, 6);
});
});
},
methods: {
initTl() {
return new Promise((res, rej) => {
(this as any).api('users/notes', {
userId: this.user.id,
limit: fetchLimit + 1,
withFiles: this.withFiles,
includeMyRenotes: this.$store.state.settings.showMyRenotes,
includeRenotedMyNotes: this.$store.state.settings.showRenotedMyNotes,
includeLocalRenotes: this.$store.state.settings.showLocalRenotes
}).then(notes => {
if (notes.length == fetchLimit + 1) {
notes.pop();
this.existMore = true;
}
res(notes);
}, rej);
});
},
fetchMoreNotes() {
this.moreFetching = true;
const promise = (this as any).api('users/notes', {
userId: this.user.id,
limit: fetchLimit + 1,
untilId: (this.$refs.timeline as any).tail().id,
withFiles: this.withFiles,
includeMyRenotes: this.$store.state.settings.showMyRenotes,
includeRenotedMyNotes: this.$store.state.settings.showRenotedMyNotes,
includeLocalRenotes: this.$store.state.settings.showLocalRenotes
});
promise.then(notes => {
if (notes.length == fetchLimit + 1) {
notes.pop();
} else {
this.existMore = false;
}
notes.forEach(n => (this.$refs.timeline as any).append(n));
this.moreFetching = false;
});
return promise;
},
}
});
</script>
<style lang="stylus" scoped>
.zubukjlciycdsyynicqrnlsmdwmymzqu
background var(--deckUserColumnBg)
> .is-remote
padding 8px 16px
font-size 12px
&.is-remote
color var(--remoteInfoFg)
background var(--remoteInfoBg)
> a
font-weight bold
> header
overflow hidden
background-size cover
background-position center
> div
padding 32px
background rgba(#000, 0.5)
color #fff
text-align center
> .follow
position absolute
top 16px
right 16px
> .avatar
display block
width 64px
height 64px
margin 0 auto
> .name
display block
margin-top 8px
font-weight bold
text-shadow 0 0 8px #000
> .acct
font-size 14px
opacity 0.7
text-shadow 0 0 8px #000
> .info
padding 16px
font-size 14px
color var(--text)
text-align center
background var(--face)
border-bottom solid 1px var(--faceDivider)
&:before
content ""
display blcok
position absolute
top -32px
left 0
right 0
width 0px
margin 0 auto
border-top solid 16px transparent
border-left solid 16px transparent
border-right solid 16px transparent
border-bottom solid 16px var(--face)
> .pinned
padding-bottom 16px
background var(--deckUserColumnBg)
> p
margin 0
padding 8px 16px
font-size 12px
color var(--text)
> .notes
background var(--face)
> .images
display grid
grid-template-rows 1fr 1fr 1fr
grid-template-columns 1fr 1fr 1fr
gap 4px
height 250px
padding 16px
margin-bottom 16px
background var(--face)
> *
background-position center center
background-size cover
background-clip content-box
> .tl
background var(--face)
</style>

View File

@ -1,6 +1,6 @@
<template> <template>
<mk-ui :class="$style.root"> <mk-ui :class="$style.root">
<div class="qlvquzbjribqcaozciifydkngcwtyzje" :style="style"> <div class="qlvquzbjribqcaozciifydkngcwtyzje" :style="style" :class="{ center: $store.state.device.deckColumnAlign == 'center' }">
<template v-for="ids in layout"> <template v-for="ids in layout">
<div v-if="ids.length > 1" class="folder"> <div v-if="ids.length > 1" class="folder">
<template v-for="id, i in ids"> <template v-for="id, i in ids">
@ -9,6 +9,10 @@
</div> </div>
<x-column-core v-else :ref="ids[0]" :key="ids[0]" :column="columns.find(c => c.id == ids[0])"/> <x-column-core v-else :ref="ids[0]" :key="ids[0]" :column="columns.find(c => c.id == ids[0])"/>
</template> </template>
<template v-if="temporaryColumn">
<x-user-column v-if="temporaryColumn.type == 'user'" :acct="temporaryColumn.acct" :key="temporaryColumn.acct"/>
<x-note-column v-else-if="temporaryColumn.type == 'note'" :note-id="temporaryColumn.noteId" :key="temporaryColumn.noteId"/>
</template>
<button ref="add" @click="add" title="%i18n:common.deck.add-column%">%fa:plus%</button> <button ref="add" @click="add" title="%i18n:common.deck.add-column%">%fa:plus%</button>
</div> </div>
</mk-ui> </mk-ui>
@ -19,11 +23,16 @@ import Vue from 'vue';
import XColumnCore from './deck.column-core.vue'; import XColumnCore from './deck.column-core.vue';
import Menu from '../../../../common/views/components/menu.vue'; import Menu from '../../../../common/views/components/menu.vue';
import MkUserListsWindow from '../../components/user-lists-window.vue'; import MkUserListsWindow from '../../components/user-lists-window.vue';
import XUserColumn from './deck.user-column.vue';
import XNoteColumn from './deck.note-column.vue';
import * as uuid from 'uuid'; import * as uuid from 'uuid';
export default Vue.extend({ export default Vue.extend({
components: { components: {
XColumnCore XColumnCore,
XUserColumn,
XNoteColumn
}, },
computed: { computed: {
@ -31,15 +40,21 @@ export default Vue.extend({
if (this.$store.state.settings.deck == null) return []; if (this.$store.state.settings.deck == null) return [];
return this.$store.state.settings.deck.columns; return this.$store.state.settings.deck.columns;
}, },
layout(): any[] { layout(): any[] {
if (this.$store.state.settings.deck == null) return []; if (this.$store.state.settings.deck == null) return [];
if (this.$store.state.settings.deck.layout == null) return this.$store.state.settings.deck.columns.map(c => [c.id]); if (this.$store.state.settings.deck.layout == null) return this.$store.state.settings.deck.columns.map(c => [c.id]);
return this.$store.state.settings.deck.layout; return this.$store.state.settings.deck.layout;
}, },
style(): any { style(): any {
return { return {
height: `calc(100vh - ${this.$store.state.uiHeaderHeight}px)` height: `calc(100vh - ${this.$store.state.uiHeaderHeight}px)`
}; };
},
temporaryColumn(): any {
return this.$store.state.device.deckTemporaryColumn;
} }
}, },
@ -50,6 +65,8 @@ export default Vue.extend({
}, },
created() { created() {
this.$store.commit('navHook', this.onNav);
if (this.$store.state.settings.deck == null) { if (this.$store.state.settings.deck == null) {
const deck = { const deck = {
columns: [/*{ columns: [/*{
@ -95,6 +112,8 @@ export default Vue.extend({
}, },
beforeDestroy() { beforeDestroy() {
this.$store.commit('navHook', null);
document.documentElement.style.overflow = 'auto'; document.documentElement.style.overflow = 'auto';
}, },
@ -103,6 +122,30 @@ export default Vue.extend({
return this.$refs[id][0]; return this.$refs[id][0];
}, },
onNav(to) {
if (!this.$store.state.settings.deckNav) return false;
if (to.name == 'user') {
this.$store.commit('device/set', {
key: 'deckTemporaryColumn',
value: {
type: 'user',
acct: to.params.user
}
});
return true;
} else if (to.name == 'note') {
this.$store.commit('device/set', {
key: 'deckTemporaryColumn',
value: {
type: 'note',
noteId: to.params.note
}
});
return true;
}
},
add() { add() {
this.os.new(Menu, { this.os.new(Menu, {
source: this.$refs.add, source: this.$refs.add,
@ -240,12 +283,13 @@ export default Vue.extend({
> *:not(:last-child) > *:not(:last-child)
margin-bottom 8px margin-bottom 8px
> * &.center
&:first-child > *
margin-left auto &:first-child
margin-left auto
&:last-child &:last-child
margin-right auto margin-right auto
> button > button
padding 0 16px padding 0 16px

View File

@ -1,16 +1,25 @@
<template> <template>
<component :is="$store.getters.isSignedIn ? 'home' : 'welcome'"></component> <component :is="page"></component>
</template> </template>
<script lang="ts"> <script lang="ts">
import Vue from 'vue'; import Vue from 'vue';
import Home from './home.vue'; import Home from './home.vue';
import Welcome from './welcome.vue'; import Welcome from './welcome.vue';
import Deck from './deck/deck.vue';
export default Vue.extend({ export default Vue.extend({
components: { components: {
Home, Home,
Deck,
Welcome Welcome
},
computed: {
page(): string {
if (!this.$store.getters.isSignedIn) return 'welcome';
return this.$store.state.device.deckDefault ? 'deck' : 'home';
}
} }
}); });
</script> </script>

View File

@ -60,9 +60,6 @@ export default Vue.extend({
margin-right 4px margin-right 4px
> .stream > .stream
display -webkit-flex
display -moz-flex
display -ms-flex
display flex display flex
justify-content center justify-content center
flex-wrap wrap flex-wrap wrap

View File

@ -148,6 +148,19 @@ export default (callback: (launch: (router: VueRouter, api?: (os: MiOS) => API)
}); });
//#endregion //#endregion
// Navigation hook
router.beforeEach((to, from, next) => {
if (os.store.state.navHook) {
if (os.store.state.navHook(to)) {
next(false);
} else {
next();
}
} else {
next();
}
});
Vue.mixin({ Vue.mixin({
data() { data() {
return { return {

View File

@ -5,7 +5,7 @@
<div class="signin-as" v-html="'%i18n:@signed-in-as%'.replace('{}', `<b>${name}</b>`)"></div> <div class="signin-as" v-html="'%i18n:@signed-in-as%'.replace('{}', `<b>${name}</b>`)"></div>
<div> <div>
<x-profile/> <mk-profile-editor/>
<ui-card> <ui-card>
<div slot="title">%fa:palette% %i18n:@theme%</div> <div slot="title">%fa:palette% %i18n:@theme%</div>
@ -148,13 +148,7 @@ import Vue from 'vue';
import { apiUrl, version, codename, langs } from '../../../config'; import { apiUrl, version, codename, langs } from '../../../config';
import checkForUpdate from '../../../common/scripts/check-for-update'; import checkForUpdate from '../../../common/scripts/check-for-update';
import XProfile from './settings/settings.profile.vue';
export default Vue.extend({ export default Vue.extend({
components: {
XProfile
},
data() { data() {
return { return {
apiUrl, apiUrl,

View File

@ -10,6 +10,7 @@ const defaultSettings = {
home: null, home: null,
mobileHome: [], mobileHome: [],
deck: null, deck: null,
deckNav: true,
tagTimelines: [], tagTimelines: [],
fetchOnScroll: true, fetchOnScroll: true,
showMaps: true, showMaps: true,
@ -57,7 +58,10 @@ const defaultDeviceSettings = {
alwaysShowNsfw: false, alwaysShowNsfw: false,
postStyle: 'standard', postStyle: 'standard',
navbar: 'top', navbar: 'top',
mobileNotificationPosition: 'bottom' deckColumnAlign: 'center',
mobileNotificationPosition: 'bottom',
deckTemporaryColumn: null,
deckDefault: false
}; };
export default (os: MiOS) => new Vuex.Store({ export default (os: MiOS) => new Vuex.Store({
@ -68,7 +72,8 @@ export default (os: MiOS) => new Vuex.Store({
state: { state: {
i: null, i: null,
indicate: false, indicate: false,
uiHeaderHeight: 0 uiHeaderHeight: 0,
navHook: null
}, },
getters: { getters: {
@ -90,6 +95,10 @@ export default (os: MiOS) => new Vuex.Store({
setUiHeaderHeight(state, height) { setUiHeaderHeight(state, height) {
state.uiHeaderHeight = height; state.uiHeaderHeight = height;
},
navHook(state, callback) {
state.navHook = callback;
} }
}, },

View File

@ -174,6 +174,7 @@
desktopSettingsNavItemHover: ':lighten<10<$text', desktopSettingsNavItemHover: ':lighten<10<$text',
deckAcrylicColumnBg: 'rgba(0, 0, 0, 0.25)', deckAcrylicColumnBg: 'rgba(0, 0, 0, 0.25)',
deckUserColumnBg: ':darken<3<@face',
mobileHeaderBg: ':lighten<5<$secondary', mobileHeaderBg: ':lighten<5<$secondary',
mobileHeaderFg: '$text', mobileHeaderFg: '$text',

View File

@ -174,6 +174,7 @@
desktopSettingsNavItemHover: ':darken<10<$text', desktopSettingsNavItemHover: ':darken<10<$text',
deckAcrylicColumnBg: 'rgba(0, 0, 0, 0.1)', deckAcrylicColumnBg: 'rgba(0, 0, 0, 0.1)',
deckUserColumnBg: ':darken<4<@face',
mobileHeaderBg: ':lighten<5<$secondary', mobileHeaderBg: ':lighten<5<$secondary',
mobileHeaderFg: '$text', mobileHeaderFg: '$text',

View File

@ -23,6 +23,7 @@ export type Source = {
url: string; url: string;
port: number; port: number;
https?: { [x: string]: string }; https?: { [x: string]: string };
disableHsts?: boolean;
mongodb: { mongodb: {
host: string; host: string;
port: number; port: number;

View File

@ -26,17 +26,19 @@ export async function createImage(actor: IRemoteUser, value: any): Promise<IDriv
let file = await uploadFromUrl(image.url, actor, null, image.url, image.sensitive); let file = await uploadFromUrl(image.url, actor, null, image.url, image.sensitive);
// URLが異なっている場合、同じ画像が以前に異なるURLで登録されていたということなので、 if (file.metadata.isRemote) {
// URLを更新する // URLが異なっている場合、同じ画像が以前に異なるURLで登録されていたということなので、
if (file.metadata.url !== image.url) { // URLを更新する
file = await DriveFile.findOneAndUpdate({ _id: file._id }, { if (file.metadata.url !== image.url) {
$set: { file = await DriveFile.findOneAndUpdate({ _id: file._id }, {
'metadata.url': image.url, $set: {
'metadata.uri': image.url 'metadata.url': image.url,
} 'metadata.uri': image.url
}, { }
returnNewDocument: true }, {
}); returnNewDocument: true
});
}
} }
return file; return file;

View File

@ -66,7 +66,7 @@ router.get('/notes/:note', async (ctx, next) => {
const note = await Note.findOne({ const note = await Note.findOne({
_id: new mongo.ObjectID(ctx.params.note), _id: new mongo.ObjectID(ctx.params.note),
$or: [ { visibility: 'public' }, { visibility: 'home' } ] visibility: { $in: ['public', 'home'] }
}); });
if (note === null) { if (note === null) {

View File

@ -8,7 +8,9 @@ export default function(ctx: Koa.Context, user: ILocalUser, redirect = false) {
ctx.cookies.set('i', user.token, { ctx.cookies.set('i', user.token, {
path: '/', path: '/',
domain: config.hostname, domain: config.hostname,
secure: config.url.startsWith('https'), // SEE: https://github.com/koajs/koa/issues/974
//secure: config.url.startsWith('https'),
secure: false,
httpOnly: false, httpOnly: false,
expires: new Date(Date.now() + expires), expires: new Date(Date.now() + expires),
maxAge: expires maxAge: expires

View File

@ -0,0 +1,36 @@
import User, { ILocalUser } from '../../../../models/user';
import { publishMainStream } from '../../../../stream';
import NoteUnread from '../../../../models/note-unread';
export const meta = {
desc: {
'ja-JP': '未読の投稿をすべて既読にします。'
},
requireCredential: true,
kind: 'account-write',
params: {
}
};
export default async (params: any, user: ILocalUser) => new Promise(async (res, rej) => {
// Remove documents
await NoteUnread.remove({
userId: user._id
});
User.update({ _id: user._id }, {
$set: {
hasUnreadMentions: false,
hasUnreadSpecifiedNotes: false
}
});
// 全て既読になったイベントを発行
publishMainStream(user._id, 'readAllUnreadMentions');
publishMainStream(user._id, 'readAllUnreadSpecifiedNotes');
res();
});

View File

@ -99,6 +99,12 @@ export const meta = {
'ja-JP': 'true にすると、ファイルが添付された投稿だけ取得します (このパラメータは廃止予定です。代わりに withFiles を使ってください。)' 'ja-JP': 'true にすると、ファイルが添付された投稿だけ取得します (このパラメータは廃止予定です。代わりに withFiles を使ってください。)'
} }
}), }),
fileType: $.arr($.str).optional.note({
desc: {
'ja-JP': '指定された種類のファイルが添付された投稿のみを取得します'
}
}),
} }
}; };
@ -137,7 +143,8 @@ export default (params: any, me: ILocalUser) => new Promise(async (res, rej) =>
const query = { const query = {
deletedAt: null, deletedAt: null,
userId: user._id userId: user._id,
visibility: { $in: ['public', 'home'] }
} as any; } as any;
if (ps.sinceId) { if (ps.sinceId) {
@ -172,6 +179,14 @@ export default (params: any, me: ILocalUser) => new Promise(async (res, rej) =>
$ne: [] $ne: []
}; };
} }
if (ps.fileType) {
query.fileIds = { $exists: true, $ne: [] };
query['_files.contentType'] = {
$in: ps.fileType
};
}
//#endregion //#endregion
// Issue query // Issue query

View File

@ -41,7 +41,7 @@ app.use(compress({
// HSTS // HSTS
// 6months (15552000sec) // 6months (15552000sec)
if (config.url.startsWith('https')) { if (config.url.startsWith('https') && !config.disableHsts) {
app.use(async (ctx, next) => { app.use(async (ctx, next) => {
ctx.set('strict-transport-security', 'max-age=15552000; preload'); ctx.set('strict-transport-security', 'max-age=15552000; preload');
await next(); await next();

View File

@ -37,8 +37,10 @@ async function save(path: string, name: string, type: string, hash: string, size
if (config.drive && config.drive.storage == 'minio') { if (config.drive && config.drive.storage == 'minio') {
const minio = new Minio.Client(config.drive.config); const minio = new Minio.Client(config.drive.config);
const key = `${config.drive.prefix}/${uuid.v4()}`; const [ext] = (name.match(/\.([a-zA-Z0-9_-]+)$/) || ['']);
const thumbnailKey = `${config.drive.prefix}/${uuid.v4()}`;
const key = `${config.drive.prefix}/${uuid.v4()}${ext}`;
const thumbnailKey = `${config.drive.prefix}/${uuid.v4()}.jpg`;
const baseUrl = config.drive.baseUrl const baseUrl = config.drive.baseUrl
|| `${ config.drive.config.useSSL ? 'https' : 'http' }://${ config.drive.config.endPoint }${ config.drive.config.port ? `:${config.drive.config.port}` : '' }/${ config.drive.bucket }`; || `${ config.drive.config.useSSL ? 'https' : 'http' }://${ config.drive.config.endPoint }${ config.drive.config.port ? `:${config.drive.config.port}` : '' }/${ config.drive.bucket }`;

View File

@ -8,6 +8,8 @@ import Following from '../../models/following';
import renderTombstone from '../../remote/activitypub/renderer/tombstone'; import renderTombstone from '../../remote/activitypub/renderer/tombstone';
import { updateNoteStats } from '../update-chart'; import { updateNoteStats } from '../update-chart';
import config from '../../config'; import config from '../../config';
import NoteUnread from '../../models/note-unread';
import read from './read';
/** /**
* 投稿を削除します。 * 投稿を削除します。
@ -36,6 +38,15 @@ export default async function(user: IUser, note: INote) {
deletedAt: deletedAt deletedAt: deletedAt
}); });
// この投稿が関わる未読通知を削除
NoteUnread.find({
noteId: note._id
}).then(unreads => {
unreads.forEach(unread => {
read(unread.userId, unread.noteId);
});
});
//#region ローカルの投稿なら削除アクティビティを配送 //#region ローカルの投稿なら削除アクティビティを配送
if (isLocalUser(user)) { if (isLocalUser(user)) {
const content = pack(renderDelete(renderTombstone(`${config.url}/notes/${note._id}`), user)); const content = pack(renderDelete(renderTombstone(`${config.url}/notes/${note._id}`), user));

View File

@ -1125,4 +1125,76 @@ describe('API', () => {
expect(res).have.status(400); expect(res).have.status(400);
})); }));
}); });
describe('messaging/messages/create', () => {
it('メッセージを送信できる', async(async () => {
const alice = await signup({ username: 'alice' });
const bob = await signup({ username: 'bob' });
const res = await request('/messaging/messages/create', {
userId: bob.id,
text: 'test'
}, alice);
expect(res).have.status(200);
expect(res.body).be.a('object');
expect(res.body).have.property('text').eql('test');
}));
it('自分自身にはメッセージを送信できない', async(async () => {
const alice = await signup({ username: 'alice' });
const res = await request('/messaging/messages/create', {
userId: alice.id,
text: 'Yo'
}, alice);
expect(res).have.status(400);
}));
it('存在しないユーザーにはメッセージを送信できない', async(async () => {
const alice = await signup({ username: 'alice' });
const res = await request('/messaging/messages/create', {
userId: '000000000000000000000000',
text: 'test'
}, alice);
expect(res).have.status(400);
}));
it('不正なユーザーIDで怒られる', async(async () => {
const alice = await signup({ username: 'alice' });
const res = await request('/messaging/messages/create', {
userId: 'foo',
text: 'test'
}, alice);
expect(res).have.status(400);
}));
it('テキストが無くて怒られる', async(async () => {
const alice = await signup({ username: 'alice' });
const bob = await signup({ username: 'bob' });
const res = await request('/messaging/messages/create', {
userId: bob.id
}, alice);
expect(res).have.status(400);
}));
it('文字数オーバーで怒られる', async(async () => {
const alice = await signup({ username: 'alice' });
const bob = await signup({ username: 'bob' });
const res = await request('/messaging/messages/create', {
userId: bob.id,
text: '!'.repeat(1001)
}, alice);
expect(res).have.status(400);
}));
});
}); });