Compare commits
130 Commits
Author | SHA1 | Date | |
---|---|---|---|
196c55edbc | |||
e724c1e7e8 | |||
869c19c666 | |||
86a5f715d3 | |||
514aeac2d8 | |||
8980a26713 | |||
a39e2b28d1 | |||
bef617cb7c | |||
1dc1feca0f | |||
90eed0ea0d | |||
c730e5edfa | |||
7bd33ecc72 | |||
d4f7058574 | |||
980ae3dcb3 | |||
3a76113b78 | |||
ec8105b2ae | |||
bf05785345 | |||
82346d788b | |||
d86cfa86e4 | |||
b85f13dad3 | |||
eb8c3fe884 | |||
ff325d9588 | |||
a98392ff27 | |||
22b8aab7a0 | |||
24de518922 | |||
a169c7756f | |||
249a7f4f68 | |||
4f590e0a96 | |||
f5b5b290e4 | |||
1f75cf4ace | |||
1e4f11a979 | |||
be12e23aa1 | |||
790e6ceca4 | |||
a303d52990 | |||
096fab575c | |||
a256393b81 | |||
e8eee9057a | |||
d81acae17e | |||
313715bc75 | |||
94dabd2038 | |||
a3d58e5bc7 | |||
bfdfd026a2 | |||
b713f06599 | |||
2172c5edca | |||
9bc0cfacfa | |||
546cfeadbe | |||
2413583ce9 | |||
d7510491a5 | |||
61db07edf4 | |||
5c3ac8f952 | |||
5bfcb75ec3 | |||
d733a1b445 | |||
75c44cd349 | |||
f4d247cfae | |||
4260ec713f | |||
99f4ab7000 | |||
b6157e0012 | |||
4405c19852 | |||
5f208a7d99 | |||
2ec4cc9a07 | |||
06390380f8 | |||
752186066b | |||
10f9549a04 | |||
84a4174883 | |||
ee765d0812 | |||
1ccd2def50 | |||
0d9782571f | |||
973018fc98 | |||
d0926a3ba1 | |||
be67f5f422 | |||
b70b607c4f | |||
2bd38fa052 | |||
43b6140dbe | |||
813804a43e | |||
bec9604445 | |||
2e454dad2d | |||
7d64435e56 | |||
6ef28214df | |||
5bbc95d659 | |||
83794f254c | |||
005d25a07b | |||
255222bfb4 | |||
9e5e3c2f2e | |||
5bd80f115f | |||
c86e1a3e9b | |||
128a201b9d | |||
b68f74f39c | |||
cd28504dd8 | |||
911762fedf | |||
de448fc99f | |||
a3531981ee | |||
fc8d06a9ab | |||
5de8edf15f | |||
f762cf2770 | |||
d84cae9358 | |||
9c54721010 | |||
16f35c81a1 | |||
d0dbb62a54 | |||
9fa68f4478 | |||
0d76625868 | |||
5a8a701188 | |||
121344afbb | |||
d647cf3446 | |||
04a23b3f2f | |||
08826e1c41 | |||
2e31e3c7cb | |||
7aed50f9fa | |||
2de782dbe4 | |||
50693fbe25 | |||
9a2ff56a79 | |||
daed63d66c | |||
f2241a47b7 | |||
de95aac59b | |||
8612ac0c6a | |||
2118e500a8 | |||
a7063eab85 | |||
5b5ae0e47f | |||
b19ecc1a0d | |||
ac9223957f | |||
e580adc41e | |||
607a105b78 | |||
cc601cf600 | |||
be9f6ad294 | |||
a2952c02cf | |||
244d567b3a | |||
61a9ad23f1 | |||
4f7c19461e | |||
4ba6e1c2b2 | |||
864d1a39cd | |||
e14f244e83 |
@ -11,6 +11,7 @@ common:
|
|||||||
warning: "<strong>Misskeyは広告を掲載していません</strong>が、広告をブロックする機能が有効だと一部の機能が利用できなかったり、不具合が発生する場合があります。"
|
warning: "<strong>Misskeyは広告を掲載していません</strong>が、広告をブロックする機能が有効だと一部の機能が利用できなかったり、不具合が発生する場合があります。"
|
||||||
application-authorization: "アプリの連携"
|
application-authorization: "アプリの連携"
|
||||||
close: "閉じる"
|
close: "閉じる"
|
||||||
|
got-it: "わかった"
|
||||||
customization-tips:
|
customization-tips:
|
||||||
title: "カスタマイズのヒント"
|
title: "カスタマイズのヒント"
|
||||||
paragraph1: "ホームのカスタマイズでは、ウィジェットを追加/削除したり、ドラッグ&ドロップして並べ替えたりすることができます。"
|
paragraph1: "ホームのカスタマイズでは、ウィジェットを追加/削除したり、ドラッグ&ドロップして並べ替えたりすることができます。"
|
||||||
@ -39,12 +40,6 @@ common:
|
|||||||
months_ago: "{}ヶ月前"
|
months_ago: "{}ヶ月前"
|
||||||
years_ago: "{}年前"
|
years_ago: "{}年前"
|
||||||
trash: "ゴミ箱"
|
trash: "ゴミ箱"
|
||||||
date:
|
|
||||||
full-year: "年"
|
|
||||||
month: "月"
|
|
||||||
day: "日"
|
|
||||||
hours: "時"
|
|
||||||
minutes: "分"
|
|
||||||
weekday-short:
|
weekday-short:
|
||||||
sunday: "日"
|
sunday: "日"
|
||||||
monday: "月"
|
monday: "月"
|
||||||
@ -88,6 +83,7 @@ common:
|
|||||||
i-like-sushi: "私は(プリンよりむしろ)寿司が好き"
|
i-like-sushi: "私は(プリンよりむしろ)寿司が好き"
|
||||||
show-reversi-board-labels: "リバーシのボードの行と列のラベルを表示"
|
show-reversi-board-labels: "リバーシのボードの行と列のラベルを表示"
|
||||||
verified-user: "認証済みのユーザー"
|
verified-user: "認証済みのユーザー"
|
||||||
|
disable-animated-mfm: "投稿内の動きのあるテキストを無効にする"
|
||||||
reversi:
|
reversi:
|
||||||
drawn: "引き分け"
|
drawn: "引き分け"
|
||||||
my-turn: "あなたのターンです"
|
my-turn: "あなたのターンです"
|
||||||
@ -168,6 +164,9 @@ common/views/components/games/reversi/reversi.vue:
|
|||||||
matching:
|
matching:
|
||||||
waiting-for: "{}を待っています"
|
waiting-for: "{}を待っています"
|
||||||
cancel: "キャンセル"
|
cancel: "キャンセル"
|
||||||
|
common/views/components/games/reversi/reversi.game.vue:
|
||||||
|
surrender: "投了"
|
||||||
|
surrendered: "投了により"
|
||||||
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: "他のMisskeyユーザーとリバーシで対戦しよう"
|
||||||
@ -279,6 +278,8 @@ common/views/components/signin.vue:
|
|||||||
token: "トークン"
|
token: "トークン"
|
||||||
signing-in: "やってます..."
|
signing-in: "やってます..."
|
||||||
signin: "サインイン"
|
signin: "サインイン"
|
||||||
|
or: "または"
|
||||||
|
signin-with-twitter: "Twitterでログイン"
|
||||||
common/views/components/signup.vue:
|
common/views/components/signup.vue:
|
||||||
username: "ユーザー名"
|
username: "ユーザー名"
|
||||||
checking: "確認しています..."
|
checking: "確認しています..."
|
||||||
@ -388,6 +389,17 @@ common/views/pages/follow.vue:
|
|||||||
follow: "フォロー"
|
follow: "フォロー"
|
||||||
request-pending: "フォロー許可待ち"
|
request-pending: "フォロー許可待ち"
|
||||||
follow-request: "フォロー申請"
|
follow-request: "フォロー申請"
|
||||||
|
desktop:
|
||||||
|
banner-crop-title: "バナーとして表示する部分を選択"
|
||||||
|
banner: "バナー"
|
||||||
|
uploading-banner: "新しいバナーをアップロードしています"
|
||||||
|
banner-updated: "バナーを更新しました"
|
||||||
|
choose-banner: "バナーにする画像を選択"
|
||||||
|
avatar-crop-title: "アバターとして表示する部分を選択"
|
||||||
|
avatar: "アバター"
|
||||||
|
uploading-avatar: "新しいアバターをアップロードしています"
|
||||||
|
avatar-updated: "アバターを更新しました"
|
||||||
|
choose-avatar: "アバターにする画像を選択"
|
||||||
desktop/views/components/activity.chart.vue:
|
desktop/views/components/activity.chart.vue:
|
||||||
total: "Black ... Total"
|
total: "Black ... Total"
|
||||||
notes: "Blue ... Notes"
|
notes: "Blue ... Notes"
|
||||||
@ -746,6 +758,7 @@ desktop/views/components/received-follow-requests-window.vue:
|
|||||||
desktop/views/components/user-lists-window.vue:
|
desktop/views/components/user-lists-window.vue:
|
||||||
title: "リスト"
|
title: "リスト"
|
||||||
create-list: "リストを作成"
|
create-list: "リストを作成"
|
||||||
|
list-name: "リスト名"
|
||||||
desktop/views/components/user-preview.vue:
|
desktop/views/components/user-preview.vue:
|
||||||
notes: "投稿"
|
notes: "投稿"
|
||||||
following: "フォロー"
|
following: "フォロー"
|
||||||
@ -828,6 +841,8 @@ desktop/views/pages/user/user.profile.vue:
|
|||||||
mute: "ミュートする"
|
mute: "ミュートする"
|
||||||
muted: "ミュートしています"
|
muted: "ミュートしています"
|
||||||
unmute: "ミュート解除"
|
unmute: "ミュート解除"
|
||||||
|
push-to-a-list: "リストに追加"
|
||||||
|
list-pushed: "{user}を{list}に追加しました。"
|
||||||
desktop/views/pages/user/user.header.vue:
|
desktop/views/pages/user/user.header.vue:
|
||||||
posts: "投稿"
|
posts: "投稿"
|
||||||
following: "フォロー"
|
following: "フォロー"
|
||||||
|
@ -11,6 +11,7 @@ common:
|
|||||||
warning: "<strong>Misskeyは広告を掲載していません</strong>が、広告をブロックする機能が有効だと一部の機能が利用できなかったり、不具合が発生する場合があります。"
|
warning: "<strong>Misskeyは広告を掲載していません</strong>が、広告をブロックする機能が有効だと一部の機能が利用できなかったり、不具合が発生する場合があります。"
|
||||||
application-authorization: "アプリの連携"
|
application-authorization: "アプリの連携"
|
||||||
close: "閉じる"
|
close: "閉じる"
|
||||||
|
got-it: "わかった"
|
||||||
customization-tips:
|
customization-tips:
|
||||||
title: "カスタマイズのヒント"
|
title: "カスタマイズのヒント"
|
||||||
paragraph1: "ホームのカスタマイズでは、ウィジェットを追加/削除したり、ドラッグ&ドロップして並べ替えたりすることができます。"
|
paragraph1: "ホームのカスタマイズでは、ウィジェットを追加/削除したり、ドラッグ&ドロップして並べ替えたりすることができます。"
|
||||||
@ -39,12 +40,6 @@ common:
|
|||||||
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}"
|
||||||
trash: "ゴミ箱"
|
trash: "ゴミ箱"
|
||||||
date:
|
|
||||||
full-year: "年"
|
|
||||||
month: "月"
|
|
||||||
day: "日"
|
|
||||||
hours: "時"
|
|
||||||
minutes: "分"
|
|
||||||
weekday-short:
|
weekday-short:
|
||||||
sunday: "So"
|
sunday: "So"
|
||||||
monday: "Mo"
|
monday: "Mo"
|
||||||
@ -88,6 +83,7 @@ common:
|
|||||||
i-like-sushi: "私は(プリンよりむしろ)寿司が好き"
|
i-like-sushi: "私は(プリンよりむしろ)寿司が好き"
|
||||||
show-reversi-board-labels: "リバーシのボードの行と列のラベルを表示"
|
show-reversi-board-labels: "リバーシのボードの行と列のラベルを表示"
|
||||||
verified-user: "認証済みのユーザー"
|
verified-user: "認証済みのユーザー"
|
||||||
|
disable-animated-mfm: "投稿内の動きのあるテキストを無効にする"
|
||||||
reversi:
|
reversi:
|
||||||
drawn: "引き分け"
|
drawn: "引き分け"
|
||||||
my-turn: "あなたのターンです"
|
my-turn: "あなたのターンです"
|
||||||
@ -168,6 +164,9 @@ common/views/components/games/reversi/reversi.vue:
|
|||||||
matching:
|
matching:
|
||||||
waiting-for: "{}を待っています"
|
waiting-for: "{}を待っています"
|
||||||
cancel: "キャンセル"
|
cancel: "キャンセル"
|
||||||
|
common/views/components/games/reversi/reversi.game.vue:
|
||||||
|
surrender: "投了"
|
||||||
|
surrendered: "投了により"
|
||||||
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: "他のMisskeyユーザーとリバーシで対戦しよう"
|
||||||
@ -279,6 +278,8 @@ common/views/components/signin.vue:
|
|||||||
token: "Token"
|
token: "Token"
|
||||||
signing-in: "Melde an..."
|
signing-in: "Melde an..."
|
||||||
signin: "Anmelden"
|
signin: "Anmelden"
|
||||||
|
or: "または"
|
||||||
|
signin-with-twitter: "Twitterでログイン"
|
||||||
common/views/components/signup.vue:
|
common/views/components/signup.vue:
|
||||||
username: "Benutzername"
|
username: "Benutzername"
|
||||||
checking: "Überprüfung..."
|
checking: "Überprüfung..."
|
||||||
@ -388,6 +389,17 @@ common/views/pages/follow.vue:
|
|||||||
follow: "フォロー"
|
follow: "フォロー"
|
||||||
request-pending: "フォロー許可待ち"
|
request-pending: "フォロー許可待ち"
|
||||||
follow-request: "フォロー申請"
|
follow-request: "フォロー申請"
|
||||||
|
desktop:
|
||||||
|
banner-crop-title: "バナーとして表示する部分を選択"
|
||||||
|
banner: "バナー"
|
||||||
|
uploading-banner: "新しいバナーをアップロードしています"
|
||||||
|
banner-updated: "バナーを更新しました"
|
||||||
|
choose-banner: "バナーにする画像を選択"
|
||||||
|
avatar-crop-title: "アバターとして表示する部分を選択"
|
||||||
|
avatar: "アバター"
|
||||||
|
uploading-avatar: "新しいアバターをアップロードしています"
|
||||||
|
avatar-updated: "アバターを更新しました"
|
||||||
|
choose-avatar: "アバターにする画像を選択"
|
||||||
desktop/views/components/activity.chart.vue:
|
desktop/views/components/activity.chart.vue:
|
||||||
total: "Schwarz ... komplett"
|
total: "Schwarz ... komplett"
|
||||||
notes: "Blau ... Hinweise"
|
notes: "Blau ... Hinweise"
|
||||||
@ -746,6 +758,7 @@ desktop/views/components/received-follow-requests-window.vue:
|
|||||||
desktop/views/components/user-lists-window.vue:
|
desktop/views/components/user-lists-window.vue:
|
||||||
title: "リスト"
|
title: "リスト"
|
||||||
create-list: "リストを作成"
|
create-list: "リストを作成"
|
||||||
|
list-name: "リスト名"
|
||||||
desktop/views/components/user-preview.vue:
|
desktop/views/components/user-preview.vue:
|
||||||
notes: "投稿"
|
notes: "投稿"
|
||||||
following: "フォロー"
|
following: "フォロー"
|
||||||
@ -828,6 +841,8 @@ desktop/views/pages/user/user.profile.vue:
|
|||||||
mute: "ミュートする"
|
mute: "ミュートする"
|
||||||
muted: "ミュートしています"
|
muted: "ミュートしています"
|
||||||
unmute: "ミュート解除"
|
unmute: "ミュート解除"
|
||||||
|
push-to-a-list: "リストに追加"
|
||||||
|
list-pushed: "{user}を{list}に追加しました。"
|
||||||
desktop/views/pages/user/user.header.vue:
|
desktop/views/pages/user/user.header.vue:
|
||||||
posts: "投稿"
|
posts: "投稿"
|
||||||
following: "フォロー"
|
following: "フォロー"
|
||||||
|
@ -11,6 +11,7 @@ common:
|
|||||||
warning: "<strong>Misskey is not running ads</strong>, but some features may be unavailable or malfunctioning if ad blocking features are enabled."
|
warning: "<strong>Misskey is not running ads</strong>, but some features may be unavailable or malfunctioning if ad blocking features are enabled."
|
||||||
application-authorization: "Application authorizations."
|
application-authorization: "Application authorizations."
|
||||||
close: "Close"
|
close: "Close"
|
||||||
|
got-it: "Got it!"
|
||||||
customization-tips:
|
customization-tips:
|
||||||
title: "Customization tips"
|
title: "Customization tips"
|
||||||
paragraph1: "Home customization allows you to add/delete, drag and drop and rearrange widgets."
|
paragraph1: "Home customization allows you to add/delete, drag and drop and rearrange widgets."
|
||||||
@ -39,12 +40,6 @@ common:
|
|||||||
months_ago: "{}month(s) ago"
|
months_ago: "{}month(s) ago"
|
||||||
years_ago: "{}year(s) ago"
|
years_ago: "{}year(s) ago"
|
||||||
trash: "Trash"
|
trash: "Trash"
|
||||||
date:
|
|
||||||
full-year: "Year"
|
|
||||||
month: "Month"
|
|
||||||
day: "Day"
|
|
||||||
hours: "Hour"
|
|
||||||
minutes: "Minutes"
|
|
||||||
weekday-short:
|
weekday-short:
|
||||||
sunday: "S"
|
sunday: "S"
|
||||||
monday: "M"
|
monday: "M"
|
||||||
@ -88,6 +83,7 @@ common:
|
|||||||
i-like-sushi: "I prefer sushi rather than pudding"
|
i-like-sushi: "I prefer sushi rather than pudding"
|
||||||
show-reversi-board-labels: "Show row and column labels in Reversi"
|
show-reversi-board-labels: "Show row and column labels in Reversi"
|
||||||
verified-user: "Verified user"
|
verified-user: "Verified user"
|
||||||
|
disable-animated-mfm: "Disable animated texts in a post"
|
||||||
reversi:
|
reversi:
|
||||||
drawn: "Draw"
|
drawn: "Draw"
|
||||||
my-turn: "Your turn"
|
my-turn: "Your turn"
|
||||||
@ -168,6 +164,9 @@ common/views/components/games/reversi/reversi.vue:
|
|||||||
matching:
|
matching:
|
||||||
waiting-for: "Waiting for {}"
|
waiting-for: "Waiting for {}"
|
||||||
cancel: "Cancel"
|
cancel: "Cancel"
|
||||||
|
common/views/components/games/reversi/reversi.game.vue:
|
||||||
|
surrender: "Surrender"
|
||||||
|
surrendered: "By surrender"
|
||||||
common/views/components/games/reversi/reversi.index.vue:
|
common/views/components/games/reversi/reversi.index.vue:
|
||||||
title: "Misskey Reversi"
|
title: "Misskey Reversi"
|
||||||
sub-title: "Play reversi with your friends!"
|
sub-title: "Play reversi with your friends!"
|
||||||
@ -203,7 +202,7 @@ common/views/components/games/reversi/reversi.room.vue:
|
|||||||
cancel-ready: "Cancel \"Ready\""
|
cancel-ready: "Cancel \"Ready\""
|
||||||
common/views/components/connect-failed.vue:
|
common/views/components/connect-failed.vue:
|
||||||
title: "Unable to connect to the server"
|
title: "Unable to connect to the server"
|
||||||
description: "There is a problem with your Internet connection, or the server may be down or under maintenance. Please try again later."
|
description: "There is a problem with your Internet connection, or the server may be down or under maintenance. Please {try again} later."
|
||||||
thanks: "Thank you for using Misskey."
|
thanks: "Thank you for using Misskey."
|
||||||
troubleshoot: "Troubleshoot"
|
troubleshoot: "Troubleshoot"
|
||||||
common/views/components/connect-failed.troubleshooter.vue:
|
common/views/components/connect-failed.troubleshooter.vue:
|
||||||
@ -279,6 +278,8 @@ common/views/components/signin.vue:
|
|||||||
token: "Token"
|
token: "Token"
|
||||||
signing-in: "Signing in..."
|
signing-in: "Signing in..."
|
||||||
signin: "Sign in"
|
signin: "Sign in"
|
||||||
|
or: "Or"
|
||||||
|
signin-with-twitter: "Log in with Twitter"
|
||||||
common/views/components/signup.vue:
|
common/views/components/signup.vue:
|
||||||
username: "Username"
|
username: "Username"
|
||||||
checking: "Checking..."
|
checking: "Checking..."
|
||||||
@ -388,6 +389,17 @@ common/views/pages/follow.vue:
|
|||||||
follow: "Follow"
|
follow: "Follow"
|
||||||
request-pending: "Pending follow request"
|
request-pending: "Pending follow request"
|
||||||
follow-request: "Follow request"
|
follow-request: "Follow request"
|
||||||
|
desktop:
|
||||||
|
banner-crop-title: "Crop the part that appears as a banner"
|
||||||
|
banner: "Banner"
|
||||||
|
uploading-banner: "Uploading a new banner"
|
||||||
|
banner-updated: "Updated the banner"
|
||||||
|
choose-banner: "Choose the banner"
|
||||||
|
avatar-crop-title: "Crop the part that appears as an avatar"
|
||||||
|
avatar: "Avatar"
|
||||||
|
uploading-avatar: "Uploading a new avatar"
|
||||||
|
avatar-updated: "Updated the avatar"
|
||||||
|
choose-avatar: "Choose an avatar image"
|
||||||
desktop/views/components/activity.chart.vue:
|
desktop/views/components/activity.chart.vue:
|
||||||
total: "Black ... Total"
|
total: "Black ... Total"
|
||||||
notes: "Blue ... Notes"
|
notes: "Blue ... Notes"
|
||||||
@ -746,6 +758,7 @@ desktop/views/components/received-follow-requests-window.vue:
|
|||||||
desktop/views/components/user-lists-window.vue:
|
desktop/views/components/user-lists-window.vue:
|
||||||
title: "User lists"
|
title: "User lists"
|
||||||
create-list: "Create new list"
|
create-list: "Create new list"
|
||||||
|
list-name: "List name"
|
||||||
desktop/views/components/user-preview.vue:
|
desktop/views/components/user-preview.vue:
|
||||||
notes: "Posts"
|
notes: "Posts"
|
||||||
following: "Following"
|
following: "Following"
|
||||||
@ -828,6 +841,8 @@ desktop/views/pages/user/user.profile.vue:
|
|||||||
mute: "Mute"
|
mute: "Mute"
|
||||||
muted: "Muting"
|
muted: "Muting"
|
||||||
unmute: "Unmute"
|
unmute: "Unmute"
|
||||||
|
push-to-a-list: "Add to list"
|
||||||
|
list-pushed: "You added {user} to {list}."
|
||||||
desktop/views/pages/user/user.header.vue:
|
desktop/views/pages/user/user.header.vue:
|
||||||
posts: "Notes"
|
posts: "Notes"
|
||||||
following: "Following"
|
following: "Following"
|
||||||
@ -1002,7 +1017,7 @@ mobile/views/pages/welcome.vue:
|
|||||||
signup: "Sign up"
|
signup: "Sign up"
|
||||||
mobile/views/pages/widgets.vue:
|
mobile/views/pages/widgets.vue:
|
||||||
dashboard: "Dashboard"
|
dashboard: "Dashboard"
|
||||||
widgets-hints: "ウィジェットを追加/削除したり並べ替えたりできます。ウィジェットを移動するには「三」をドラッグします。ウィジェットを削除するには「x」をタップします。いくつかのウィジェットはタップすることで表示を変更できます。"
|
widgets-hints: "You can add/delete/rearrange widgets. To move the widget, drag \"三\". Tap \"x\" to delete the widget. Some widgets can change display by tapping."
|
||||||
mobile/views/pages/widgets/activity.vue:
|
mobile/views/pages/widgets/activity.vue:
|
||||||
activity: "Activity"
|
activity: "Activity"
|
||||||
mobile/views/pages/share.vue:
|
mobile/views/pages/share.vue:
|
||||||
|
@ -11,6 +11,7 @@ common:
|
|||||||
warning: "<strong>Misskey no tiene anuncios publicitarios.</strong> Sin embargo, algunas características podrían no estar disponibles si el bloqueador de publicidad está habilitado."
|
warning: "<strong>Misskey no tiene anuncios publicitarios.</strong> Sin embargo, algunas características podrían no estar disponibles si el bloqueador de publicidad está habilitado."
|
||||||
application-authorization: "Autorizaciones de la aplicación."
|
application-authorization: "Autorizaciones de la aplicación."
|
||||||
close: "Cerrar"
|
close: "Cerrar"
|
||||||
|
got-it: "¡Listo!"
|
||||||
customization-tips:
|
customization-tips:
|
||||||
title: "Consejos de personalización"
|
title: "Consejos de personalización"
|
||||||
paragraph1: "Customización de inicio le permite agregar, borrar, o reorganizar los accesorios."
|
paragraph1: "Customización de inicio le permite agregar, borrar, o reorganizar los accesorios."
|
||||||
@ -39,12 +40,6 @@ common:
|
|||||||
months_ago: "Hace {} mes(es)"
|
months_ago: "Hace {} mes(es)"
|
||||||
years_ago: "Hace {} año(s)"
|
years_ago: "Hace {} año(s)"
|
||||||
trash: "Papelera"
|
trash: "Papelera"
|
||||||
date:
|
|
||||||
full-year: "Año"
|
|
||||||
month: "Mes"
|
|
||||||
day: "Día"
|
|
||||||
hours: "horas"
|
|
||||||
minutes: "minutos"
|
|
||||||
weekday-short:
|
weekday-short:
|
||||||
sunday: "domingo"
|
sunday: "domingo"
|
||||||
monday: "lunes"
|
monday: "lunes"
|
||||||
@ -88,6 +83,7 @@ common:
|
|||||||
i-like-sushi: "Prefiero sushi a pudín"
|
i-like-sushi: "Prefiero sushi a pudín"
|
||||||
show-reversi-board-labels: "Mostrar etiquetas de filas y columnas en Reversi"
|
show-reversi-board-labels: "Mostrar etiquetas de filas y columnas en Reversi"
|
||||||
verified-user: "Usuario verificado"
|
verified-user: "Usuario verificado"
|
||||||
|
disable-animated-mfm: "Desactivar texto animado en una publicación"
|
||||||
reversi:
|
reversi:
|
||||||
drawn: "Empatado"
|
drawn: "Empatado"
|
||||||
my-turn: "Mi turno"
|
my-turn: "Mi turno"
|
||||||
@ -168,21 +164,24 @@ common/views/components/games/reversi/reversi.vue:
|
|||||||
matching:
|
matching:
|
||||||
waiting-for: "Esperando por {}"
|
waiting-for: "Esperando por {}"
|
||||||
cancel: "Cancelar"
|
cancel: "Cancelar"
|
||||||
|
common/views/components/games/reversi/reversi.game.vue:
|
||||||
|
surrender: "Rendirse"
|
||||||
|
surrendered: "Por rendirse"
|
||||||
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: "¡Juega Reversi con tus amigos!"
|
||||||
invite: "招待"
|
invite: "Invitar"
|
||||||
rule: "遊び方"
|
rule: "Cómo jugar"
|
||||||
rule-desc: "リバーシは、相手と交互に石をボードに置いて、相手の石を挟んで自分の色に変えてゆき、最終的に残った石が多い方が勝ちというボードゲームです。"
|
rule-desc: "リバーシは、相手と交互に石をボードに置いて、相手の石を挟んで自分の色に変えてゆき、最終的に残った石が多い方が勝ちというボードゲームです。"
|
||||||
mode-invite: "招待"
|
mode-invite: "Invitar"
|
||||||
mode-invite-desc: "指定したユーザーと対戦するモードです。"
|
mode-invite-desc: "Invitar un usuario al juego."
|
||||||
invitations: "対局の招待があります!"
|
invitations: "¡Has recibido una invitación!"
|
||||||
my-games: "自分の対局"
|
my-games: "Mis juegos"
|
||||||
all-games: "みんなの対局"
|
all-games: "Todos los juegos"
|
||||||
enter-username: "ユーザー名を入力してください"
|
enter-username: "Ingresar nombre de usuario"
|
||||||
game-state:
|
game-state:
|
||||||
ended: "終了"
|
ended: "Finalizado"
|
||||||
playing: "進行中"
|
playing: "En progreso"
|
||||||
common/views/components/games/reversi/reversi.room.vue:
|
common/views/components/games/reversi/reversi.room.vue:
|
||||||
settings-of-the-game: "Configuración de juego"
|
settings-of-the-game: "Configuración de juego"
|
||||||
choose-map: "Elije un mapa"
|
choose-map: "Elije un mapa"
|
||||||
@ -194,7 +193,7 @@ common/views/components/games/reversi/reversi.room.vue:
|
|||||||
looped-map: "Mapa en bucle"
|
looped-map: "Mapa en bucle"
|
||||||
can-put-everywhere: "Puedes colocar donde quieras"
|
can-put-everywhere: "Puedes colocar donde quieras"
|
||||||
settings-of-the-bot: "Configuración de bot"
|
settings-of-the-bot: "Configuración de bot"
|
||||||
this-game-is-started-soon: "ゲームは数秒後に開始されます"
|
this-game-is-started-soon: "El juego comenzará pronto"
|
||||||
waiting-for-other: "Esperando a que se prepare el adversario"
|
waiting-for-other: "Esperando a que se prepare el adversario"
|
||||||
waiting-for-me: "Esperando por la preparación"
|
waiting-for-me: "Esperando por la preparación"
|
||||||
waiting-for-both: "Esperando por ti"
|
waiting-for-both: "Esperando por ti"
|
||||||
@ -279,6 +278,8 @@ common/views/components/signin.vue:
|
|||||||
token: "Identificador"
|
token: "Identificador"
|
||||||
signing-in: "Entrando..."
|
signing-in: "Entrando..."
|
||||||
signin: "Entra"
|
signin: "Entra"
|
||||||
|
or: "O"
|
||||||
|
signin-with-twitter: "Ingresar con Twitter"
|
||||||
common/views/components/signup.vue:
|
common/views/components/signup.vue:
|
||||||
username: "Usuario"
|
username: "Usuario"
|
||||||
checking: "Comprobando..."
|
checking: "Comprobando..."
|
||||||
@ -373,7 +374,7 @@ common/views/widgets/tips.vue:
|
|||||||
tips-line9: "Misskey está hecho bajo licencia AGPLv3"
|
tips-line9: "Misskey está hecho bajo licencia AGPLv3"
|
||||||
tips-line10: "Usando el accesorio de Máquina del Tiempo puedes encontrar publicaciones antiguas"
|
tips-line10: "Usando el accesorio de Máquina del Tiempo puedes encontrar publicaciones antiguas"
|
||||||
tips-line11: "Puedes resaltar publicaciones en la página de usuario haciendo click en \"...\""
|
tips-line11: "Puedes resaltar publicaciones en la página de usuario haciendo click en \"...\""
|
||||||
tips-line13: "投稿に添付したファイルは全てドライブに保存されます"
|
tips-line13: "Todos los archivos añadidos a la publicación se han guardado en tu unidad."
|
||||||
tips-line14: "ホームのカスタマイズ中、ウィジェットを右クリックしてデザインを変更できます"
|
tips-line14: "ホームのカスタマイズ中、ウィジェットを右クリックしてデザインを変更できます"
|
||||||
tips-line17: "「**」でテキストを囲むと**強調表示**されます"
|
tips-line17: "「**」でテキストを囲むと**強調表示**されます"
|
||||||
tips-line19: "いくつかのウィンドウはブラウザの外に切り離すことができます"
|
tips-line19: "いくつかのウィンドウはブラウザの外に切り離すことができます"
|
||||||
@ -388,6 +389,17 @@ common/views/pages/follow.vue:
|
|||||||
follow: "フォロー"
|
follow: "フォロー"
|
||||||
request-pending: "フォロー許可待ち"
|
request-pending: "フォロー許可待ち"
|
||||||
follow-request: "フォロー申請"
|
follow-request: "フォロー申請"
|
||||||
|
desktop:
|
||||||
|
banner-crop-title: "バナーとして表示する部分を選択"
|
||||||
|
banner: "バナー"
|
||||||
|
uploading-banner: "新しいバナーをアップロードしています"
|
||||||
|
banner-updated: "バナーを更新しました"
|
||||||
|
choose-banner: "バナーにする画像を選択"
|
||||||
|
avatar-crop-title: "アバターとして表示する部分を選択"
|
||||||
|
avatar: "アバター"
|
||||||
|
uploading-avatar: "新しいアバターをアップロードしています"
|
||||||
|
avatar-updated: "アバターを更新しました"
|
||||||
|
choose-avatar: "アバターにする画像を選択"
|
||||||
desktop/views/components/activity.chart.vue:
|
desktop/views/components/activity.chart.vue:
|
||||||
total: "Black ... Total"
|
total: "Black ... Total"
|
||||||
notes: "Blue ... Notes"
|
notes: "Blue ... Notes"
|
||||||
@ -746,6 +758,7 @@ desktop/views/components/received-follow-requests-window.vue:
|
|||||||
desktop/views/components/user-lists-window.vue:
|
desktop/views/components/user-lists-window.vue:
|
||||||
title: "リスト"
|
title: "リスト"
|
||||||
create-list: "リストを作成"
|
create-list: "リストを作成"
|
||||||
|
list-name: "リスト名"
|
||||||
desktop/views/components/user-preview.vue:
|
desktop/views/components/user-preview.vue:
|
||||||
notes: "投稿"
|
notes: "投稿"
|
||||||
following: "フォロー"
|
following: "フォロー"
|
||||||
@ -828,6 +841,8 @@ desktop/views/pages/user/user.profile.vue:
|
|||||||
mute: "ミュートする"
|
mute: "ミュートする"
|
||||||
muted: "ミュートしています"
|
muted: "ミュートしています"
|
||||||
unmute: "ミュート解除"
|
unmute: "ミュート解除"
|
||||||
|
push-to-a-list: "リストに追加"
|
||||||
|
list-pushed: "{user}を{list}に追加しました。"
|
||||||
desktop/views/pages/user/user.header.vue:
|
desktop/views/pages/user/user.header.vue:
|
||||||
posts: "投稿"
|
posts: "投稿"
|
||||||
following: "フォロー"
|
following: "フォロー"
|
||||||
|
@ -11,6 +11,7 @@ common:
|
|||||||
warning: "<strong>Misskey n'utilise pas de publicités</strong>, mais quelques options peuvent être non disponibles ou fonctionneraient mal si un bloqueur de publicités est activé."
|
warning: "<strong>Misskey n'utilise pas de publicités</strong>, mais quelques options peuvent être non disponibles ou fonctionneraient mal si un bloqueur de publicités est activé."
|
||||||
application-authorization: "Permissions de l'application"
|
application-authorization: "Permissions de l'application"
|
||||||
close: "Fermer"
|
close: "Fermer"
|
||||||
|
got-it: "わかった"
|
||||||
customization-tips:
|
customization-tips:
|
||||||
title: "Conseils de personnalisation"
|
title: "Conseils de personnalisation"
|
||||||
paragraph1: "La personnalisation à la maison vous permet d'ajouter / supprimer, glisser et déposer et réorganiser les widgets."
|
paragraph1: "La personnalisation à la maison vous permet d'ajouter / supprimer, glisser et déposer et réorganiser les widgets."
|
||||||
@ -39,12 +40,6 @@ common:
|
|||||||
months_ago: "Il y a {} mois"
|
months_ago: "Il y a {} mois"
|
||||||
years_ago: "Il y a {} an·s"
|
years_ago: "Il y a {} an·s"
|
||||||
trash: "Corbeille"
|
trash: "Corbeille"
|
||||||
date:
|
|
||||||
full-year: "Année "
|
|
||||||
month: "Mois"
|
|
||||||
day: "Jour"
|
|
||||||
hours: "heures"
|
|
||||||
minutes: "minutes"
|
|
||||||
weekday-short:
|
weekday-short:
|
||||||
sunday: "D"
|
sunday: "D"
|
||||||
monday: "L"
|
monday: "L"
|
||||||
@ -88,6 +83,7 @@ common:
|
|||||||
i-like-sushi: "Je préfère les sushis (au pudding)"
|
i-like-sushi: "Je préfère les sushis (au pudding)"
|
||||||
show-reversi-board-labels: "Afficher les étiquettes des lignes et colonnes dans Reversi"
|
show-reversi-board-labels: "Afficher les étiquettes des lignes et colonnes dans Reversi"
|
||||||
verified-user: "Utilisateur·trice vérifié·e"
|
verified-user: "Utilisateur·trice vérifié·e"
|
||||||
|
disable-animated-mfm: "Désactiver les textes animés dans les publications"
|
||||||
reversi:
|
reversi:
|
||||||
drawn: "Partie nulle"
|
drawn: "Partie nulle"
|
||||||
my-turn: "C’est votre tour"
|
my-turn: "C’est votre tour"
|
||||||
@ -98,7 +94,7 @@ common:
|
|||||||
black: "Noirs"
|
black: "Noirs"
|
||||||
white: "Blancs"
|
white: "Blancs"
|
||||||
total: "Total"
|
total: "Total"
|
||||||
this-turn: "Tour de {}"
|
this-turn: "Tour {}"
|
||||||
widgets:
|
widgets:
|
||||||
analog-clock: "Horloge analogique"
|
analog-clock: "Horloge analogique"
|
||||||
profile: "Profil"
|
profile: "Profil"
|
||||||
@ -116,7 +112,7 @@ common:
|
|||||||
notifications: "Notifications"
|
notifications: "Notifications"
|
||||||
users: "Utilisateurs"
|
users: "Utilisateurs"
|
||||||
polls: "Sondages"
|
polls: "Sondages"
|
||||||
post-form: "投稿フォーム"
|
post-form: "Formulaire de publication"
|
||||||
messaging: "Messagerie"
|
messaging: "Messagerie"
|
||||||
server: "Info sur le serveur"
|
server: "Info sur le serveur"
|
||||||
donation: "Dons"
|
donation: "Dons"
|
||||||
@ -156,7 +152,7 @@ auth/views/form.vue:
|
|||||||
accept: "Autoriser l’accès"
|
accept: "Autoriser l’accès"
|
||||||
auth/views/index.vue:
|
auth/views/index.vue:
|
||||||
loading: "Chargement en cours"
|
loading: "Chargement en cours"
|
||||||
denied: "アプリケーションの連携をキャンセルしました。"
|
denied: "L'autorisation de l'application a été refusée."
|
||||||
denied-paragraph: "Cette application ne va pas accéder à votre compte."
|
denied-paragraph: "Cette application ne va pas accéder à votre compte."
|
||||||
already-authorized: "Cette application est déjà autorisée"
|
already-authorized: "Cette application est déjà autorisée"
|
||||||
allowed: "アプリケーションの連携を許可しました"
|
allowed: "アプリケーションの連携を許可しました"
|
||||||
@ -168,6 +164,9 @@ common/views/components/games/reversi/reversi.vue:
|
|||||||
matching:
|
matching:
|
||||||
waiting-for: "En attente de {}"
|
waiting-for: "En attente de {}"
|
||||||
cancel: "Annuler"
|
cancel: "Annuler"
|
||||||
|
common/views/components/games/reversi/reversi.game.vue:
|
||||||
|
surrender: "Se rendre"
|
||||||
|
surrendered: "Par abandon"
|
||||||
common/views/components/games/reversi/reversi.index.vue:
|
common/views/components/games/reversi/reversi.index.vue:
|
||||||
title: "Misskey Reversi"
|
title: "Misskey Reversi"
|
||||||
sub-title: "Jouer à Reversi avec vos amis·es !"
|
sub-title: "Jouer à Reversi avec vos amis·es !"
|
||||||
@ -197,10 +196,10 @@ common/views/components/games/reversi/reversi.room.vue:
|
|||||||
this-game-is-started-soon: "La partie commencera dans quelques instants"
|
this-game-is-started-soon: "La partie commencera dans quelques instants"
|
||||||
waiting-for-other: "En attente que l'adversaire soit prêt"
|
waiting-for-other: "En attente que l'adversaire soit prêt"
|
||||||
waiting-for-me: "En attente que vous soyez prêt"
|
waiting-for-me: "En attente que vous soyez prêt"
|
||||||
waiting-for-both: "準備中"
|
waiting-for-both: "En attente que vous soyez prêt"
|
||||||
cancel: "Annuler"
|
cancel: "Annuler"
|
||||||
ready: "Prêt"
|
ready: "Prêt"
|
||||||
cancel-ready: "準備続行"
|
cancel-ready: "Annuler \"Je suis prêt\""
|
||||||
common/views/components/connect-failed.vue:
|
common/views/components/connect-failed.vue:
|
||||||
title: "Impossible de se connecter au server."
|
title: "Impossible de se connecter au server."
|
||||||
description: "Il y a soit un problème avec votre connexion internet, soit le serveur est hors-ligne ou en maintenance. Veuillez {ressayer} plus tard."
|
description: "Il y a soit un problème avec votre connexion internet, soit le serveur est hors-ligne ou en maintenance. Veuillez {ressayer} plus tard."
|
||||||
@ -279,6 +278,8 @@ common/views/components/signin.vue:
|
|||||||
token: "Token"
|
token: "Token"
|
||||||
signing-in: "Connexion...."
|
signing-in: "Connexion...."
|
||||||
signin: "Se connecter"
|
signin: "Se connecter"
|
||||||
|
or: "または"
|
||||||
|
signin-with-twitter: "Twitterでログイン"
|
||||||
common/views/components/signup.vue:
|
common/views/components/signup.vue:
|
||||||
username: "Nom d'utilisateur"
|
username: "Nom d'utilisateur"
|
||||||
checking: "Vérification"
|
checking: "Vérification"
|
||||||
@ -364,15 +365,15 @@ common/views/widgets/slideshow.vue:
|
|||||||
common/views/widgets/tips.vue:
|
common/views/widgets/tips.vue:
|
||||||
tips-line1: "<kbd>t</kbd>でタイムラインにフォーカスできます"
|
tips-line1: "<kbd>t</kbd>でタイムラインにフォーカスできます"
|
||||||
tips-line2: "<kbd>p</kbd>または<kbd>n</kbd>で投稿フォームを開きます"
|
tips-line2: "<kbd>p</kbd>または<kbd>n</kbd>で投稿フォームを開きます"
|
||||||
tips-line3: "投稿フォームにはファイルをドラッグ&ドロップできます"
|
tips-line3: "Vous pouvez glisser et déposer des fichiers sur la fenêtre de la note"
|
||||||
tips-line4: "投稿フォームにクリップボードにある画像データをペーストできます"
|
tips-line4: "Vous pouvez coller des images à partir du presse-papier sur la fenêtre de la note"
|
||||||
tips-line5: "ドライブにファイルをドラッグ&ドロップしてアップロードできます"
|
tips-line5: "ドライブにファイルをドラッグ&ドロップしてアップロードできます"
|
||||||
tips-line6: "ドライブでファイルをドラッグしてフォルダ移動できます"
|
tips-line6: "ドライブでファイルをドラッグしてフォルダ移動できます"
|
||||||
tips-line7: "ドライブでフォルダをドラッグしてフォルダ移動できます"
|
tips-line7: "ドライブでフォルダをドラッグしてフォルダ移動できます"
|
||||||
tips-line8: "Vous pouvez personnaliser l'Accueil via les paramètres"
|
tips-line8: "Vous pouvez personnaliser l'Accueil via les paramètres"
|
||||||
tips-line9: "Misskey est sous licence AGPLv3"
|
tips-line9: "Misskey est sous licence AGPLv3"
|
||||||
tips-line10: "タイムマシンウィジェットを利用すると、簡単に過去のタイムラインに遡れます"
|
tips-line10: "タイムマシンウィジェットを利用すると、簡単に過去のタイムラインに遡れます"
|
||||||
tips-line11: "投稿の ... をクリックして、投稿をユーザーページにピン留めできます"
|
tips-line11: "Vous pouvez épingler des notes sur votre page en appuyant sur \"…\""
|
||||||
tips-line13: "Tous les fichiers attachés à cette publication sont sauvegardés dans le Drive"
|
tips-line13: "Tous les fichiers attachés à cette publication sont sauvegardés dans le Drive"
|
||||||
tips-line14: "ホームのカスタマイズ中、ウィジェットを右クリックしてデザインを変更できます"
|
tips-line14: "ホームのカスタマイズ中、ウィジェットを右クリックしてデザインを変更できます"
|
||||||
tips-line17: "「**」でテキストを囲むと**強調表示**されます"
|
tips-line17: "「**」でテキストを囲むと**強調表示**されます"
|
||||||
@ -388,6 +389,17 @@ common/views/pages/follow.vue:
|
|||||||
follow: "Suivre"
|
follow: "Suivre"
|
||||||
request-pending: "Demande d'abonnement en attente"
|
request-pending: "Demande d'abonnement en attente"
|
||||||
follow-request: "Demande d'abonnement"
|
follow-request: "Demande d'abonnement"
|
||||||
|
desktop:
|
||||||
|
banner-crop-title: "バナーとして表示する部分を選択"
|
||||||
|
banner: "バナー"
|
||||||
|
uploading-banner: "新しいバナーをアップロードしています"
|
||||||
|
banner-updated: "バナーを更新しました"
|
||||||
|
choose-banner: "バナーにする画像を選択"
|
||||||
|
avatar-crop-title: "アバターとして表示する部分を選択"
|
||||||
|
avatar: "アバター"
|
||||||
|
uploading-avatar: "新しいアバターをアップロードしています"
|
||||||
|
avatar-updated: "アバターを更新しました"
|
||||||
|
choose-avatar: "アバターにする画像を選択"
|
||||||
desktop/views/components/activity.chart.vue:
|
desktop/views/components/activity.chart.vue:
|
||||||
total: "Noirs ... Total"
|
total: "Noirs ... Total"
|
||||||
notes: "Bleu ... Notes"
|
notes: "Bleu ... Notes"
|
||||||
@ -717,7 +729,7 @@ desktop/views/components/timeline.vue:
|
|||||||
global: "Global"
|
global: "Global"
|
||||||
list: "Listes"
|
list: "Listes"
|
||||||
desktop/views/components/ui.header.vue:
|
desktop/views/components/ui.header.vue:
|
||||||
welcome-back: "Vous êtes de retour !"
|
welcome-back: "Content de vous revoir !"
|
||||||
desktop/views/components/ui.header.account.vue:
|
desktop/views/components/ui.header.account.vue:
|
||||||
profile: "Votre profil"
|
profile: "Votre profil"
|
||||||
drive: "Drive"
|
drive: "Drive"
|
||||||
@ -746,6 +758,7 @@ desktop/views/components/received-follow-requests-window.vue:
|
|||||||
desktop/views/components/user-lists-window.vue:
|
desktop/views/components/user-lists-window.vue:
|
||||||
title: "Listes de l'utilisateur"
|
title: "Listes de l'utilisateur"
|
||||||
create-list: "Créer une liste"
|
create-list: "Créer une liste"
|
||||||
|
list-name: "リスト名"
|
||||||
desktop/views/components/user-preview.vue:
|
desktop/views/components/user-preview.vue:
|
||||||
notes: "Publications"
|
notes: "Publications"
|
||||||
following: "Abonné à"
|
following: "Abonné à"
|
||||||
@ -828,6 +841,8 @@ desktop/views/pages/user/user.profile.vue:
|
|||||||
mute: "Mettre en sourdine"
|
mute: "Mettre en sourdine"
|
||||||
muted: "Muting"
|
muted: "Muting"
|
||||||
unmute: "Enlever la sourdine"
|
unmute: "Enlever la sourdine"
|
||||||
|
push-to-a-list: "リストに追加"
|
||||||
|
list-pushed: "{user}を{list}に追加しました。"
|
||||||
desktop/views/pages/user/user.header.vue:
|
desktop/views/pages/user/user.header.vue:
|
||||||
posts: "Notes"
|
posts: "Notes"
|
||||||
following: "Suit"
|
following: "Suit"
|
||||||
@ -986,7 +1001,7 @@ mobile/views/pages/drive.vue:
|
|||||||
drive: "Drive"
|
drive: "Drive"
|
||||||
more: "Afficher plus ..."
|
more: "Afficher plus ..."
|
||||||
mobile/views/pages/signup.vue:
|
mobile/views/pages/signup.vue:
|
||||||
lets-start: "📦 始めましょう"
|
lets-start: "Commençons ! 📦"
|
||||||
mobile/views/pages/followers.vue:
|
mobile/views/pages/followers.vue:
|
||||||
followers-of: "Abonné·e·s de {}"
|
followers-of: "Abonné·e·s de {}"
|
||||||
mobile/views/pages/following.vue:
|
mobile/views/pages/following.vue:
|
||||||
@ -1055,9 +1070,9 @@ mobile/views/pages/settings.vue:
|
|||||||
i-am-under-limited-internet: "J'ai un accès Internet limité"
|
i-am-under-limited-internet: "J'ai un accès Internet limité"
|
||||||
circle-icons: "Utiliser des icônes circulaires"
|
circle-icons: "Utiliser des icônes circulaires"
|
||||||
timeline: "Fil d'actualité"
|
timeline: "Fil d'actualité"
|
||||||
show-reply-target: "リプライ先を表示する"
|
show-reply-target: "Afficher les réponses"
|
||||||
show-my-renotes: "Afficher mes republications"
|
show-my-renotes: "Afficher mes republications"
|
||||||
show-renoted-my-notes: "Renoteされた自分の投稿を表示する"
|
show-renoted-my-notes: "Afficher les notes que j'ai repartagé"
|
||||||
post-style: "Style de la publication"
|
post-style: "Style de la publication"
|
||||||
post-style-standard: "Standard"
|
post-style-standard: "Standard"
|
||||||
post-style-smart: "Intelligent"
|
post-style-smart: "Intelligent"
|
||||||
|
@ -11,6 +11,7 @@ common:
|
|||||||
warning: "<strong>Misskeyは広告を掲載していません</strong>が、広告をブロックする機能が有効だと一部の機能が利用できなかったり、不具合が発生する場合があります。"
|
warning: "<strong>Misskeyは広告を掲載していません</strong>が、広告をブロックする機能が有効だと一部の機能が利用できなかったり、不具合が発生する場合があります。"
|
||||||
application-authorization: "アプリの連携"
|
application-authorization: "アプリの連携"
|
||||||
close: "閉じる"
|
close: "閉じる"
|
||||||
|
got-it: "わかった"
|
||||||
customization-tips:
|
customization-tips:
|
||||||
title: "カスタマイズのヒント"
|
title: "カスタマイズのヒント"
|
||||||
paragraph1: "ホームのカスタマイズでは、ウィジェットを追加/削除したり、ドラッグ&ドロップして並べ替えたりすることができます。"
|
paragraph1: "ホームのカスタマイズでは、ウィジェットを追加/削除したり、ドラッグ&ドロップして並べ替えたりすることができます。"
|
||||||
@ -39,12 +40,6 @@ common:
|
|||||||
months_ago: "{}ヶ月前"
|
months_ago: "{}ヶ月前"
|
||||||
years_ago: "{}年前"
|
years_ago: "{}年前"
|
||||||
trash: "ゴミ箱"
|
trash: "ゴミ箱"
|
||||||
date:
|
|
||||||
full-year: "年"
|
|
||||||
month: "月"
|
|
||||||
day: "日"
|
|
||||||
hours: "時"
|
|
||||||
minutes: "分"
|
|
||||||
weekday-short:
|
weekday-short:
|
||||||
sunday: "日"
|
sunday: "日"
|
||||||
monday: "月"
|
monday: "月"
|
||||||
@ -88,6 +83,7 @@ common:
|
|||||||
i-like-sushi: "私は(プリンよりむしろ)寿司が好き"
|
i-like-sushi: "私は(プリンよりむしろ)寿司が好き"
|
||||||
show-reversi-board-labels: "リバーシのボードの行と列のラベルを表示"
|
show-reversi-board-labels: "リバーシのボードの行と列のラベルを表示"
|
||||||
verified-user: "認証済みのユーザー"
|
verified-user: "認証済みのユーザー"
|
||||||
|
disable-animated-mfm: "投稿内の動きのあるテキストを無効にする"
|
||||||
reversi:
|
reversi:
|
||||||
drawn: "引き分け"
|
drawn: "引き分け"
|
||||||
my-turn: "あなたのターンです"
|
my-turn: "あなたのターンです"
|
||||||
@ -168,6 +164,9 @@ common/views/components/games/reversi/reversi.vue:
|
|||||||
matching:
|
matching:
|
||||||
waiting-for: "{}を待っています"
|
waiting-for: "{}を待っています"
|
||||||
cancel: "キャンセル"
|
cancel: "キャンセル"
|
||||||
|
common/views/components/games/reversi/reversi.game.vue:
|
||||||
|
surrender: "投了"
|
||||||
|
surrendered: "投了により"
|
||||||
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: "他のMisskeyユーザーとリバーシで対戦しよう"
|
||||||
@ -279,6 +278,8 @@ common/views/components/signin.vue:
|
|||||||
token: "トークン"
|
token: "トークン"
|
||||||
signing-in: "やってます..."
|
signing-in: "やってます..."
|
||||||
signin: "サインイン"
|
signin: "サインイン"
|
||||||
|
or: "または"
|
||||||
|
signin-with-twitter: "Twitterでログイン"
|
||||||
common/views/components/signup.vue:
|
common/views/components/signup.vue:
|
||||||
username: "ユーザー名"
|
username: "ユーザー名"
|
||||||
checking: "確認しています..."
|
checking: "確認しています..."
|
||||||
@ -388,6 +389,17 @@ common/views/pages/follow.vue:
|
|||||||
follow: "フォロー"
|
follow: "フォロー"
|
||||||
request-pending: "フォロー許可待ち"
|
request-pending: "フォロー許可待ち"
|
||||||
follow-request: "フォロー申請"
|
follow-request: "フォロー申請"
|
||||||
|
desktop:
|
||||||
|
banner-crop-title: "バナーとして表示する部分を選択"
|
||||||
|
banner: "バナー"
|
||||||
|
uploading-banner: "新しいバナーをアップロードしています"
|
||||||
|
banner-updated: "バナーを更新しました"
|
||||||
|
choose-banner: "バナーにする画像を選択"
|
||||||
|
avatar-crop-title: "アバターとして表示する部分を選択"
|
||||||
|
avatar: "アバター"
|
||||||
|
uploading-avatar: "新しいアバターをアップロードしています"
|
||||||
|
avatar-updated: "アバターを更新しました"
|
||||||
|
choose-avatar: "アバターにする画像を選択"
|
||||||
desktop/views/components/activity.chart.vue:
|
desktop/views/components/activity.chart.vue:
|
||||||
total: "Black ... Total"
|
total: "Black ... Total"
|
||||||
notes: "Blue ... Notes"
|
notes: "Blue ... Notes"
|
||||||
@ -746,6 +758,7 @@ desktop/views/components/received-follow-requests-window.vue:
|
|||||||
desktop/views/components/user-lists-window.vue:
|
desktop/views/components/user-lists-window.vue:
|
||||||
title: "リスト"
|
title: "リスト"
|
||||||
create-list: "リストを作成"
|
create-list: "リストを作成"
|
||||||
|
list-name: "リスト名"
|
||||||
desktop/views/components/user-preview.vue:
|
desktop/views/components/user-preview.vue:
|
||||||
notes: "投稿"
|
notes: "投稿"
|
||||||
following: "フォロー"
|
following: "フォロー"
|
||||||
@ -828,6 +841,8 @@ desktop/views/pages/user/user.profile.vue:
|
|||||||
mute: "ミュートする"
|
mute: "ミュートする"
|
||||||
muted: "ミュートしています"
|
muted: "ミュートしています"
|
||||||
unmute: "ミュート解除"
|
unmute: "ミュート解除"
|
||||||
|
push-to-a-list: "リストに追加"
|
||||||
|
list-pushed: "{user}を{list}に追加しました。"
|
||||||
desktop/views/pages/user/user.header.vue:
|
desktop/views/pages/user/user.header.vue:
|
||||||
posts: "投稿"
|
posts: "投稿"
|
||||||
following: "フォロー"
|
following: "フォロー"
|
||||||
|
@ -11,6 +11,8 @@ common:
|
|||||||
warning: "<strong>Misskeyは広告を掲載していません</strong>が、広告をブロックする機能が有効だと一部の機能が利用できなかったり、不具合が発生する場合があります。"
|
warning: "<strong>Misskeyは広告を掲載していません</strong>が、広告をブロックする機能が有効だと一部の機能が利用できなかったり、不具合が発生する場合があります。"
|
||||||
application-authorization: "アプリの連携"
|
application-authorization: "アプリの連携"
|
||||||
close: "閉じる"
|
close: "閉じる"
|
||||||
|
do-not-copy-paste: "ここにコードを入力したり張り付けたりしないでください。アカウントが不正利用される可能性があります。"
|
||||||
|
got-it: "わかった"
|
||||||
customization-tips:
|
customization-tips:
|
||||||
title: "カスタマイズのヒント"
|
title: "カスタマイズのヒント"
|
||||||
paragraph1: "ホームのカスタマイズでは、ウィジェットを追加/削除したり、ドラッグ&ドロップして並べ替えたりすることができます。"
|
paragraph1: "ホームのカスタマイズでは、ウィジェットを追加/削除したり、ドラッグ&ドロップして並べ替えたりすることができます。"
|
||||||
@ -26,7 +28,6 @@ common:
|
|||||||
notified-by: "{}さんから"
|
notified-by: "{}さんから"
|
||||||
reply-from: "{}さんから返信:"
|
reply-from: "{}さんから返信:"
|
||||||
quoted-by: "{}さんが引用:"
|
quoted-by: "{}さんが引用:"
|
||||||
name: "Misskey"
|
|
||||||
time:
|
time:
|
||||||
unknown: "なぞのじかん"
|
unknown: "なぞのじかん"
|
||||||
future: "未来"
|
future: "未来"
|
||||||
@ -38,16 +39,10 @@ common:
|
|||||||
weeks_ago: "{}週間前"
|
weeks_ago: "{}週間前"
|
||||||
months_ago: "{}ヶ月前"
|
months_ago: "{}ヶ月前"
|
||||||
years_ago: "{}年前"
|
years_ago: "{}年前"
|
||||||
|
month-and-day: "{month}月 {day}日"
|
||||||
|
|
||||||
trash: "ゴミ箱"
|
trash: "ゴミ箱"
|
||||||
|
|
||||||
date:
|
|
||||||
full-year: "年"
|
|
||||||
month: "月"
|
|
||||||
day: "日"
|
|
||||||
hours: "時"
|
|
||||||
minutes: "分"
|
|
||||||
|
|
||||||
weekday-short:
|
weekday-short:
|
||||||
sunday: "日"
|
sunday: "日"
|
||||||
monday: "月"
|
monday: "月"
|
||||||
@ -95,6 +90,7 @@ common:
|
|||||||
i-like-sushi: "私は(プリンよりむしろ)寿司が好き"
|
i-like-sushi: "私は(プリンよりむしろ)寿司が好き"
|
||||||
show-reversi-board-labels: "リバーシのボードの行と列のラベルを表示"
|
show-reversi-board-labels: "リバーシのボードの行と列のラベルを表示"
|
||||||
verified-user: "認証済みのユーザー"
|
verified-user: "認証済みのユーザー"
|
||||||
|
disable-animated-mfm: "投稿内の動きのあるテキストを無効にする"
|
||||||
|
|
||||||
reversi:
|
reversi:
|
||||||
drawn: "引き分け"
|
drawn: "引き分け"
|
||||||
@ -182,6 +178,10 @@ common/views/components/games/reversi/reversi.vue:
|
|||||||
waiting-for: "{}を待っています"
|
waiting-for: "{}を待っています"
|
||||||
cancel: "キャンセル"
|
cancel: "キャンセル"
|
||||||
|
|
||||||
|
common/views/components/games/reversi/reversi.game.vue:
|
||||||
|
surrender: "投了"
|
||||||
|
surrendered: "投了により"
|
||||||
|
|
||||||
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: "他のMisskeyユーザーとリバーシで対戦しよう"
|
||||||
@ -254,12 +254,14 @@ common/views/components/messaging-room.vue:
|
|||||||
no-history: "これより過去の履歴はありません"
|
no-history: "これより過去の履歴はありません"
|
||||||
resize-form: "ドラッグしてフォームの広さを調整"
|
resize-form: "ドラッグしてフォームの広さを調整"
|
||||||
new-message: "新しいメッセージがあります"
|
new-message: "新しいメッセージがあります"
|
||||||
|
only-one-file-attached: "メッセージに添付できるのはひとつのファイルのみです"
|
||||||
|
|
||||||
common/views/components/messaging-room.form.vue:
|
common/views/components/messaging-room.form.vue:
|
||||||
input-message-here: "ここにメッセージを入力"
|
input-message-here: "ここにメッセージを入力"
|
||||||
send: "送信"
|
send: "送信"
|
||||||
attach-from-local: "PCからファイルを添付する"
|
attach-from-local: "PCからファイルを添付する"
|
||||||
attach-from-drive: "ドライブからファイルを添付する"
|
attach-from-drive: "ドライブからファイルを添付する"
|
||||||
|
only-one-file-attached: "メッセージに添付できるのはひとつのファイルのみです"
|
||||||
|
|
||||||
common/views/components/messaging-room.message.vue:
|
common/views/components/messaging-room.message.vue:
|
||||||
is-read: "既読"
|
is-read: "既読"
|
||||||
@ -306,6 +308,8 @@ common/views/components/signin.vue:
|
|||||||
token: "トークン"
|
token: "トークン"
|
||||||
signing-in: "やってます..."
|
signing-in: "やってます..."
|
||||||
signin: "サインイン"
|
signin: "サインイン"
|
||||||
|
or: "または"
|
||||||
|
signin-with-twitter: "Twitterでログイン"
|
||||||
|
|
||||||
common/views/components/signup.vue:
|
common/views/components/signup.vue:
|
||||||
username: "ユーザー名"
|
username: "ユーザー名"
|
||||||
@ -433,6 +437,18 @@ common/views/pages/follow.vue:
|
|||||||
request-pending: "フォロー許可待ち"
|
request-pending: "フォロー許可待ち"
|
||||||
follow-request: "フォロー申請"
|
follow-request: "フォロー申請"
|
||||||
|
|
||||||
|
desktop:
|
||||||
|
banner-crop-title: "バナーとして表示する部分を選択"
|
||||||
|
banner: "バナー"
|
||||||
|
uploading-banner: "新しいバナーをアップロードしています"
|
||||||
|
banner-updated: "バナーを更新しました"
|
||||||
|
choose-banner: "バナーにする画像を選択"
|
||||||
|
avatar-crop-title: "アバターとして表示する部分を選択"
|
||||||
|
avatar: "アバター"
|
||||||
|
uploading-avatar: "新しいアバターをアップロードしています"
|
||||||
|
avatar-updated: "アバターを更新しました"
|
||||||
|
choose-avatar: "アバターにする画像を選択"
|
||||||
|
|
||||||
desktop/views/components/activity.chart.vue:
|
desktop/views/components/activity.chart.vue:
|
||||||
total: "Black ... Total"
|
total: "Black ... Total"
|
||||||
notes: "Blue ... Notes"
|
notes: "Blue ... Notes"
|
||||||
@ -592,6 +608,8 @@ desktop/views/components/notes.note.vue:
|
|||||||
detail: "詳細"
|
detail: "詳細"
|
||||||
private: "この投稿は非公開です"
|
private: "この投稿は非公開です"
|
||||||
deleted: "この投稿は削除されました"
|
deleted: "この投稿は削除されました"
|
||||||
|
hide: "隠す"
|
||||||
|
see-more: "もっと見る"
|
||||||
|
|
||||||
desktop/views/components/notes.vue:
|
desktop/views/components/notes.vue:
|
||||||
error: "読み込みに失敗しました。"
|
error: "読み込みに失敗しました。"
|
||||||
@ -630,6 +648,7 @@ desktop/views/components/post-form.vue:
|
|||||||
geolocation-alert: "お使いの端末は位置情報に対応していません"
|
geolocation-alert: "お使いの端末は位置情報に対応していません"
|
||||||
error: "エラー"
|
error: "エラー"
|
||||||
enter-username: "ユーザー名を入力してください"
|
enter-username: "ユーザー名を入力してください"
|
||||||
|
annotations: "内容への注釈 (オプション)"
|
||||||
|
|
||||||
desktop/views/components/post-form-window.vue:
|
desktop/views/components/post-form-window.vue:
|
||||||
note: "新規投稿"
|
note: "新規投稿"
|
||||||
@ -818,6 +837,7 @@ desktop/views/components/timeline.vue:
|
|||||||
|
|
||||||
desktop/views/components/ui.header.vue:
|
desktop/views/components/ui.header.vue:
|
||||||
welcome-back: "おかえりなさい、"
|
welcome-back: "おかえりなさい、"
|
||||||
|
adjective: "さん"
|
||||||
|
|
||||||
desktop/views/components/ui.header.account.vue:
|
desktop/views/components/ui.header.account.vue:
|
||||||
profile: "プロフィール"
|
profile: "プロフィール"
|
||||||
@ -850,11 +870,10 @@ desktop/views/components/received-follow-requests-window.vue:
|
|||||||
accept: "承認"
|
accept: "承認"
|
||||||
reject: "拒否"
|
reject: "拒否"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
desktop/views/components/user-lists-window.vue:
|
desktop/views/components/user-lists-window.vue:
|
||||||
title: "リスト"
|
title: "リスト"
|
||||||
create-list: "リストを作成"
|
create-list: "リストを作成"
|
||||||
|
list-name: "リスト名"
|
||||||
|
|
||||||
desktop/views/components/user-preview.vue:
|
desktop/views/components/user-preview.vue:
|
||||||
notes: "投稿"
|
notes: "投稿"
|
||||||
@ -959,6 +978,8 @@ desktop/views/pages/user/user.profile.vue:
|
|||||||
mute: "ミュートする"
|
mute: "ミュートする"
|
||||||
muted: "ミュートしています"
|
muted: "ミュートしています"
|
||||||
unmute: "ミュート解除"
|
unmute: "ミュート解除"
|
||||||
|
push-to-a-list: "リストに追加"
|
||||||
|
list-pushed: "{user}を{list}に追加しました。"
|
||||||
|
|
||||||
desktop/views/pages/user/user.header.vue:
|
desktop/views/pages/user/user.header.vue:
|
||||||
posts: "投稿"
|
posts: "投稿"
|
||||||
@ -1114,6 +1135,7 @@ mobile/views/components/timeline.vue:
|
|||||||
|
|
||||||
mobile/views/components/ui.header.vue:
|
mobile/views/components/ui.header.vue:
|
||||||
welcome-back: "おかえりなさい、"
|
welcome-back: "おかえりなさい、"
|
||||||
|
adjective: "さん"
|
||||||
|
|
||||||
mobile/views/components/ui.nav.vue:
|
mobile/views/components/ui.nav.vue:
|
||||||
timeline: "タイムライン"
|
timeline: "タイムライン"
|
||||||
@ -1175,6 +1197,8 @@ mobile/views/pages/welcome.vue:
|
|||||||
mobile/views/pages/widgets.vue:
|
mobile/views/pages/widgets.vue:
|
||||||
dashboard: "ダッシュボード"
|
dashboard: "ダッシュボード"
|
||||||
widgets-hints: "ウィジェットを追加/削除したり並べ替えたりできます。ウィジェットを移動するには「三」をドラッグします。ウィジェットを削除するには「x」をタップします。いくつかのウィジェットはタップすることで表示を変更できます。"
|
widgets-hints: "ウィジェットを追加/削除したり並べ替えたりできます。ウィジェットを移動するには「三」をドラッグします。ウィジェットを削除するには「x」をタップします。いくつかのウィジェットはタップすることで表示を変更できます。"
|
||||||
|
add-widget: "追加"
|
||||||
|
customization-tips: "カスタマイズのヒント"
|
||||||
|
|
||||||
mobile/views/pages/widgets/activity.vue:
|
mobile/views/pages/widgets/activity.vue:
|
||||||
activity: "アクティビティ"
|
activity: "アクティビティ"
|
||||||
@ -1223,6 +1247,7 @@ mobile/views/pages/settings/settings.profile.vue:
|
|||||||
mobile/views/pages/search.vue:
|
mobile/views/pages/search.vue:
|
||||||
search: "検索"
|
search: "検索"
|
||||||
empty: "「{}」に関する投稿は見つかりませんでした。"
|
empty: "「{}」に関する投稿は見つかりませんでした。"
|
||||||
|
not-found: "「{}」に関する投稿は見つかりませんでした。"
|
||||||
|
|
||||||
mobile/views/pages/selectdrive.vue:
|
mobile/views/pages/selectdrive.vue:
|
||||||
select-file: "ファイルを選択"
|
select-file: "ファイルを選択"
|
||||||
@ -1327,3 +1352,7 @@ docs:
|
|||||||
name: "名前"
|
name: "名前"
|
||||||
type: "型"
|
type: "型"
|
||||||
description: "説明"
|
description: "説明"
|
||||||
|
|
||||||
|
|
||||||
|
dev/views/index.vue:
|
||||||
|
manage-apps: "アプリの管理"
|
||||||
|
227
locales/ko.yml
227
locales/ko.yml
@ -1,128 +1,124 @@
|
|||||||
---
|
---
|
||||||
meta:
|
meta:
|
||||||
lang: "日本語"
|
lang: "한국어"
|
||||||
divider: ""
|
divider: ""
|
||||||
common:
|
common:
|
||||||
misskey: "A ⭐ of fediverse"
|
misskey: "A ⭐ of fediverse"
|
||||||
about-title: "A ⭐ of fediverse."
|
about-title: "A ⭐ of fediverse."
|
||||||
about: "Misskeyを見つけていただき、ありがとうございます。Misskeyは、地球で生まれた<b>分散マイクロブログSNS</b>です。Fediverse(様々なSNSで構成される宇宙)の中に存在するため、他のSNSと相互に繋がっています。暫し都会の喧騒から離れて、新しいインターネットにダイブしてみませんか。"
|
about: "Misskey를 찾아 주셔서 감사합니다. Misskey은 지구에서 태어난 <b>분산 마이크로 블로그 SNS </b> 입니다. Fediverse (다양한 SNS로 구성되는 우주)에 존재하는 다른 SNS와 상호 연결되어 있습니다. 잠시 도시의 번잡함에서 벗어나 새로운 인터넷에 다이브 해 보지 않겠습니까."
|
||||||
adblock:
|
adblock:
|
||||||
detected: "広告ブロッカーを無効にしてください"
|
detected: "광고 차단기를 해제하십시오"
|
||||||
warning: "<strong>Misskeyは広告を掲載していません</strong>が、広告をブロックする機能が有効だと一部の機能が利用できなかったり、不具合が発生する場合があります。"
|
warning: "<strong>Misskey는 광고를 게재하지 않습니다</strong> 그러나 광고를 차단하는 기능 기능을 사용할 경우 일부 기능을 사용할 수 없게 될 가능성이나 결함이 발생하는 경우가 있습니다."
|
||||||
application-authorization: "アプリの連携"
|
application-authorization: "앱의 연계"
|
||||||
close: "閉じる"
|
close: "닫기"
|
||||||
|
got-it: "わかった"
|
||||||
customization-tips:
|
customization-tips:
|
||||||
title: "カスタマイズのヒント"
|
title: "사용자 정의 팁"
|
||||||
paragraph1: "ホームのカスタマイズでは、ウィジェットを追加/削除したり、ドラッグ&ドロップして並べ替えたりすることができます。"
|
paragraph1: "홈 정의는 위젯을 추가 / 삭제하거나 드래그 앤 드롭하여 정렬 할 수 있습니다."
|
||||||
paragraph2: "一部のウィジェットは、<strong><strong>右</strong>クリック</strong>することで表示を変更することができます。"
|
paragraph2: "일부 위젯은 <strong>오른쪽 클릭</strong> 하여 모양을 변경할 수 있습니다."
|
||||||
paragraph3: "ウィジェットを削除するには、ヘッダーの<strong>「ゴミ箱」</strong>と書かれたエリアにウィジェットをドラッグ&ドロップします。"
|
paragraph3: "위젯을 삭제하려면 헤더 <strong>\"휴지통\"</strong> 라고 쓰여진 영역으로 끌어다 놓습니다."
|
||||||
paragraph4: "カスタマイズを終了するには、右上の「完了」をクリックします。"
|
paragraph4: "사용자 정의를 종료하려면 오른쪽 상단의 '완료' 를 클릭합니다."
|
||||||
gotit: "Got it!"
|
gotit: "Got it!"
|
||||||
notification:
|
notification:
|
||||||
file-uploaded: "ファイルがアップロードされました"
|
file-uploaded: "파일이 업로드되었습니다"
|
||||||
message-from: "{}さんからメッセージ:"
|
message-from: "{}씨로부터 메시지:"
|
||||||
reversi-invited: "対局への招待があります"
|
reversi-invited: "대결에 초대되어 있습니다"
|
||||||
reversi-invited-by: "{}さんから"
|
reversi-invited-by: "{}님"
|
||||||
notified-by: "{}さんから"
|
notified-by: "{}님"
|
||||||
reply-from: "{}さんから返信:"
|
reply-from: "{}님으로부터 답글:"
|
||||||
quoted-by: "{}さんが引用:"
|
quoted-by: "{}씨가 인용:"
|
||||||
name: "Misskey"
|
name: "Misskey"
|
||||||
time:
|
time:
|
||||||
unknown: "なぞのじかん"
|
unknown: "수수께끼의 시간"
|
||||||
future: "未来"
|
future: "미래"
|
||||||
just_now: "たった今"
|
just_now: "방금"
|
||||||
seconds_ago: "{}秒前"
|
seconds_ago: "{}초전"
|
||||||
minutes_ago: "{}分前"
|
minutes_ago: "{}분전"
|
||||||
hours_ago: "{}時間前"
|
hours_ago: "{}시간전"
|
||||||
days_ago: "{}日前"
|
days_ago: "{}일전"
|
||||||
weeks_ago: "{}週間前"
|
weeks_ago: "{}주전"
|
||||||
months_ago: "{}ヶ月前"
|
months_ago: "{}개월전"
|
||||||
years_ago: "{}年前"
|
years_ago: "{}년전"
|
||||||
trash: "ゴミ箱"
|
trash: "휴지통"
|
||||||
date:
|
|
||||||
full-year: "年"
|
|
||||||
month: "月"
|
|
||||||
day: "日"
|
|
||||||
hours: "時"
|
|
||||||
minutes: "分"
|
|
||||||
weekday-short:
|
weekday-short:
|
||||||
sunday: "日"
|
sunday: "일"
|
||||||
monday: "月"
|
monday: "월"
|
||||||
tuesday: "火"
|
tuesday: "화"
|
||||||
wednesday: "水"
|
wednesday: "수"
|
||||||
thursday: "木"
|
thursday: "목"
|
||||||
friday: "金"
|
friday: "금"
|
||||||
saturday: "土"
|
saturday: "토"
|
||||||
weekday:
|
weekday:
|
||||||
sunday: "日曜日"
|
sunday: "일요일"
|
||||||
monday: "月曜日"
|
monday: "월요일"
|
||||||
tuesday: "火曜日"
|
tuesday: "화요일"
|
||||||
wednesday: "水曜日"
|
wednesday: "수요일"
|
||||||
thursday: "木曜日"
|
thursday: "목요일"
|
||||||
friday: "金曜日"
|
friday: "금요일"
|
||||||
saturday: "土曜日"
|
saturday: "토요일"
|
||||||
reactions:
|
reactions:
|
||||||
like: "いいね"
|
like: "좋네"
|
||||||
love: "しゅき"
|
love: "좋아"
|
||||||
laugh: "笑"
|
laugh: "크크"
|
||||||
hmm: "ふぅ~む"
|
hmm: "음..."
|
||||||
surprise: "わお"
|
surprise: "와우"
|
||||||
congrats: "おめでとう"
|
congrats: "받으세요"
|
||||||
angry: "おこ"
|
angry: "화냈어"
|
||||||
confused: "こまこまのこまり"
|
confused: "곤란하고 있어"
|
||||||
pudding: "Pudding"
|
pudding: "Pudding"
|
||||||
note-placeholders:
|
note-placeholders:
|
||||||
a: "今どうしてる?"
|
a: "지금 어떻게하고있어?"
|
||||||
b: "何かありましたか?"
|
b: "뭔가 있었습니까?"
|
||||||
c: "何をお考えですか?"
|
c: "무엇을 생각하십니까?"
|
||||||
d: "言いたいことは?"
|
d: "말하고 싶은 것은?"
|
||||||
e: "ここに書いてください"
|
e: "여기에 써주십시오"
|
||||||
f: "あなたが書くのを待っています..."
|
f: "당신이 쓸 것을 당신 기다리고 있습니다..."
|
||||||
search: "検索"
|
search: "검색"
|
||||||
delete: "削除"
|
delete: "삭제"
|
||||||
loading: "読み込み中"
|
loading: "로드 중"
|
||||||
ok: "わかった"
|
ok: "확인"
|
||||||
update-available-title: "更新があります"
|
update-available-title: "갱신이 있습니다"
|
||||||
update-available: "Misskeyの新しいバージョンがあります({newer}。現在{current}を利用中)。ページを再度読み込みすると更新が適用されます。"
|
update-available: "Misskey의 새로운 버전이 있습니다 ({newer} 현재 {current}을 사용 중). 페이지를 다시로드하면 업데이트가 적용됩니다."
|
||||||
my-token-regenerated: "あなたのトークンが更新されたのでサインアウトします。"
|
my-token-regenerated: "당신의 토큰이 업데이트되어 있기 때문에 로그 아웃합니다."
|
||||||
i-like-sushi: "私は(プリンよりむしろ)寿司が好き"
|
i-like-sushi: "나는(푸딩보다 오히려)스시가 좋아"
|
||||||
show-reversi-board-labels: "リバーシのボードの行と列のラベルを表示"
|
show-reversi-board-labels: "리버시 보드의 행과 열 레이블을 표시"
|
||||||
verified-user: "認証済みのユーザー"
|
verified-user: "인증 된 사용자"
|
||||||
|
disable-animated-mfm: "게시물의 문자 애니메이션을 비활성화 할"
|
||||||
reversi:
|
reversi:
|
||||||
drawn: "引き分け"
|
drawn: "무승부"
|
||||||
my-turn: "あなたのターンです"
|
my-turn: "당신의 차례입니다"
|
||||||
opponent-turn: "相手のターンです"
|
opponent-turn: "상대의 차례입니다"
|
||||||
turn-of: "{}のターンです"
|
turn-of: "{}의 차례입니다"
|
||||||
past-turn-of: "{}のターン"
|
past-turn-of: "{} 턴"
|
||||||
won: "{}の勝ち"
|
won: "{} 승리"
|
||||||
black: "黒"
|
black: "검정"
|
||||||
white: "白"
|
white: "흰색"
|
||||||
total: "合計"
|
total: "합계"
|
||||||
this-turn: "{}ターン目"
|
this-turn: "{}턴눈"
|
||||||
widgets:
|
widgets:
|
||||||
analog-clock: "アナログ時計"
|
analog-clock: "아날로그 시계"
|
||||||
profile: "プロフィール"
|
profile: "프로필"
|
||||||
calendar: "カレンダー"
|
calendar: "달력"
|
||||||
timemachine: "カレンダー(タイムマシン)"
|
timemachine: "달력(타임머신)"
|
||||||
activity: "アクティビティ"
|
activity: "활동"
|
||||||
rss: "RSSリーダー"
|
rss: "RSS 리더"
|
||||||
memo: "付箋"
|
memo: "끈끈이"
|
||||||
trends: "トレンド"
|
trends: "트렌드"
|
||||||
photo-stream: "フォトストリーム"
|
photo-stream: "포토 스트림"
|
||||||
posts-monitor: "投稿チャート"
|
posts-monitor: "게시물 차트"
|
||||||
slideshow: "スライドショー"
|
slideshow: "슬라이드 쇼"
|
||||||
version: "バージョン"
|
version: "버전"
|
||||||
broadcast: "ブロードキャスト"
|
broadcast: "브로드 캐스트"
|
||||||
notifications: "通知"
|
notifications: "통지"
|
||||||
users: "おすすめユーザー"
|
users: "추천 사용자"
|
||||||
polls: "アンケート"
|
polls: "설문"
|
||||||
post-form: "投稿フォーム"
|
post-form: "게시 양식"
|
||||||
messaging: "メッセージ"
|
messaging: "메시지"
|
||||||
server: "サーバー情報"
|
server: "서버 정보"
|
||||||
donation: "寄付のお願い"
|
donation: "기부 요청"
|
||||||
nav: "ナビゲーション"
|
nav: "네비게이션"
|
||||||
tips: "ヒント"
|
tips: "팁"
|
||||||
hashtags: "ハッシュタグ"
|
hashtags: "해시 태그"
|
||||||
deck:
|
deck:
|
||||||
widgets: "ウィジェット"
|
widgets: "ウィジェット"
|
||||||
home: "ホーム"
|
home: "ホーム"
|
||||||
@ -168,6 +164,9 @@ common/views/components/games/reversi/reversi.vue:
|
|||||||
matching:
|
matching:
|
||||||
waiting-for: "{}を待っています"
|
waiting-for: "{}を待っています"
|
||||||
cancel: "キャンセル"
|
cancel: "キャンセル"
|
||||||
|
common/views/components/games/reversi/reversi.game.vue:
|
||||||
|
surrender: "投了"
|
||||||
|
surrendered: "投了により"
|
||||||
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: "他のMisskeyユーザーとリバーシで対戦しよう"
|
||||||
@ -279,6 +278,8 @@ common/views/components/signin.vue:
|
|||||||
token: "トークン"
|
token: "トークン"
|
||||||
signing-in: "やってます..."
|
signing-in: "やってます..."
|
||||||
signin: "サインイン"
|
signin: "サインイン"
|
||||||
|
or: "または"
|
||||||
|
signin-with-twitter: "Twitterでログイン"
|
||||||
common/views/components/signup.vue:
|
common/views/components/signup.vue:
|
||||||
username: "ユーザー名"
|
username: "ユーザー名"
|
||||||
checking: "確認しています..."
|
checking: "確認しています..."
|
||||||
@ -388,6 +389,17 @@ common/views/pages/follow.vue:
|
|||||||
follow: "フォロー"
|
follow: "フォロー"
|
||||||
request-pending: "フォロー許可待ち"
|
request-pending: "フォロー許可待ち"
|
||||||
follow-request: "フォロー申請"
|
follow-request: "フォロー申請"
|
||||||
|
desktop:
|
||||||
|
banner-crop-title: "バナーとして表示する部分を選択"
|
||||||
|
banner: "バナー"
|
||||||
|
uploading-banner: "新しいバナーをアップロードしています"
|
||||||
|
banner-updated: "バナーを更新しました"
|
||||||
|
choose-banner: "バナーにする画像を選択"
|
||||||
|
avatar-crop-title: "アバターとして表示する部分を選択"
|
||||||
|
avatar: "アバター"
|
||||||
|
uploading-avatar: "新しいアバターをアップロードしています"
|
||||||
|
avatar-updated: "アバターを更新しました"
|
||||||
|
choose-avatar: "アバターにする画像を選択"
|
||||||
desktop/views/components/activity.chart.vue:
|
desktop/views/components/activity.chart.vue:
|
||||||
total: "Black ... Total"
|
total: "Black ... Total"
|
||||||
notes: "Blue ... Notes"
|
notes: "Blue ... Notes"
|
||||||
@ -746,6 +758,7 @@ desktop/views/components/received-follow-requests-window.vue:
|
|||||||
desktop/views/components/user-lists-window.vue:
|
desktop/views/components/user-lists-window.vue:
|
||||||
title: "リスト"
|
title: "リスト"
|
||||||
create-list: "リストを作成"
|
create-list: "リストを作成"
|
||||||
|
list-name: "リスト名"
|
||||||
desktop/views/components/user-preview.vue:
|
desktop/views/components/user-preview.vue:
|
||||||
notes: "投稿"
|
notes: "投稿"
|
||||||
following: "フォロー"
|
following: "フォロー"
|
||||||
@ -828,6 +841,8 @@ desktop/views/pages/user/user.profile.vue:
|
|||||||
mute: "ミュートする"
|
mute: "ミュートする"
|
||||||
muted: "ミュートしています"
|
muted: "ミュートしています"
|
||||||
unmute: "ミュート解除"
|
unmute: "ミュート解除"
|
||||||
|
push-to-a-list: "リストに追加"
|
||||||
|
list-pushed: "{user}を{list}に追加しました。"
|
||||||
desktop/views/pages/user/user.header.vue:
|
desktop/views/pages/user/user.header.vue:
|
||||||
posts: "投稿"
|
posts: "投稿"
|
||||||
following: "フォロー"
|
following: "フォロー"
|
||||||
|
127
locales/pl.yml
127
locales/pl.yml
@ -11,12 +11,13 @@ common:
|
|||||||
warning: "<strong>Misskey nie zawiera reklam</strong>, ale część funkcji może nie działać prawidłowo z włączonym blokowaniem reklam."
|
warning: "<strong>Misskey nie zawiera reklam</strong>, ale część funkcji może nie działać prawidłowo z włączonym blokowaniem reklam."
|
||||||
application-authorization: "アプリの連携"
|
application-authorization: "アプリの連携"
|
||||||
close: "Zamknij"
|
close: "Zamknij"
|
||||||
|
got-it: "わかった"
|
||||||
customization-tips:
|
customization-tips:
|
||||||
title: "Wskazówki o dostosowywaniu"
|
title: "Wskazówki o dostosowywaniu"
|
||||||
paragraph1: "Dostosowywanie strony głównej pozwala na dodawanie, usuwanie, przeciąganie i zmienianie kolejności widżetów."
|
paragraph1: "Dostosowywanie strony głównej pozwala na dodawanie, usuwanie, przeciąganie i zmienianie kolejności widżetów."
|
||||||
paragraph2: "一部のウィジェットは、<strong><strong>右</strong>クリック</strong>することで表示を変更することができます。"
|
paragraph2: "一部のウィジェットは、<strong><strong>右</strong>クリック</strong>することで表示を変更することができます。"
|
||||||
paragraph3: "ウィジェットを削除するには、ヘッダーの<strong>「ゴミ箱」</strong>と書かれたエリアにウィジェットをドラッグ&ドロップします。"
|
paragraph3: "Aby usunąć widżet, <strong>przeciągnij i upuść widżet do części nazwanej „Kosz”</strong> w nagłówku."
|
||||||
paragraph4: "カスタマイズを終了するには、右上の「完了」をクリックします。"
|
paragraph4: "Aby zakończyć dostosowywanie, naciśnij „Zakończ” w w prawym górnym rogu."
|
||||||
gotit: "Rozumiem!"
|
gotit: "Rozumiem!"
|
||||||
notification:
|
notification:
|
||||||
file-uploaded: "Wysłano plik!"
|
file-uploaded: "Wysłano plik!"
|
||||||
@ -39,12 +40,6 @@ common:
|
|||||||
months_ago: "{} mies. temu"
|
months_ago: "{} mies. temu"
|
||||||
years_ago: "{} lat temu"
|
years_ago: "{} lat temu"
|
||||||
trash: "Kosz"
|
trash: "Kosz"
|
||||||
date:
|
|
||||||
full-year: "Rok"
|
|
||||||
month: "Miesiąc"
|
|
||||||
day: "Dzień"
|
|
||||||
hours: "Godzina"
|
|
||||||
minutes: "Minuty"
|
|
||||||
weekday-short:
|
weekday-short:
|
||||||
sunday: "N"
|
sunday: "N"
|
||||||
monday: "Pn"
|
monday: "Pn"
|
||||||
@ -88,6 +83,7 @@ common:
|
|||||||
i-like-sushi: "Wolę sushi od puddingu"
|
i-like-sushi: "Wolę sushi od puddingu"
|
||||||
show-reversi-board-labels: "Pokazuj podpisy wierszy i kolumn w Reversi"
|
show-reversi-board-labels: "Pokazuj podpisy wierszy i kolumn w Reversi"
|
||||||
verified-user: "Zweryfikowany użytkownik"
|
verified-user: "Zweryfikowany użytkownik"
|
||||||
|
disable-animated-mfm: "Wyłącz animowany tekst we wpisach"
|
||||||
reversi:
|
reversi:
|
||||||
drawn: "Remis"
|
drawn: "Remis"
|
||||||
my-turn: "Twoja kolej"
|
my-turn: "Twoja kolej"
|
||||||
@ -141,55 +137,58 @@ common:
|
|||||||
stack-left: "Przypnij do lewej"
|
stack-left: "Przypnij do lewej"
|
||||||
pop-right: "Odepnij w prawo"
|
pop-right: "Odepnij w prawo"
|
||||||
auth/views/form.vue:
|
auth/views/form.vue:
|
||||||
share-access: "<i>{{ app.name }}</i>があなたのアカウントにアクセスすることを<b>許可</b>しますか?"
|
share-access: "Czy chcesz <b>zezwolić</b> <i>{{ app.name }}</i> na dostęp do Twojego konta?"
|
||||||
permission-ask: "このアプリは次の権限を要求しています:"
|
permission-ask: "Ta aplikacja wymaga następujących uprawnień:"
|
||||||
account-read: "アカウントの情報を見る。"
|
account-read: "Wyświetlanie informacji o koncie:"
|
||||||
account-write: "アカウントの情報を操作する。"
|
account-write: "Modyfikowanie informacji o koncie:"
|
||||||
note-write: "投稿する。"
|
note-write: "Publikacja."
|
||||||
like-write: "いいねしたりいいね解除する。"
|
like-write: "Reagowanie na wpisy."
|
||||||
following-write: "フォローしたりフォロー解除する。"
|
following-write: "Śledzenie i cofanie śledzenia."
|
||||||
drive-read: "ドライブを見る。"
|
drive-read: "Odczytywanie Twojego dysku."
|
||||||
drive-write: "ドライブを操作する。"
|
drive-write: "Wysyłanie i usuwanie plików na Twoim dysku."
|
||||||
notification-read: "通知を見る。"
|
notification-read: "Odczytywanie Twoich powiadomień."
|
||||||
notification-write: "通知を操作する。"
|
notification-write: "Zarządzanie Twoimi powiadomieniami."
|
||||||
cancel: "キャンセル"
|
cancel: "Anuluj"
|
||||||
accept: "アクセスを許可"
|
accept: "Przyznaj dostęp."
|
||||||
auth/views/index.vue:
|
auth/views/index.vue:
|
||||||
loading: "読み込み中"
|
loading: "Ładowanie"
|
||||||
denied: "アプリケーションの連携をキャンセルしました。"
|
denied: "Odrzucono uwierzytelnianie aplikacji."
|
||||||
denied-paragraph: "このアプリがあなたのアカウントにアクセスすることはありません。"
|
denied-paragraph: "Ta aplikacja nie uzyska dostępu do Twojego konta."
|
||||||
already-authorized: "このアプリは既に連携済みです"
|
already-authorized: "Ta aplikacja została już uwierzytelniona."
|
||||||
allowed: "アプリケーションの連携を許可しました"
|
allowed: "アプリケーションの連携を許可しました"
|
||||||
callback-url: "アプリケーションに戻っています"
|
callback-url: "Powracam do aplikacji."
|
||||||
please-go-back: "アプリケーションに戻って、やっていってください。"
|
please-go-back: "Wróć do aplikacji."
|
||||||
error: "セッションが存在しません。"
|
error: "Sesja nie istnieje."
|
||||||
sign-in: "サインインしてください"
|
sign-in: "Proszę zalogować się."
|
||||||
common/views/components/games/reversi/reversi.vue:
|
common/views/components/games/reversi/reversi.vue:
|
||||||
matching:
|
matching:
|
||||||
waiting-for: "{}を待っています"
|
waiting-for: "Oczekiwanie na {}"
|
||||||
cancel: "キャンセル"
|
cancel: "Anuluj"
|
||||||
|
common/views/components/games/reversi/reversi.game.vue:
|
||||||
|
surrender: "投了"
|
||||||
|
surrendered: "投了により"
|
||||||
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: "Zagraj w Reversi ze znajomymi!"
|
||||||
invite: "招待"
|
invite: "Zaproś"
|
||||||
rule: "遊び方"
|
rule: "Jak grać"
|
||||||
rule-desc: "リバーシは、相手と交互に石をボードに置いて、相手の石を挟んで自分の色に変えてゆき、最終的に残った石が多い方が勝ちというボードゲームです。"
|
rule-desc: "リバーシは、相手と交互に石をボードに置いて、相手の石を挟んで自分の色に変えてゆき、最終的に残った石が多い方が勝ちというボードゲームです。"
|
||||||
mode-invite: "招待"
|
mode-invite: "Zaproś"
|
||||||
mode-invite-desc: "指定したユーザーと対戦するモードです。"
|
mode-invite-desc: "Zaproś użytkownika do gry."
|
||||||
invitations: "対局の招待があります!"
|
invitations: "Otrzymałeś(-aś) zaproszenie!"
|
||||||
my-games: "自分の対局"
|
my-games: "Moje gry"
|
||||||
all-games: "みんなの対局"
|
all-games: "Wszystkie gry"
|
||||||
enter-username: "ユーザー名を入力してください"
|
enter-username: "Wprowadź nazwę użytkownika"
|
||||||
game-state:
|
game-state:
|
||||||
ended: "終了"
|
ended: "Zakończono"
|
||||||
playing: "進行中"
|
playing: "W trakcie"
|
||||||
common/views/components/games/reversi/reversi.room.vue:
|
common/views/components/games/reversi/reversi.room.vue:
|
||||||
settings-of-the-game: "ゲームの設定"
|
settings-of-the-game: "Ustawienia gry"
|
||||||
choose-map: "マップを選択"
|
choose-map: "Wybierz mapę"
|
||||||
random: "ランダム"
|
random: "Losowy"
|
||||||
black-or-white: "先手/後手"
|
black-or-white: "Czarny/biały"
|
||||||
black-is: "{}が黒"
|
black-is: "{}が黒"
|
||||||
rules: "ルール"
|
rules: "Zasady"
|
||||||
is-llotheo: "石の少ない方が勝ち(ロセオ)"
|
is-llotheo: "石の少ない方が勝ち(ロセオ)"
|
||||||
looped-map: "ループマップ"
|
looped-map: "ループマップ"
|
||||||
can-put-everywhere: "どこでも置けるモード"
|
can-put-everywhere: "どこでも置けるモード"
|
||||||
@ -279,6 +278,8 @@ common/views/components/signin.vue:
|
|||||||
token: "Token"
|
token: "Token"
|
||||||
signing-in: "Logowanie…"
|
signing-in: "Logowanie…"
|
||||||
signin: "Zaloguj"
|
signin: "Zaloguj"
|
||||||
|
or: "または"
|
||||||
|
signin-with-twitter: "Twitterでログイン"
|
||||||
common/views/components/signup.vue:
|
common/views/components/signup.vue:
|
||||||
username: "Nazwa użytkownika"
|
username: "Nazwa użytkownika"
|
||||||
checking: "Sprawdzanie…"
|
checking: "Sprawdzanie…"
|
||||||
@ -362,23 +363,23 @@ common/views/widgets/slideshow.vue:
|
|||||||
folder: "Naciśnij i wybierz folder"
|
folder: "Naciśnij i wybierz folder"
|
||||||
no-image: "Brak obrazu w tym folderze"
|
no-image: "Brak obrazu w tym folderze"
|
||||||
common/views/widgets/tips.vue:
|
common/views/widgets/tips.vue:
|
||||||
tips-line1: "<kbd>t</kbd>でタイムラインにフォーカスできます"
|
tips-line1: "Możesz przejść do osi czasu używając <kbd>t</kbd>."
|
||||||
tips-line2: "<kbd>p</kbd>または<kbd>n</kbd>で投稿フォームを開きます"
|
tips-line2: "Otwórz formularz nowego wpisu używając <kbd>p</kbd> lub <kbd>n</kbd>."
|
||||||
tips-line3: "投稿フォームにはファイルをドラッグ&ドロップできます"
|
tips-line3: "Możesz przeciągnąć i upuścić pliki w formularzu wpisu."
|
||||||
tips-line4: "投稿フォームにクリップボードにある画像データをペーストできます"
|
tips-line4: "投稿フォームにクリップボードにある画像データをペーストできます"
|
||||||
tips-line5: "ドライブにファイルをドラッグ&ドロップしてアップロードできます"
|
tips-line5: "Możesz wysłać pliki przeciągając i upuszczając je w Dysku."
|
||||||
tips-line6: "ドライブでファイルをドラッグしてフォルダ移動できます"
|
tips-line6: "Możesz przenieść katalog przeciągając go w Dysku."
|
||||||
tips-line7: "ドライブでフォルダをドラッグしてフォルダ移動できます"
|
tips-line7: "ドライブでフォルダをドラッグしてフォルダ移動できます"
|
||||||
tips-line8: "Strona główna może zostać dostosowana w ustawieniach."
|
tips-line8: "Strona główna może zostać dostosowana w ustawieniach."
|
||||||
tips-line9: "Misskey jest dostępny na licencji AGPLv3."
|
tips-line9: "Misskey jest dostępny na licencji AGPLv3."
|
||||||
tips-line10: "タイムマシンウィジェットを利用すると、簡単に過去のタイムラインに遡れます"
|
tips-line10: "タイムマシンウィジェットを利用すると、簡単に過去のタイムラインに遡れます"
|
||||||
tips-line11: "投稿の ... をクリックして、投稿をユーザーページにピン留めできます"
|
tips-line11: "Możesz przypiąć wpis na stronie użytkownika klikając na „…”"
|
||||||
tips-line13: "投稿に添付したファイルは全てドライブに保存されます"
|
tips-line13: "投稿に添付したファイルは全てドライブに保存されます"
|
||||||
tips-line14: "ホームのカスタマイズ中、ウィジェットを右クリックしてデザインを変更できます"
|
tips-line14: "ホームのカスタマイズ中、ウィジェットを右クリックしてデザインを変更できます"
|
||||||
tips-line17: "「**」でテキストを囲むと**強調表示**されます"
|
tips-line17: "Oznaczenie tekstu **w ten sposób** wyróżni go."
|
||||||
tips-line19: "いくつかのウィンドウはブラウザの外に切り離すことができます"
|
tips-line19: "Część okien może zostać odłączona z przeglądarki."
|
||||||
tips-line20: "カレンダーウィジェットのパーセンテージは、経過の割合を示しています"
|
tips-line20: "カレンダーウィジェットのパーセンテージは、経過の割合を示しています"
|
||||||
tips-line21: "APIを利用してbotの開発なども行えます"
|
tips-line21: "Możesz też używać API, aby tworzyć boty."
|
||||||
tips-line23: "まゆかわいいよまゆ"
|
tips-line23: "まゆかわいいよまゆ"
|
||||||
tips-line24: "Misskey zaczął działać w 2014."
|
tips-line24: "Misskey zaczął działać w 2014."
|
||||||
tips-line25: "Możesz otrzymywać powiadomienia nawet jeżeli Misskey nie jest otwarty w obsługiwanej przeglądarce."
|
tips-line25: "Możesz otrzymywać powiadomienia nawet jeżeli Misskey nie jest otwarty w obsługiwanej przeglądarce."
|
||||||
@ -388,6 +389,17 @@ common/views/pages/follow.vue:
|
|||||||
follow: "Śledź"
|
follow: "Śledź"
|
||||||
request-pending: "Oczekiwanie na pozwolenie"
|
request-pending: "Oczekiwanie na pozwolenie"
|
||||||
follow-request: "Poproś o śledzenie"
|
follow-request: "Poproś o śledzenie"
|
||||||
|
desktop:
|
||||||
|
banner-crop-title: "バナーとして表示する部分を選択"
|
||||||
|
banner: "バナー"
|
||||||
|
uploading-banner: "新しいバナーをアップロードしています"
|
||||||
|
banner-updated: "バナーを更新しました"
|
||||||
|
choose-banner: "バナーにする画像を選択"
|
||||||
|
avatar-crop-title: "アバターとして表示する部分を選択"
|
||||||
|
avatar: "アバター"
|
||||||
|
uploading-avatar: "新しいアバターをアップロードしています"
|
||||||
|
avatar-updated: "アバターを更新しました"
|
||||||
|
choose-avatar: "アバターにする画像を選択"
|
||||||
desktop/views/components/activity.chart.vue:
|
desktop/views/components/activity.chart.vue:
|
||||||
total: "Czarny … Łącznie"
|
total: "Czarny … Łącznie"
|
||||||
notes: "Niebieski … Wpisy"
|
notes: "Niebieski … Wpisy"
|
||||||
@ -746,6 +758,7 @@ desktop/views/components/received-follow-requests-window.vue:
|
|||||||
desktop/views/components/user-lists-window.vue:
|
desktop/views/components/user-lists-window.vue:
|
||||||
title: "Listy"
|
title: "Listy"
|
||||||
create-list: "Utwórz listę"
|
create-list: "Utwórz listę"
|
||||||
|
list-name: "リスト名"
|
||||||
desktop/views/components/user-preview.vue:
|
desktop/views/components/user-preview.vue:
|
||||||
notes: "Wpisy"
|
notes: "Wpisy"
|
||||||
following: "Śledzeni"
|
following: "Śledzeni"
|
||||||
@ -828,6 +841,8 @@ desktop/views/pages/user/user.profile.vue:
|
|||||||
mute: "Wycisz"
|
mute: "Wycisz"
|
||||||
muted: "Wyciszyłeś"
|
muted: "Wyciszyłeś"
|
||||||
unmute: "Cofnij wyciszenie"
|
unmute: "Cofnij wyciszenie"
|
||||||
|
push-to-a-list: "リストに追加"
|
||||||
|
list-pushed: "{user}を{list}に追加しました。"
|
||||||
desktop/views/pages/user/user.header.vue:
|
desktop/views/pages/user/user.header.vue:
|
||||||
posts: "Wpisy"
|
posts: "Wpisy"
|
||||||
following: "Śledzeni"
|
following: "Śledzeni"
|
||||||
|
@ -11,6 +11,7 @@ common:
|
|||||||
warning: "<strong>Misskeyは広告を掲載していません</strong>が、広告をブロックする機能が有効だと一部の機能が利用できなかったり、不具合が発生する場合があります。"
|
warning: "<strong>Misskeyは広告を掲載していません</strong>が、広告をブロックする機能が有効だと一部の機能が利用できなかったり、不具合が発生する場合があります。"
|
||||||
application-authorization: "アプリの連携"
|
application-authorization: "アプリの連携"
|
||||||
close: "閉じる"
|
close: "閉じる"
|
||||||
|
got-it: "わかった"
|
||||||
customization-tips:
|
customization-tips:
|
||||||
title: "カスタマイズのヒント"
|
title: "カスタマイズのヒント"
|
||||||
paragraph1: "ホームのカスタマイズでは、ウィジェットを追加/削除したり、ドラッグ&ドロップして並べ替えたりすることができます。"
|
paragraph1: "ホームのカスタマイズでは、ウィジェットを追加/削除したり、ドラッグ&ドロップして並べ替えたりすることができます。"
|
||||||
@ -39,12 +40,6 @@ common:
|
|||||||
months_ago: "{}ヶ月前"
|
months_ago: "{}ヶ月前"
|
||||||
years_ago: "{}年前"
|
years_ago: "{}年前"
|
||||||
trash: "ゴミ箱"
|
trash: "ゴミ箱"
|
||||||
date:
|
|
||||||
full-year: "年"
|
|
||||||
month: "月"
|
|
||||||
day: "日"
|
|
||||||
hours: "時"
|
|
||||||
minutes: "分"
|
|
||||||
weekday-short:
|
weekday-short:
|
||||||
sunday: "日"
|
sunday: "日"
|
||||||
monday: "月"
|
monday: "月"
|
||||||
@ -88,6 +83,7 @@ common:
|
|||||||
i-like-sushi: "私は(プリンよりむしろ)寿司が好き"
|
i-like-sushi: "私は(プリンよりむしろ)寿司が好き"
|
||||||
show-reversi-board-labels: "リバーシのボードの行と列のラベルを表示"
|
show-reversi-board-labels: "リバーシのボードの行と列のラベルを表示"
|
||||||
verified-user: "認証済みのユーザー"
|
verified-user: "認証済みのユーザー"
|
||||||
|
disable-animated-mfm: "投稿内の動きのあるテキストを無効にする"
|
||||||
reversi:
|
reversi:
|
||||||
drawn: "引き分け"
|
drawn: "引き分け"
|
||||||
my-turn: "あなたのターンです"
|
my-turn: "あなたのターンです"
|
||||||
@ -168,6 +164,9 @@ common/views/components/games/reversi/reversi.vue:
|
|||||||
matching:
|
matching:
|
||||||
waiting-for: "{}を待っています"
|
waiting-for: "{}を待っています"
|
||||||
cancel: "キャンセル"
|
cancel: "キャンセル"
|
||||||
|
common/views/components/games/reversi/reversi.game.vue:
|
||||||
|
surrender: "投了"
|
||||||
|
surrendered: "投了により"
|
||||||
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: "他のMisskeyユーザーとリバーシで対戦しよう"
|
||||||
@ -279,6 +278,8 @@ common/views/components/signin.vue:
|
|||||||
token: "トークン"
|
token: "トークン"
|
||||||
signing-in: "やってます..."
|
signing-in: "やってます..."
|
||||||
signin: "サインイン"
|
signin: "サインイン"
|
||||||
|
or: "または"
|
||||||
|
signin-with-twitter: "Twitterでログイン"
|
||||||
common/views/components/signup.vue:
|
common/views/components/signup.vue:
|
||||||
username: "ユーザー名"
|
username: "ユーザー名"
|
||||||
checking: "確認しています..."
|
checking: "確認しています..."
|
||||||
@ -388,6 +389,17 @@ common/views/pages/follow.vue:
|
|||||||
follow: "フォロー"
|
follow: "フォロー"
|
||||||
request-pending: "フォロー許可待ち"
|
request-pending: "フォロー許可待ち"
|
||||||
follow-request: "フォロー申請"
|
follow-request: "フォロー申請"
|
||||||
|
desktop:
|
||||||
|
banner-crop-title: "バナーとして表示する部分を選択"
|
||||||
|
banner: "バナー"
|
||||||
|
uploading-banner: "新しいバナーをアップロードしています"
|
||||||
|
banner-updated: "バナーを更新しました"
|
||||||
|
choose-banner: "バナーにする画像を選択"
|
||||||
|
avatar-crop-title: "アバターとして表示する部分を選択"
|
||||||
|
avatar: "アバター"
|
||||||
|
uploading-avatar: "新しいアバターをアップロードしています"
|
||||||
|
avatar-updated: "アバターを更新しました"
|
||||||
|
choose-avatar: "アバターにする画像を選択"
|
||||||
desktop/views/components/activity.chart.vue:
|
desktop/views/components/activity.chart.vue:
|
||||||
total: "Black ... Total"
|
total: "Black ... Total"
|
||||||
notes: "Blue ... Notes"
|
notes: "Blue ... Notes"
|
||||||
@ -746,6 +758,7 @@ desktop/views/components/received-follow-requests-window.vue:
|
|||||||
desktop/views/components/user-lists-window.vue:
|
desktop/views/components/user-lists-window.vue:
|
||||||
title: "リスト"
|
title: "リスト"
|
||||||
create-list: "リストを作成"
|
create-list: "リストを作成"
|
||||||
|
list-name: "リスト名"
|
||||||
desktop/views/components/user-preview.vue:
|
desktop/views/components/user-preview.vue:
|
||||||
notes: "投稿"
|
notes: "投稿"
|
||||||
following: "フォロー"
|
following: "フォロー"
|
||||||
@ -828,6 +841,8 @@ desktop/views/pages/user/user.profile.vue:
|
|||||||
mute: "ミュートする"
|
mute: "ミュートする"
|
||||||
muted: "ミュートしています"
|
muted: "ミュートしています"
|
||||||
unmute: "ミュート解除"
|
unmute: "ミュート解除"
|
||||||
|
push-to-a-list: "リストに追加"
|
||||||
|
list-pushed: "{user}を{list}に追加しました。"
|
||||||
desktop/views/pages/user/user.header.vue:
|
desktop/views/pages/user/user.header.vue:
|
||||||
posts: "投稿"
|
posts: "投稿"
|
||||||
following: "フォロー"
|
following: "フォロー"
|
||||||
|
@ -11,6 +11,7 @@ common:
|
|||||||
warning: "<strong>Misskeyは広告を掲載していません</strong>が、広告をブロックする機能が有効だと一部の機能が利用できなかったり、不具合が発生する場合があります。"
|
warning: "<strong>Misskeyは広告を掲載していません</strong>が、広告をブロックする機能が有効だと一部の機能が利用できなかったり、不具合が発生する場合があります。"
|
||||||
application-authorization: "アプリの連携"
|
application-authorization: "アプリの連携"
|
||||||
close: "閉じる"
|
close: "閉じる"
|
||||||
|
got-it: "わかった"
|
||||||
customization-tips:
|
customization-tips:
|
||||||
title: "カスタマイズのヒント"
|
title: "カスタマイズのヒント"
|
||||||
paragraph1: "ホームのカスタマイズでは、ウィジェットを追加/削除したり、ドラッグ&ドロップして並べ替えたりすることができます。"
|
paragraph1: "ホームのカスタマイズでは、ウィジェットを追加/削除したり、ドラッグ&ドロップして並べ替えたりすることができます。"
|
||||||
@ -39,12 +40,6 @@ common:
|
|||||||
months_ago: "{}ヶ月前"
|
months_ago: "{}ヶ月前"
|
||||||
years_ago: "{}年前"
|
years_ago: "{}年前"
|
||||||
trash: "ゴミ箱"
|
trash: "ゴミ箱"
|
||||||
date:
|
|
||||||
full-year: "年"
|
|
||||||
month: "月"
|
|
||||||
day: "日"
|
|
||||||
hours: "時"
|
|
||||||
minutes: "分"
|
|
||||||
weekday-short:
|
weekday-short:
|
||||||
sunday: "日"
|
sunday: "日"
|
||||||
monday: "月"
|
monday: "月"
|
||||||
@ -88,6 +83,7 @@ common:
|
|||||||
i-like-sushi: "私は(プリンよりむしろ)寿司が好き"
|
i-like-sushi: "私は(プリンよりむしろ)寿司が好き"
|
||||||
show-reversi-board-labels: "リバーシのボードの行と列のラベルを表示"
|
show-reversi-board-labels: "リバーシのボードの行と列のラベルを表示"
|
||||||
verified-user: "認証済みのユーザー"
|
verified-user: "認証済みのユーザー"
|
||||||
|
disable-animated-mfm: "投稿内の動きのあるテキストを無効にする"
|
||||||
reversi:
|
reversi:
|
||||||
drawn: "引き分け"
|
drawn: "引き分け"
|
||||||
my-turn: "あなたのターンです"
|
my-turn: "あなたのターンです"
|
||||||
@ -168,6 +164,9 @@ common/views/components/games/reversi/reversi.vue:
|
|||||||
matching:
|
matching:
|
||||||
waiting-for: "{}を待っています"
|
waiting-for: "{}を待っています"
|
||||||
cancel: "キャンセル"
|
cancel: "キャンセル"
|
||||||
|
common/views/components/games/reversi/reversi.game.vue:
|
||||||
|
surrender: "投了"
|
||||||
|
surrendered: "投了により"
|
||||||
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: "他のMisskeyユーザーとリバーシで対戦しよう"
|
||||||
@ -279,6 +278,8 @@ common/views/components/signin.vue:
|
|||||||
token: "トークン"
|
token: "トークン"
|
||||||
signing-in: "やってます..."
|
signing-in: "やってます..."
|
||||||
signin: "サインイン"
|
signin: "サインイン"
|
||||||
|
or: "または"
|
||||||
|
signin-with-twitter: "Twitterでログイン"
|
||||||
common/views/components/signup.vue:
|
common/views/components/signup.vue:
|
||||||
username: "ユーザー名"
|
username: "ユーザー名"
|
||||||
checking: "確認しています..."
|
checking: "確認しています..."
|
||||||
@ -388,6 +389,17 @@ common/views/pages/follow.vue:
|
|||||||
follow: "フォロー"
|
follow: "フォロー"
|
||||||
request-pending: "フォロー許可待ち"
|
request-pending: "フォロー許可待ち"
|
||||||
follow-request: "フォロー申請"
|
follow-request: "フォロー申請"
|
||||||
|
desktop:
|
||||||
|
banner-crop-title: "バナーとして表示する部分を選択"
|
||||||
|
banner: "バナー"
|
||||||
|
uploading-banner: "新しいバナーをアップロードしています"
|
||||||
|
banner-updated: "バナーを更新しました"
|
||||||
|
choose-banner: "バナーにする画像を選択"
|
||||||
|
avatar-crop-title: "アバターとして表示する部分を選択"
|
||||||
|
avatar: "アバター"
|
||||||
|
uploading-avatar: "新しいアバターをアップロードしています"
|
||||||
|
avatar-updated: "アバターを更新しました"
|
||||||
|
choose-avatar: "アバターにする画像を選択"
|
||||||
desktop/views/components/activity.chart.vue:
|
desktop/views/components/activity.chart.vue:
|
||||||
total: "Black ... Total"
|
total: "Black ... Total"
|
||||||
notes: "Blue ... Notes"
|
notes: "Blue ... Notes"
|
||||||
@ -746,6 +758,7 @@ desktop/views/components/received-follow-requests-window.vue:
|
|||||||
desktop/views/components/user-lists-window.vue:
|
desktop/views/components/user-lists-window.vue:
|
||||||
title: "リスト"
|
title: "リスト"
|
||||||
create-list: "リストを作成"
|
create-list: "リストを作成"
|
||||||
|
list-name: "リスト名"
|
||||||
desktop/views/components/user-preview.vue:
|
desktop/views/components/user-preview.vue:
|
||||||
notes: "投稿"
|
notes: "投稿"
|
||||||
following: "フォロー"
|
following: "フォロー"
|
||||||
@ -828,6 +841,8 @@ desktop/views/pages/user/user.profile.vue:
|
|||||||
mute: "ミュートする"
|
mute: "ミュートする"
|
||||||
muted: "ミュートしています"
|
muted: "ミュートしています"
|
||||||
unmute: "ミュート解除"
|
unmute: "ミュート解除"
|
||||||
|
push-to-a-list: "リストに追加"
|
||||||
|
list-pushed: "{user}を{list}に追加しました。"
|
||||||
desktop/views/pages/user/user.header.vue:
|
desktop/views/pages/user/user.header.vue:
|
||||||
posts: "投稿"
|
posts: "投稿"
|
||||||
following: "フォロー"
|
following: "フォロー"
|
||||||
|
@ -11,6 +11,7 @@ common:
|
|||||||
warning: "<strong>Misskeyは広告を掲載していません</strong>が、広告をブロックする機能が有効だと一部の機能が利用できなかったり、不具合が発生する場合があります。"
|
warning: "<strong>Misskeyは広告を掲載していません</strong>が、広告をブロックする機能が有効だと一部の機能が利用できなかったり、不具合が発生する場合があります。"
|
||||||
application-authorization: "アプリの連携"
|
application-authorization: "アプリの連携"
|
||||||
close: "閉じる"
|
close: "閉じる"
|
||||||
|
got-it: "わかった"
|
||||||
customization-tips:
|
customization-tips:
|
||||||
title: "カスタマイズのヒント"
|
title: "カスタマイズのヒント"
|
||||||
paragraph1: "ホームのカスタマイズでは、ウィジェットを追加/削除したり、ドラッグ&ドロップして並べ替えたりすることができます。"
|
paragraph1: "ホームのカスタマイズでは、ウィジェットを追加/削除したり、ドラッグ&ドロップして並べ替えたりすることができます。"
|
||||||
@ -39,12 +40,6 @@ common:
|
|||||||
months_ago: "{}ヶ月前"
|
months_ago: "{}ヶ月前"
|
||||||
years_ago: "{}年前"
|
years_ago: "{}年前"
|
||||||
trash: "ゴミ箱"
|
trash: "ゴミ箱"
|
||||||
date:
|
|
||||||
full-year: "年"
|
|
||||||
month: "月"
|
|
||||||
day: "日"
|
|
||||||
hours: "時"
|
|
||||||
minutes: "分"
|
|
||||||
weekday-short:
|
weekday-short:
|
||||||
sunday: "日"
|
sunday: "日"
|
||||||
monday: "月"
|
monday: "月"
|
||||||
@ -88,6 +83,7 @@ common:
|
|||||||
i-like-sushi: "私は(プリンよりむしろ)寿司が好き"
|
i-like-sushi: "私は(プリンよりむしろ)寿司が好き"
|
||||||
show-reversi-board-labels: "リバーシのボードの行と列のラベルを表示"
|
show-reversi-board-labels: "リバーシのボードの行と列のラベルを表示"
|
||||||
verified-user: "認証済みのユーザー"
|
verified-user: "認証済みのユーザー"
|
||||||
|
disable-animated-mfm: "投稿内の動きのあるテキストを無効にする"
|
||||||
reversi:
|
reversi:
|
||||||
drawn: "引き分け"
|
drawn: "引き分け"
|
||||||
my-turn: "あなたのターンです"
|
my-turn: "あなたのターンです"
|
||||||
@ -168,6 +164,9 @@ common/views/components/games/reversi/reversi.vue:
|
|||||||
matching:
|
matching:
|
||||||
waiting-for: "{}を待っています"
|
waiting-for: "{}を待っています"
|
||||||
cancel: "キャンセル"
|
cancel: "キャンセル"
|
||||||
|
common/views/components/games/reversi/reversi.game.vue:
|
||||||
|
surrender: "投了"
|
||||||
|
surrendered: "投了により"
|
||||||
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: "他のMisskeyユーザーとリバーシで対戦しよう"
|
||||||
@ -279,6 +278,8 @@ common/views/components/signin.vue:
|
|||||||
token: "トークン"
|
token: "トークン"
|
||||||
signing-in: "やってます..."
|
signing-in: "やってます..."
|
||||||
signin: "サインイン"
|
signin: "サインイン"
|
||||||
|
or: "または"
|
||||||
|
signin-with-twitter: "Twitterでログイン"
|
||||||
common/views/components/signup.vue:
|
common/views/components/signup.vue:
|
||||||
username: "ユーザー名"
|
username: "ユーザー名"
|
||||||
checking: "確認しています..."
|
checking: "確認しています..."
|
||||||
@ -388,6 +389,17 @@ common/views/pages/follow.vue:
|
|||||||
follow: "フォロー"
|
follow: "フォロー"
|
||||||
request-pending: "フォロー許可待ち"
|
request-pending: "フォロー許可待ち"
|
||||||
follow-request: "フォロー申請"
|
follow-request: "フォロー申請"
|
||||||
|
desktop:
|
||||||
|
banner-crop-title: "バナーとして表示する部分を選択"
|
||||||
|
banner: "バナー"
|
||||||
|
uploading-banner: "新しいバナーをアップロードしています"
|
||||||
|
banner-updated: "バナーを更新しました"
|
||||||
|
choose-banner: "バナーにする画像を選択"
|
||||||
|
avatar-crop-title: "アバターとして表示する部分を選択"
|
||||||
|
avatar: "アバター"
|
||||||
|
uploading-avatar: "新しいアバターをアップロードしています"
|
||||||
|
avatar-updated: "アバターを更新しました"
|
||||||
|
choose-avatar: "アバターにする画像を選択"
|
||||||
desktop/views/components/activity.chart.vue:
|
desktop/views/components/activity.chart.vue:
|
||||||
total: "Black ... Total"
|
total: "Black ... Total"
|
||||||
notes: "Blue ... Notes"
|
notes: "Blue ... Notes"
|
||||||
@ -746,6 +758,7 @@ desktop/views/components/received-follow-requests-window.vue:
|
|||||||
desktop/views/components/user-lists-window.vue:
|
desktop/views/components/user-lists-window.vue:
|
||||||
title: "リスト"
|
title: "リスト"
|
||||||
create-list: "リストを作成"
|
create-list: "リストを作成"
|
||||||
|
list-name: "リスト名"
|
||||||
desktop/views/components/user-preview.vue:
|
desktop/views/components/user-preview.vue:
|
||||||
notes: "投稿"
|
notes: "投稿"
|
||||||
following: "フォロー"
|
following: "フォロー"
|
||||||
@ -828,6 +841,8 @@ desktop/views/pages/user/user.profile.vue:
|
|||||||
mute: "ミュートする"
|
mute: "ミュートする"
|
||||||
muted: "ミュートしています"
|
muted: "ミュートしています"
|
||||||
unmute: "ミュート解除"
|
unmute: "ミュート解除"
|
||||||
|
push-to-a-list: "リストに追加"
|
||||||
|
list-pushed: "{user}を{list}に追加しました。"
|
||||||
desktop/views/pages/user/user.header.vue:
|
desktop/views/pages/user/user.header.vue:
|
||||||
posts: "投稿"
|
posts: "投稿"
|
||||||
following: "フォロー"
|
following: "フォロー"
|
||||||
|
19
package.json
19
package.json
@ -1,8 +1,8 @@
|
|||||||
{
|
{
|
||||||
"name": "misskey",
|
"name": "misskey",
|
||||||
"author": "syuilo <i@syuilo.com>",
|
"author": "syuilo <i@syuilo.com>",
|
||||||
"version": "5.13.0",
|
"version": "5.19.0",
|
||||||
"clientVersion": "1.0.7963",
|
"clientVersion": "1.0.8052",
|
||||||
"codename": "nighthike",
|
"codename": "nighthike",
|
||||||
"main": "./built/index.js",
|
"main": "./built/index.js",
|
||||||
"private": true,
|
"private": true,
|
||||||
@ -59,7 +59,7 @@
|
|||||||
"@types/mocha": "5.2.3",
|
"@types/mocha": "5.2.3",
|
||||||
"@types/mongodb": "3.1.3",
|
"@types/mongodb": "3.1.3",
|
||||||
"@types/ms": "0.7.30",
|
"@types/ms": "0.7.30",
|
||||||
"@types/node": "10.5.5",
|
"@types/node": "10.5.7",
|
||||||
"@types/portscanner": "2.1.0",
|
"@types/portscanner": "2.1.0",
|
||||||
"@types/pug": "2.0.4",
|
"@types/pug": "2.0.4",
|
||||||
"@types/qrcode": "1.2.0",
|
"@types/qrcode": "1.2.0",
|
||||||
@ -88,7 +88,7 @@
|
|||||||
"bootstrap-vue": "2.0.0-rc.11",
|
"bootstrap-vue": "2.0.0-rc.11",
|
||||||
"cafy": "11.3.0",
|
"cafy": "11.3.0",
|
||||||
"chalk": "2.4.1",
|
"chalk": "2.4.1",
|
||||||
"commander": "2.16.0",
|
"commander": "2.17.1",
|
||||||
"crc-32": "1.2.0",
|
"crc-32": "1.2.0",
|
||||||
"css-loader": "1.0.0",
|
"css-loader": "1.0.0",
|
||||||
"dateformat": "3.0.3",
|
"dateformat": "3.0.3",
|
||||||
@ -183,11 +183,12 @@
|
|||||||
"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",
|
||||||
"style-loader": "0.21.0",
|
"stringz": "1.0.0",
|
||||||
|
"style-loader": "0.22.1",
|
||||||
"stylus": "0.54.5",
|
"stylus": "0.54.5",
|
||||||
"stylus-loader": "3.0.2",
|
"stylus-loader": "3.0.2",
|
||||||
"summaly": "2.0.6",
|
"summaly": "2.0.6",
|
||||||
"systeminformation": "3.42.8",
|
"systeminformation": "3.42.9",
|
||||||
"syuilo-password-strength": "0.0.1",
|
"syuilo-password-strength": "0.0.1",
|
||||||
"textarea-caret": "3.1.0",
|
"textarea-caret": "3.1.0",
|
||||||
"tmp": "0.0.33",
|
"tmp": "0.0.33",
|
||||||
@ -195,7 +196,7 @@
|
|||||||
"ts-node": "7.0.0",
|
"ts-node": "7.0.0",
|
||||||
"tslint": "5.10.0",
|
"tslint": "5.10.0",
|
||||||
"typescript": "2.9.2",
|
"typescript": "2.9.2",
|
||||||
"typescript-eslint-parser": "17.0.1",
|
"typescript-eslint-parser": "18.0.0",
|
||||||
"uglify-es": "3.3.9",
|
"uglify-es": "3.3.9",
|
||||||
"url-loader": "1.0.1",
|
"url-loader": "1.0.1",
|
||||||
"uuid": "3.3.2",
|
"uuid": "3.3.2",
|
||||||
@ -204,7 +205,7 @@
|
|||||||
"vue-cropperjs": "2.2.1",
|
"vue-cropperjs": "2.2.1",
|
||||||
"vue-js-modal": "1.3.16",
|
"vue-js-modal": "1.3.16",
|
||||||
"vue-json-tree-view": "2.1.4",
|
"vue-json-tree-view": "2.1.4",
|
||||||
"vue-loader": "15.2.6",
|
"vue-loader": "15.3.0",
|
||||||
"vue-router": "3.0.1",
|
"vue-router": "3.0.1",
|
||||||
"vue-style-loader": "4.1.1",
|
"vue-style-loader": "4.1.1",
|
||||||
"vue-template-compiler": "2.5.17",
|
"vue-template-compiler": "2.5.17",
|
||||||
@ -213,7 +214,7 @@
|
|||||||
"vuex-persistedstate": "2.5.4",
|
"vuex-persistedstate": "2.5.4",
|
||||||
"web-push": "3.3.2",
|
"web-push": "3.3.2",
|
||||||
"webfinger.js": "2.6.6",
|
"webfinger.js": "2.6.6",
|
||||||
"webpack": "4.16.4",
|
"webpack": "4.16.5",
|
||||||
"webpack-cli": "3.1.0",
|
"webpack-cli": "3.1.0",
|
||||||
"websocket": "1.0.26",
|
"websocket": "1.0.26",
|
||||||
"ws": "6.0.0",
|
"ws": "6.0.0",
|
||||||
|
@ -8,14 +8,14 @@ import VueRouter from 'vue-router';
|
|||||||
import './style.styl';
|
import './style.styl';
|
||||||
|
|
||||||
import init from '../init';
|
import init from '../init';
|
||||||
|
|
||||||
import Index from './views/index.vue';
|
import Index from './views/index.vue';
|
||||||
|
import * as config from '../config';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* init
|
* init
|
||||||
*/
|
*/
|
||||||
init(launch => {
|
init(launch => {
|
||||||
document.title = '%i18n:common.name% | %i18n:common.application-authorization%';
|
document.title = `${config.name} | %i18n:common.application-authorization%`;
|
||||||
|
|
||||||
// Init router
|
// Init router
|
||||||
const router = new VueRouter({
|
const router = new VueRouter({
|
||||||
|
@ -38,7 +38,7 @@ export default function(type, data): Notification {
|
|||||||
switch (data.type) {
|
switch (data.type) {
|
||||||
case 'mention':
|
case 'mention':
|
||||||
return {
|
return {
|
||||||
title: '%i18n:common.notification.notified-by%'.split("{}")[0] + `${getUserName(data.user)}さんから:` + '%i18n:common.notification.notified-by%'.split("{}")[1],
|
title: '%i18n:common.notification.notified-by%'.split("{}")[0] + `${getUserName(data.user)}:` + '%i18n:common.notification.notified-by%'.split("{}")[1],
|
||||||
body: getNoteSummary(data),
|
body: getNoteSummary(data),
|
||||||
icon: data.user.avatarUrl
|
icon: data.user.avatarUrl
|
||||||
};
|
};
|
||||||
|
@ -1,13 +0,0 @@
|
|||||||
export default date => {
|
|
||||||
if (typeof date == 'string') date = new Date(date);
|
|
||||||
return (
|
|
||||||
date.getFullYear() + '%i18n:common.date.full-year%' +
|
|
||||||
(date.getMonth() + 1) + '%i18n:common.date.month%' +
|
|
||||||
date.getDate() + '%i18n:common.date.day%' +
|
|
||||||
' ' +
|
|
||||||
date.getHours() + '%i18n:common.date.hours%' +
|
|
||||||
date.getMinutes() + '%i18n:common.date.minutes%' +
|
|
||||||
' ' +
|
|
||||||
`(${['日', '月', '火', '水', '木', '金', '土'][date.getDay()]})`
|
|
||||||
);
|
|
||||||
};
|
|
@ -132,7 +132,7 @@ export default Vue.extend({
|
|||||||
this.users = users;
|
this.users = users;
|
||||||
this.fetching = false;
|
this.fetching = false;
|
||||||
} else {
|
} else {
|
||||||
(this as any).api('users/search_by_username', {
|
(this as any).api('users/search', {
|
||||||
query: this.q,
|
query: this.q,
|
||||||
limit: 30
|
limit: 30
|
||||||
}).then(users => {
|
}).then(users => {
|
||||||
|
@ -1,14 +1,18 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="xqnhankfuuilcwvhgsopeqncafzsquya">
|
<div class="xqnhankfuuilcwvhgsopeqncafzsquya">
|
||||||
<header><b>{{ blackUser | userName }}</b>(%i18n:common.reversi.black%) vs <b>{{ whiteUser | userName }}</b>(%i18n:common.reversi.white%)</header>
|
<button class="go-index" v-if="selfNav" @click="goIndex">%fa:arrow-left%</button>
|
||||||
|
<header><b><router-link :to="blackUser | userPage">{{ blackUser | userName }}</router-link></b>(%i18n:common.reversi.black%) vs <b><router-link :to="whiteUser | userPage">{{ whiteUser | userName }}</router-link></b>(%i18n:common.reversi.white%)</header>
|
||||||
|
|
||||||
<div style="overflow: hidden">
|
<div style="overflow: hidden; line-height: 28px;">
|
||||||
<p class="turn" v-if="!iAmPlayer && !game.isEnded">{{ '%i18n:common.reversi.turn-of%'.replace('{}', $options.filters.userName(turnUser)) }}<mk-ellipsis/></p>
|
<p class="turn" v-if="!iAmPlayer && !game.isEnded">{{ '%i18n:common.reversi.turn-of%'.replace('{}', $options.filters.userName(turnUser)) }}<mk-ellipsis/></p>
|
||||||
<p class="turn" v-if="logPos != logs.length">{{ '%i18n:common.reversi.past-turn-of%'.replace('{}', $options.filters.userName(turnUser)) }}</p>
|
<p class="turn" v-if="logPos != logs.length">{{ '%i18n:common.reversi.past-turn-of%'.replace('{}', $options.filters.userName(turnUser)) }}</p>
|
||||||
<p class="turn1" v-if="iAmPlayer && !game.isEnded && !isMyTurn">%i18n:common.reversi.opponent-turn%<mk-ellipsis/></p>
|
<p class="turn1" v-if="iAmPlayer && !game.isEnded && !isMyTurn">%i18n:common.reversi.opponent-turn%<mk-ellipsis/></p>
|
||||||
<p class="turn2" v-if="iAmPlayer && !game.isEnded && isMyTurn" v-animate-css="{ classes: 'tada', iteration: 'infinite' }">%i18n:common.reversi.my-turn%</p>
|
<p class="turn2" v-if="iAmPlayer && !game.isEnded && isMyTurn" v-animate-css="{ classes: 'tada', iteration: 'infinite' }">%i18n:common.reversi.my-turn%</p>
|
||||||
<p class="result" v-if="game.isEnded && logPos == logs.length">
|
<p class="result" v-if="game.isEnded && logPos == logs.length">
|
||||||
<template v-if="game.winner">{{ '%i18n:common.reversi.won%'.replace('{}', $options.filters.userName(game.winner)) }}{{ game.settings.isLlotheo ? ' (ロセオ)' : '' }}</template>
|
<template v-if="game.winner">
|
||||||
|
<span>{{ '%i18n:common.reversi.won%'.replace('{}', $options.filters.userName(game.winner)) }}</span>
|
||||||
|
<span v-if="game.surrendered != null"> (%i18n:@surrendered%)</span>
|
||||||
|
</template>
|
||||||
<template v-else>%i18n:common.reversi.drawn%</template>
|
<template v-else>%i18n:common.reversi.drawn%</template>
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
@ -41,6 +45,10 @@
|
|||||||
|
|
||||||
<p class="status"><b>{{ '%i18n:common.reversi.this-turn%'.split('{}')[0] }}{{ logPos }}{{ '%i18n:common.reversi.this-turn%'.split('{}')[1] }}</b> %i18n:common.reversi.black%:{{ o.blackCount }} %i18n:common.reversi.white%:{{ o.whiteCount }} %i18n:common.reversi.total%:{{ o.blackCount + o.whiteCount }}</p>
|
<p class="status"><b>{{ '%i18n:common.reversi.this-turn%'.split('{}')[0] }}{{ logPos }}{{ '%i18n:common.reversi.this-turn%'.split('{}')[1] }}</b> %i18n:common.reversi.black%:{{ o.blackCount }} %i18n:common.reversi.white%:{{ o.whiteCount }} %i18n:common.reversi.total%:{{ o.blackCount + o.whiteCount }}</p>
|
||||||
|
|
||||||
|
<div class="actions" v-if="!game.isEnded && iAmPlayer">
|
||||||
|
<form-button @click="surrender">%i18n:@surrender%</form-button>
|
||||||
|
</div>
|
||||||
|
|
||||||
<div class="player" v-if="game.isEnded">
|
<div class="player" v-if="game.isEnded">
|
||||||
<el-button-group>
|
<el-button-group>
|
||||||
<el-button type="primary" @click="logPos = 0" :disabled="logPos == 0">%fa:angle-double-left%</el-button>
|
<el-button type="primary" @click="logPos = 0" :disabled="logPos == 0">%fa:angle-double-left%</el-button>
|
||||||
@ -62,7 +70,20 @@ import Reversi, { Color } from '../../../../../../../games/reversi/core';
|
|||||||
import { url } from '../../../../../config';
|
import { url } from '../../../../../config';
|
||||||
|
|
||||||
export default Vue.extend({
|
export default Vue.extend({
|
||||||
props: ['initGame', 'connection'],
|
props: {
|
||||||
|
initGame: {
|
||||||
|
type: Object,
|
||||||
|
require: true
|
||||||
|
},
|
||||||
|
connection: {
|
||||||
|
type: Object,
|
||||||
|
require: true
|
||||||
|
},
|
||||||
|
selfNav: {
|
||||||
|
type: Boolean,
|
||||||
|
require: true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
@ -79,22 +100,27 @@ export default Vue.extend({
|
|||||||
if (!this.$store.getters.isSignedIn) return false;
|
if (!this.$store.getters.isSignedIn) return false;
|
||||||
return this.game.user1Id == this.$store.state.i.id || this.game.user2Id == this.$store.state.i.id;
|
return this.game.user1Id == this.$store.state.i.id || this.game.user2Id == this.$store.state.i.id;
|
||||||
},
|
},
|
||||||
|
|
||||||
myColor(): Color {
|
myColor(): Color {
|
||||||
if (!this.iAmPlayer) return null;
|
if (!this.iAmPlayer) return null;
|
||||||
if (this.game.user1Id == this.$store.state.i.id && this.game.black == 1) return true;
|
if (this.game.user1Id == this.$store.state.i.id && this.game.black == 1) return true;
|
||||||
if (this.game.user2Id == this.$store.state.i.id && this.game.black == 2) return true;
|
if (this.game.user2Id == this.$store.state.i.id && this.game.black == 2) return true;
|
||||||
return false;
|
return false;
|
||||||
},
|
},
|
||||||
|
|
||||||
opColor(): Color {
|
opColor(): Color {
|
||||||
if (!this.iAmPlayer) return null;
|
if (!this.iAmPlayer) return null;
|
||||||
return this.myColor === true ? false : true;
|
return this.myColor === true ? false : true;
|
||||||
},
|
},
|
||||||
|
|
||||||
blackUser(): any {
|
blackUser(): any {
|
||||||
return this.game.black == 1 ? this.game.user1 : this.game.user2;
|
return this.game.black == 1 ? this.game.user1 : this.game.user2;
|
||||||
},
|
},
|
||||||
|
|
||||||
whiteUser(): any {
|
whiteUser(): any {
|
||||||
return this.game.black == 1 ? this.game.user2 : this.game.user1;
|
return this.game.black == 1 ? this.game.user2 : this.game.user1;
|
||||||
},
|
},
|
||||||
|
|
||||||
turnUser(): any {
|
turnUser(): any {
|
||||||
if (this.o.turn === true) {
|
if (this.o.turn === true) {
|
||||||
return this.game.black == 1 ? this.game.user1 : this.game.user2;
|
return this.game.black == 1 ? this.game.user1 : this.game.user2;
|
||||||
@ -104,11 +130,13 @@ export default Vue.extend({
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
isMyTurn(): boolean {
|
isMyTurn(): boolean {
|
||||||
if (!this.iAmPlayer) return false;
|
if (!this.iAmPlayer) return false;
|
||||||
if (this.turnUser == null) return false;
|
if (this.turnUser == null) return false;
|
||||||
return this.turnUser.id == this.$store.state.i.id;
|
return this.turnUser.id == this.$store.state.i.id;
|
||||||
},
|
},
|
||||||
|
|
||||||
cellsStyle(): any {
|
cellsStyle(): any {
|
||||||
return {
|
return {
|
||||||
'grid-template-rows': `repeat(${this.game.settings.map.length}, 1fr)`,
|
'grid-template-rows': `repeat(${this.game.settings.map.length}, 1fr)`,
|
||||||
@ -165,11 +193,13 @@ export default Vue.extend({
|
|||||||
mounted() {
|
mounted() {
|
||||||
this.connection.on('set', this.onSet);
|
this.connection.on('set', this.onSet);
|
||||||
this.connection.on('rescue', this.onRescue);
|
this.connection.on('rescue', this.onRescue);
|
||||||
|
this.connection.on('ended', this.onEnded);
|
||||||
},
|
},
|
||||||
|
|
||||||
beforeDestroy() {
|
beforeDestroy() {
|
||||||
this.connection.off('set', this.onSet);
|
this.connection.off('set', this.onSet);
|
||||||
this.connection.off('rescue', this.onRescue);
|
this.connection.off('rescue', this.onRescue);
|
||||||
|
this.connection.off('ended', this.onEnded);
|
||||||
|
|
||||||
clearInterval(this.pollingClock);
|
clearInterval(this.pollingClock);
|
||||||
},
|
},
|
||||||
@ -215,6 +245,10 @@ export default Vue.extend({
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
onEnded(x) {
|
||||||
|
this.game = x.game;
|
||||||
|
},
|
||||||
|
|
||||||
checkEnd() {
|
checkEnd() {
|
||||||
this.game.isEnded = this.o.isEnded;
|
this.game.isEnded = this.o.isEnded;
|
||||||
if (this.game.isEnded) {
|
if (this.game.isEnded) {
|
||||||
@ -250,6 +284,16 @@ export default Vue.extend({
|
|||||||
|
|
||||||
this.checkEnd();
|
this.checkEnd();
|
||||||
this.$forceUpdate();
|
this.$forceUpdate();
|
||||||
|
},
|
||||||
|
|
||||||
|
surrender() {
|
||||||
|
(this as any).api('games/reversi/games/surrender', {
|
||||||
|
gameId: this.game.id
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
|
goIndex() {
|
||||||
|
this.$emit('go-index');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@ -261,10 +305,21 @@ export default Vue.extend({
|
|||||||
root(isDark)
|
root(isDark)
|
||||||
text-align center
|
text-align center
|
||||||
|
|
||||||
|
> .go-index
|
||||||
|
position absolute
|
||||||
|
top 0
|
||||||
|
left 0
|
||||||
|
z-index 1
|
||||||
|
width 42px
|
||||||
|
height 42px
|
||||||
|
|
||||||
> header
|
> header
|
||||||
padding 8px
|
padding 8px
|
||||||
border-bottom dashed 1px isDark ? #4c5761 : #c4cdd4
|
border-bottom dashed 1px isDark ? #4c5761 : #c4cdd4
|
||||||
|
|
||||||
|
a
|
||||||
|
color inherit
|
||||||
|
|
||||||
> .board
|
> .board
|
||||||
width calc(100% - 16px)
|
width calc(100% - 16px)
|
||||||
max-width 500px
|
max-width 500px
|
||||||
@ -381,6 +436,9 @@ root(isDark)
|
|||||||
margin 0
|
margin 0
|
||||||
padding 16px 0
|
padding 16px 0
|
||||||
|
|
||||||
|
> .actions
|
||||||
|
padding-bottom 16px
|
||||||
|
|
||||||
> .player
|
> .player
|
||||||
padding-bottom 32px
|
padding-bottom 32px
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
<template>
|
<template>
|
||||||
<div>
|
<div>
|
||||||
<x-room v-if="!g.isStarted" :game="g" :connection="connection"/>
|
<x-room v-if="!g.isStarted" :game="g" :connection="connection"/>
|
||||||
<x-game v-else :init-game="g" :connection="connection"/>
|
<x-game v-else :init-game="g" :connection="connection" :self-nav="selfNav" @go-index="goIndex"/>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
@ -16,7 +16,16 @@ export default Vue.extend({
|
|||||||
XGame,
|
XGame,
|
||||||
XRoom
|
XRoom
|
||||||
},
|
},
|
||||||
props: ['game'],
|
props: {
|
||||||
|
game: {
|
||||||
|
type: Object,
|
||||||
|
required: true
|
||||||
|
},
|
||||||
|
selfNav: {
|
||||||
|
type: Boolean,
|
||||||
|
require: true
|
||||||
|
}
|
||||||
|
},
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
connection: null,
|
connection: null,
|
||||||
@ -36,6 +45,9 @@ export default Vue.extend({
|
|||||||
onStarted(game) {
|
onStarted(game) {
|
||||||
Object.assign(this.g, game);
|
Object.assign(this.g, game);
|
||||||
this.$forceUpdate();
|
this.$forceUpdate();
|
||||||
|
},
|
||||||
|
goIndex() {
|
||||||
|
this.$emit('go-index');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -96,11 +96,7 @@ export default Vue.extend({
|
|||||||
|
|
||||||
methods: {
|
methods: {
|
||||||
go(game) {
|
go(game) {
|
||||||
(this as any).api('games/reversi/games/show', {
|
this.$emit('go', game);
|
||||||
gameId: game.id
|
|
||||||
}).then(game => {
|
|
||||||
this.$emit('go', game);
|
|
||||||
});
|
|
||||||
},
|
},
|
||||||
|
|
||||||
match() {
|
match() {
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="vchtoekanapleubgzioubdtmlkribzfd">
|
<div class="vchtoekanapleubgzioubdtmlkribzfd">
|
||||||
<div v-if="game">
|
<div v-if="game">
|
||||||
<x-gameroom :game="game"/>
|
<x-gameroom :game="game" :self-nav="selfNav" @go-index="goIndex"/>
|
||||||
</div>
|
</div>
|
||||||
<div class="matching" v-else-if="matching">
|
<div class="matching" v-else-if="matching">
|
||||||
<h1>{{ '%i18n:@matching.waiting-for%'.split('{}')[0] }}<b>{{ matching | userName }}</b>{{ '%i18n:@matching.waiting-for%'.split('{}')[1] }}<mk-ellipsis/></h1>
|
<h1>{{ '%i18n:@matching.waiting-for%'.split('{}')[0] }}<b>{{ matching | userName }}</b>{{ '%i18n:@matching.waiting-for%'.split('{}')[1] }}<mk-ellipsis/></h1>
|
||||||
@ -34,6 +34,11 @@ export default Vue.extend({
|
|||||||
gameId: {
|
gameId: {
|
||||||
type: String,
|
type: String,
|
||||||
required: false
|
required: false
|
||||||
|
},
|
||||||
|
selfNav: {
|
||||||
|
type: Boolean,
|
||||||
|
require: false,
|
||||||
|
default: true
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
@ -48,6 +53,10 @@ export default Vue.extend({
|
|||||||
},
|
},
|
||||||
|
|
||||||
watch: {
|
watch: {
|
||||||
|
game() {
|
||||||
|
this.$emit('gamed', this.game);
|
||||||
|
},
|
||||||
|
|
||||||
gameId() {
|
gameId() {
|
||||||
this.fetch();
|
this.fetch();
|
||||||
}
|
}
|
||||||
@ -91,18 +100,24 @@ export default Vue.extend({
|
|||||||
(this as any).api('games/reversi/games/show', {
|
(this as any).api('games/reversi/games/show', {
|
||||||
gameId: this.gameId
|
gameId: this.gameId
|
||||||
}).then(game => {
|
}).then(game => {
|
||||||
this.nav(game, true);
|
this.game = game;
|
||||||
Progress.done();
|
Progress.done();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
nav(game, silent) {
|
async nav(game, actualNav = true) {
|
||||||
this.matching = null;
|
if (this.selfNav) {
|
||||||
this.game = game;
|
// 受け取ったゲーム情報が省略されたものなら完全な情報を取得する
|
||||||
|
if (game != null && (game.settings == null || game.settings.map == null)) {
|
||||||
|
game = await (this as any).api('games/reversi/games/show', {
|
||||||
|
gameId: game.id
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
if (!silent) {
|
this.game = game;
|
||||||
this.$emit('nav', this.game);
|
} else {
|
||||||
|
this.$emit('nav', game, actualNav);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
@ -121,7 +136,8 @@ export default Vue.extend({
|
|||||||
}).then(game => {
|
}).then(game => {
|
||||||
if (game) {
|
if (game) {
|
||||||
this.matching = null;
|
this.matching = null;
|
||||||
this.game = game;
|
|
||||||
|
this.nav(game);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
@ -129,6 +145,11 @@ export default Vue.extend({
|
|||||||
onMatched(game) {
|
onMatched(game) {
|
||||||
this.matching = null;
|
this.matching = null;
|
||||||
this.game = game;
|
this.game = game;
|
||||||
|
this.nav(game, false);
|
||||||
|
},
|
||||||
|
|
||||||
|
goIndex() {
|
||||||
|
this.nav(null);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -83,7 +83,7 @@ export default Vue.extend({
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (items[0].kind == 'file') {
|
if (items[0].kind == 'file') {
|
||||||
alert('メッセージに添付できるのはひとつのファイルのみです');
|
alert('%i18n:only-one-file-attached%');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@ -105,7 +105,7 @@ export default Vue.extend({
|
|||||||
return;
|
return;
|
||||||
} else if (e.dataTransfer.files.length > 1) {
|
} else if (e.dataTransfer.files.length > 1) {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
alert('メッセージに添付できるのはひとつのファイルのみです');
|
alert('%i18n:only-one-file-attached%');
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -61,7 +61,7 @@ export default Vue.extend({
|
|||||||
const date = new Date(message.createdAt).getDate();
|
const date = new Date(message.createdAt).getDate();
|
||||||
const month = new Date(message.createdAt).getMonth() + 1;
|
const month = new Date(message.createdAt).getMonth() + 1;
|
||||||
message._date = date;
|
message._date = date;
|
||||||
message._datetext = `${month}月 ${date}日`;
|
message._datetext = '%i18n:common.month-and-day%'.replace('{month}', month.toString()).replace('{day}', date.toString());
|
||||||
return message;
|
return message;
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
@ -111,7 +111,7 @@ export default Vue.extend({
|
|||||||
this.form.upload(e.dataTransfer.files[0]);
|
this.form.upload(e.dataTransfer.files[0]);
|
||||||
return;
|
return;
|
||||||
} else if (e.dataTransfer.files.length > 1) {
|
} else if (e.dataTransfer.files.length > 1) {
|
||||||
alert('メッセージに添付できるのはひとつのファイルのみです');
|
alert('%i18n:@only-one-file-attached%');
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
import Vue from 'vue';
|
import Vue from 'vue';
|
||||||
import * as emojilib from 'emojilib';
|
import * as emojilib from 'emojilib';
|
||||||
|
import { length } from 'stringz';
|
||||||
import parse from '../../../../../mfm/parse';
|
import parse from '../../../../../mfm/parse';
|
||||||
import getAcct from '../../../../../misc/acct/render';
|
import getAcct from '../../../../../misc/acct/render';
|
||||||
import { url } from '../../../config';
|
import { url } from '../../../config';
|
||||||
@ -40,10 +41,13 @@ export default Vue.component('misskey-flavored-markdown', {
|
|||||||
ast = this.ast;
|
ast = this.ast;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let bigCount = 0;
|
||||||
|
let motionCount = 0;
|
||||||
|
|
||||||
// Parse ast to DOM
|
// Parse ast to DOM
|
||||||
const els = flatten(ast.map(token => {
|
const els = flatten(ast.map(token => {
|
||||||
switch (token.type) {
|
switch (token.type) {
|
||||||
case 'text':
|
case 'text': {
|
||||||
const text = token.content.replace(/(\r\n|\n|\r)/g, '\n');
|
const text = token.content.replace(/(\r\n|\n|\r)/g, '\n');
|
||||||
|
|
||||||
if (this.shouldBreak) {
|
if (this.shouldBreak) {
|
||||||
@ -54,30 +58,52 @@ export default Vue.component('misskey-flavored-markdown', {
|
|||||||
} else {
|
} else {
|
||||||
return createElement('span', text.replace(/\n/g, ' '));
|
return createElement('span', text.replace(/\n/g, ' '));
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
case 'bold':
|
case 'bold': {
|
||||||
return createElement('b', token.bold);
|
return createElement('b', token.bold);
|
||||||
|
}
|
||||||
|
|
||||||
case 'big':
|
case 'big': {
|
||||||
|
bigCount++;
|
||||||
|
const isLong = length(token.big) > 10;
|
||||||
|
const isMany = bigCount > 3;
|
||||||
return (createElement as any)('strong', {
|
return (createElement as any)('strong', {
|
||||||
attrs: {
|
attrs: {
|
||||||
style: 'display: inline-block; font-size: 200%;'
|
style: `display: inline-block; font-size: ${ isMany ? '100%' : '150%' };`
|
||||||
},
|
},
|
||||||
directives: [{
|
directives: [this.$store.state.settings.disableAnimatedMfm || isLong || isMany ? {} : {
|
||||||
name: 'animate-css',
|
name: 'animate-css',
|
||||||
value: { classes: 'tada', iteration: 'infinite' }
|
value: { classes: 'tada', iteration: 'infinite' }
|
||||||
}]
|
}]
|
||||||
}, token.big);
|
}, token.big);
|
||||||
|
}
|
||||||
|
|
||||||
case 'url':
|
case 'motion': {
|
||||||
|
motionCount++;
|
||||||
|
const isLong = length(token.motion) > 10;
|
||||||
|
const isMany = motionCount > 3;
|
||||||
|
return (createElement as any)('span', {
|
||||||
|
attrs: {
|
||||||
|
style: 'display: inline-block;'
|
||||||
|
},
|
||||||
|
directives: [this.$store.state.settings.disableAnimatedMfm || isLong || isMany ? {} : {
|
||||||
|
name: 'animate-css',
|
||||||
|
value: { classes: 'rubberBand', iteration: 'infinite' }
|
||||||
|
}]
|
||||||
|
}, token.motion);
|
||||||
|
}
|
||||||
|
|
||||||
|
case 'url': {
|
||||||
return createElement(MkUrl, {
|
return createElement(MkUrl, {
|
||||||
props: {
|
props: {
|
||||||
url: token.content,
|
url: token.content,
|
||||||
target: '_blank'
|
target: '_blank'
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
}
|
||||||
|
|
||||||
case 'link':
|
case 'link': {
|
||||||
return createElement('a', {
|
return createElement('a', {
|
||||||
attrs: {
|
attrs: {
|
||||||
class: 'link',
|
class: 'link',
|
||||||
@ -86,8 +112,9 @@ export default Vue.component('misskey-flavored-markdown', {
|
|||||||
title: token.url
|
title: token.url
|
||||||
}
|
}
|
||||||
}, token.title);
|
}, token.title);
|
||||||
|
}
|
||||||
|
|
||||||
case 'mention':
|
case 'mention': {
|
||||||
return (createElement as any)('a', {
|
return (createElement as any)('a', {
|
||||||
attrs: {
|
attrs: {
|
||||||
href: `${url}/@${getAcct(token)}`,
|
href: `${url}/@${getAcct(token)}`,
|
||||||
@ -99,16 +126,18 @@ export default Vue.component('misskey-flavored-markdown', {
|
|||||||
value: token.content
|
value: token.content
|
||||||
}]
|
}]
|
||||||
}, token.content);
|
}, token.content);
|
||||||
|
}
|
||||||
|
|
||||||
case 'hashtag':
|
case 'hashtag': {
|
||||||
return createElement('a', {
|
return createElement('a', {
|
||||||
attrs: {
|
attrs: {
|
||||||
href: `${url}/tags/${encodeURIComponent(token.hashtag)}`,
|
href: `${url}/tags/${encodeURIComponent(token.hashtag)}`,
|
||||||
target: '_blank'
|
target: '_blank'
|
||||||
}
|
}
|
||||||
}, token.content);
|
}, token.content);
|
||||||
|
}
|
||||||
|
|
||||||
case 'code':
|
case 'code': {
|
||||||
return createElement('pre', {
|
return createElement('pre', {
|
||||||
class: 'code'
|
class: 'code'
|
||||||
}, [
|
}, [
|
||||||
@ -118,15 +147,17 @@ export default Vue.component('misskey-flavored-markdown', {
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
]);
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
case 'inline-code':
|
case 'inline-code': {
|
||||||
return createElement('code', {
|
return createElement('code', {
|
||||||
domProps: {
|
domProps: {
|
||||||
innerHTML: token.html
|
innerHTML: token.html
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
}
|
||||||
|
|
||||||
case 'quote':
|
case 'quote': {
|
||||||
const text2 = token.quote.replace(/(\r\n|\n|\r)/g, '\n');
|
const text2 = token.quote.replace(/(\r\n|\n|\r)/g, '\n');
|
||||||
|
|
||||||
if (this.shouldBreak) {
|
if (this.shouldBreak) {
|
||||||
@ -145,27 +176,32 @@ export default Vue.component('misskey-flavored-markdown', {
|
|||||||
}
|
}
|
||||||
}, text2.replace(/\n/g, ' '));
|
}, text2.replace(/\n/g, ' '));
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
case 'title':
|
case 'title': {
|
||||||
return createElement('div', {
|
return createElement('div', {
|
||||||
attrs: {
|
attrs: {
|
||||||
class: 'title'
|
class: 'title'
|
||||||
}
|
}
|
||||||
}, token.title);
|
}, token.title);
|
||||||
|
}
|
||||||
|
|
||||||
case 'emoji':
|
case 'emoji': {
|
||||||
const emoji = emojilib.lib[token.emoji];
|
const emoji = emojilib.lib[token.emoji];
|
||||||
return createElement('span', emoji ? emoji.char : token.content);
|
return createElement('span', emoji ? emoji.char : token.content);
|
||||||
|
}
|
||||||
|
|
||||||
case 'search':
|
case 'search': {
|
||||||
return createElement(MkGoogle, {
|
return createElement(MkGoogle, {
|
||||||
props: {
|
props: {
|
||||||
q: token.query
|
q: token.query
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
}
|
||||||
|
|
||||||
default:
|
default: {
|
||||||
console.log('unknown ast type:', token.type);
|
console.log('unknown ast type:', token.type);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}));
|
}));
|
||||||
|
|
||||||
|
@ -12,7 +12,7 @@
|
|||||||
</ui-input>
|
</ui-input>
|
||||||
<ui-input v-if="user && user.twoFactorEnabled" v-model="token" type="number" required/>
|
<ui-input v-if="user && user.twoFactorEnabled" v-model="token" type="number" required/>
|
||||||
<ui-button type="submit" :disabled="signing">{{ signing ? '%i18n:@signing-in%' : '%i18n:@signin%' }}</ui-button>
|
<ui-button type="submit" :disabled="signing">{{ signing ? '%i18n:@signing-in%' : '%i18n:@signin%' }}</ui-button>
|
||||||
<p style="margin: 8px 0;">または<a :href="`${apiUrl}/signin/twitter`">Twitterでログイン</a></p>
|
<p style="margin: 8px 0;">%i18n:@or%<a :href="`${apiUrl}/signin/twitter`">%i18n:@signin-with-twitter%</a></p>
|
||||||
</form>
|
</form>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
@ -45,6 +45,9 @@ root(isDark)
|
|||||||
color isDark ? #fff : #606266
|
color isDark ? #fff : #606266
|
||||||
transition 0.1s
|
transition 0.1s
|
||||||
|
|
||||||
|
*
|
||||||
|
pointer-events none
|
||||||
|
|
||||||
&:hover
|
&:hover
|
||||||
&:focus
|
&:focus
|
||||||
color $theme-color
|
color $theme-color
|
||||||
|
@ -2,6 +2,9 @@
|
|||||||
<iframe v-if="youtubeId" type="text/html" height="250"
|
<iframe v-if="youtubeId" type="text/html" height="250"
|
||||||
:src="`https://www.youtube.com/embed/${youtubeId}?origin=${misskeyUrl}`"
|
:src="`https://www.youtube.com/embed/${youtubeId}?origin=${misskeyUrl}`"
|
||||||
frameborder="0"/>
|
frameborder="0"/>
|
||||||
|
<iframe v-else-if="spotifyId"
|
||||||
|
:src="`https://open.spotify.com/embed/track/${spotifyId}`"
|
||||||
|
frameborder="0" allowtransparency="true" allow="encrypted-media" />
|
||||||
<div v-else-if="tweetUrl && detail" class="twitter">
|
<div v-else-if="tweetUrl && detail" class="twitter">
|
||||||
<blockquote ref="tweet" class="twitter-tweet" :data-theme="$store.state.device.darkmode ? 'dark' : null">
|
<blockquote ref="tweet" class="twitter-tweet" :data-theme="$store.state.device.darkmode ? 'dark' : null">
|
||||||
<a :href="url"></a>
|
<a :href="url"></a>
|
||||||
@ -60,6 +63,8 @@ export default Vue.extend({
|
|||||||
this.youtubeId = url.searchParams.get('v');
|
this.youtubeId = url.searchParams.get('v');
|
||||||
} else if (url.hostname == 'youtu.be') {
|
} else if (url.hostname == 'youtu.be') {
|
||||||
this.youtubeId = url.pathname;
|
this.youtubeId = url.pathname;
|
||||||
|
} else if (url.hostname == 'open.spotify.com') {
|
||||||
|
this.spotifyId = url.pathname.split('/').reverse().filter(x => x !== '')[0];
|
||||||
} else if (this.detail && url.hostname == 'twitter.com' && /^\/.+\/status(es)?\/\d+/.test(url.pathname)) {
|
} else if (this.detail && url.hostname == 'twitter.com' && /^\/.+\/status(es)?\/\d+/.test(url.pathname)) {
|
||||||
this.tweetUrl = url;
|
this.tweetUrl = url;
|
||||||
const twttr = (window as any).twttr || {};
|
const twttr = (window as any).twttr || {};
|
||||||
|
@ -71,7 +71,6 @@ export default Vue.extend({
|
|||||||
this.user = user;
|
this.user = user;
|
||||||
this.fetching = false;
|
this.fetching = false;
|
||||||
Progress.done();
|
Progress.done();
|
||||||
document.title = getUserName(this.user) + ' | %i18n:common.name%';
|
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
<div>
|
<div>
|
||||||
<p>%fa:R hdd%Storage</p>
|
<p>%fa:R hdd%Storage</p>
|
||||||
<p>Total: {{ total | bytes(1) }}</p>
|
<p>Total: {{ total | bytes(1) }}</p>
|
||||||
<p>Available: {{ available | bytes(1) }}</p>
|
<p>Free: {{ available | bytes(1) }}</p>
|
||||||
<p>Used: {{ used | bytes(1) }}</p>
|
<p>Used: {{ used | bytes(1) }}</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -8,7 +8,7 @@ export default (os: OS) => (cb, file = null) => {
|
|||||||
|
|
||||||
const w = os.new(CropWindow, {
|
const w = os.new(CropWindow, {
|
||||||
image: file,
|
image: file,
|
||||||
title: 'アバターとして表示する部分を選択',
|
title: '%i18n:desktop.avatar-crop-title%',
|
||||||
aspectRatio: 1 / 1
|
aspectRatio: 1 / 1
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -18,11 +18,11 @@ export default (os: OS) => (cb, file = null) => {
|
|||||||
data.append('file', blob, file.name + '.cropped.png');
|
data.append('file', blob, file.name + '.cropped.png');
|
||||||
|
|
||||||
os.api('drive/folders/find', {
|
os.api('drive/folders/find', {
|
||||||
name: 'アイコン'
|
name: '%i18n:desktop.avatar%'
|
||||||
}).then(iconFolder => {
|
}).then(iconFolder => {
|
||||||
if (iconFolder.length === 0) {
|
if (iconFolder.length === 0) {
|
||||||
os.api('drive/folders/create', {
|
os.api('drive/folders/create', {
|
||||||
name: 'アイコン'
|
name: '%i18n:desktop.avatar%'
|
||||||
}).then(iconFolder => {
|
}).then(iconFolder => {
|
||||||
upload(data, iconFolder);
|
upload(data, iconFolder);
|
||||||
});
|
});
|
||||||
@ -41,7 +41,7 @@ export default (os: OS) => (cb, file = null) => {
|
|||||||
|
|
||||||
const upload = (data, folder) => {
|
const upload = (data, folder) => {
|
||||||
const dialog = os.new(ProgressDialog, {
|
const dialog = os.new(ProgressDialog, {
|
||||||
title: '新しいアバターをアップロードしています'
|
title: '%i18n:desktop.uploading-avatar%'
|
||||||
});
|
});
|
||||||
document.body.appendChild(dialog.$el);
|
document.body.appendChild(dialog.$el);
|
||||||
|
|
||||||
@ -76,10 +76,10 @@ export default (os: OS) => (cb, file = null) => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
os.apis.dialog({
|
os.apis.dialog({
|
||||||
title: '%fa:info-circle%アバターを更新しました',
|
title: '%fa:info-circle% %i18n:desktop.avatar-updated%',
|
||||||
text: '新しいアバターが反映されるまで時間がかかる場合があります。',
|
text: null,
|
||||||
actions: [{
|
actions: [{
|
||||||
text: 'わかった'
|
text: '%i18n:common.got-it%'
|
||||||
}]
|
}]
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -92,7 +92,7 @@ export default (os: OS) => (cb, file = null) => {
|
|||||||
} else {
|
} else {
|
||||||
os.apis.chooseDriveFile({
|
os.apis.chooseDriveFile({
|
||||||
multiple: false,
|
multiple: false,
|
||||||
title: '%fa:image%アバターにする画像を選択'
|
title: '%fa:image% %i18n:desktop.choose-avatar%'
|
||||||
}).then(file => {
|
}).then(file => {
|
||||||
fileSelected(file);
|
fileSelected(file);
|
||||||
});
|
});
|
||||||
|
@ -8,7 +8,7 @@ export default (os: OS) => {
|
|||||||
const cropImage = file => new Promise((resolve, reject) => {
|
const cropImage = file => new Promise((resolve, reject) => {
|
||||||
const w = os.new(CropWindow, {
|
const w = os.new(CropWindow, {
|
||||||
image: file,
|
image: file,
|
||||||
title: 'バナーとして表示する部分を選択',
|
title: '%i18n:desktop.banner-crop-title%',
|
||||||
aspectRatio: 16 / 9
|
aspectRatio: 16 / 9
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -18,11 +18,11 @@ export default (os: OS) => {
|
|||||||
data.append('file', blob, file.name + '.cropped.png');
|
data.append('file', blob, file.name + '.cropped.png');
|
||||||
|
|
||||||
os.api('drive/folders/find', {
|
os.api('drive/folders/find', {
|
||||||
name: 'バナー'
|
name: '%i18n:desktop.banner%'
|
||||||
}).then(bannerFolder => {
|
}).then(bannerFolder => {
|
||||||
if (bannerFolder.length === 0) {
|
if (bannerFolder.length === 0) {
|
||||||
os.api('drive/folders/create', {
|
os.api('drive/folders/create', {
|
||||||
name: 'バナー'
|
name: '%i18n:desktop.banner%'
|
||||||
}).then(iconFolder => {
|
}).then(iconFolder => {
|
||||||
resolve(upload(data, iconFolder));
|
resolve(upload(data, iconFolder));
|
||||||
});
|
});
|
||||||
@ -43,7 +43,7 @@ export default (os: OS) => {
|
|||||||
|
|
||||||
const upload = (data, folder) => new Promise((resolve, reject) => {
|
const upload = (data, folder) => new Promise((resolve, reject) => {
|
||||||
const dialog = os.new(ProgressDialog, {
|
const dialog = os.new(ProgressDialog, {
|
||||||
title: '新しいバナーをアップロードしています'
|
title: '%i18n:desktop.uploading-banner%'
|
||||||
});
|
});
|
||||||
document.body.appendChild(dialog.$el);
|
document.body.appendChild(dialog.$el);
|
||||||
|
|
||||||
@ -79,10 +79,10 @@ export default (os: OS) => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
os.apis.dialog({
|
os.apis.dialog({
|
||||||
title: '%fa:info-circle%バナーを更新しました',
|
title: '%fa:info-circle% %i18n:desktop.banner-updated%',
|
||||||
text: '新しいバナーが反映されるまで時間がかかる場合があります。',
|
text: null,
|
||||||
actions: [{
|
actions: [{
|
||||||
text: 'わかった'
|
text: '%i18n:common.got-it%'
|
||||||
}]
|
}]
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -95,7 +95,7 @@ export default (os: OS) => {
|
|||||||
? Promise.resolve(file)
|
? Promise.resolve(file)
|
||||||
: os.apis.chooseDriveFile({
|
: os.apis.chooseDriveFile({
|
||||||
multiple: false,
|
multiple: false,
|
||||||
title: '%fa:image%バナーにする画像を選択'
|
title: '%fa:image% %i18n:desktop.choose-banner%'
|
||||||
});
|
});
|
||||||
|
|
||||||
return selectedFile
|
return selectedFile
|
||||||
|
@ -79,7 +79,6 @@
|
|||||||
|
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import Vue from 'vue';
|
import Vue from 'vue';
|
||||||
import dateStringify from '../../../common/scripts/date-stringify';
|
|
||||||
import parse from '../../../../../mfm/parse';
|
import parse from '../../../../../mfm/parse';
|
||||||
|
|
||||||
import MkPostFormWindow from './post-form-window.vue';
|
import MkPostFormWindow from './post-form-window.vue';
|
||||||
@ -129,7 +128,7 @@ export default Vue.extend({
|
|||||||
: 0;
|
: 0;
|
||||||
},
|
},
|
||||||
title(): string {
|
title(): string {
|
||||||
return dateStringify(this.p.createdAt);
|
return new Date(this.p.createdAt).toLocaleString();
|
||||||
},
|
},
|
||||||
urls(): string[] {
|
urls(): string[] {
|
||||||
if (this.p.text) {
|
if (this.p.text) {
|
||||||
|
@ -12,7 +12,6 @@
|
|||||||
|
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import Vue from 'vue';
|
import Vue from 'vue';
|
||||||
import dateStringify from '../../../common/scripts/date-stringify';
|
|
||||||
|
|
||||||
export default Vue.extend({
|
export default Vue.extend({
|
||||||
props: {
|
props: {
|
||||||
@ -28,7 +27,7 @@ export default Vue.extend({
|
|||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
title(): string {
|
title(): string {
|
||||||
return dateStringify(this.note.createdAt);
|
return new Date(this.note.createdAt).toLocaleString();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -12,13 +12,12 @@
|
|||||||
|
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import Vue from 'vue';
|
import Vue from 'vue';
|
||||||
import dateStringify from '../../../common/scripts/date-stringify';
|
|
||||||
|
|
||||||
export default Vue.extend({
|
export default Vue.extend({
|
||||||
props: ['note'],
|
props: ['note'],
|
||||||
computed: {
|
computed: {
|
||||||
title(): string {
|
title(): string {
|
||||||
return dateStringify(this.note.createdAt);
|
return new Date(this.note.createdAt).toLocaleString();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -18,7 +18,7 @@
|
|||||||
<div class="body">
|
<div class="body">
|
||||||
<p v-if="p.cw != null" class="cw">
|
<p v-if="p.cw != null" class="cw">
|
||||||
<span class="text" v-if="p.cw != ''">{{ p.cw }}</span>
|
<span class="text" v-if="p.cw != ''">{{ p.cw }}</span>
|
||||||
<span class="toggle" @click="showContent = !showContent">{{ showContent ? '隠す' : 'もっと見る' }}</span>
|
<span class="toggle" @click="showContent = !showContent">{{ showContent ? '%i18n:@hide%' : '%i18n:@see-more%' }}</span>
|
||||||
</p>
|
</p>
|
||||||
<div class="content" v-show="p.cw == null || showContent">
|
<div class="content" v-show="p.cw == null || showContent">
|
||||||
<div class="text">
|
<div class="text">
|
||||||
@ -71,7 +71,6 @@
|
|||||||
|
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import Vue from 'vue';
|
import Vue from 'vue';
|
||||||
import dateStringify from '../../../common/scripts/date-stringify';
|
|
||||||
import parse from '../../../../../mfm/parse';
|
import parse from '../../../../../mfm/parse';
|
||||||
|
|
||||||
import MkPostFormWindow from './post-form-window.vue';
|
import MkPostFormWindow from './post-form-window.vue';
|
||||||
@ -128,7 +127,7 @@ export default Vue.extend({
|
|||||||
},
|
},
|
||||||
|
|
||||||
title(): string {
|
title(): string {
|
||||||
return dateStringify(this.p.createdAt);
|
return new Date(this.p.createdAt).toLocaleString();
|
||||||
},
|
},
|
||||||
|
|
||||||
urls(): string[] {
|
urls(): string[] {
|
||||||
|
@ -33,7 +33,7 @@
|
|||||||
|
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import Vue from 'vue';
|
import Vue from 'vue';
|
||||||
import { url } 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 './notes.note.vue';
|
||||||
@ -69,7 +69,7 @@ export default Vue.extend({
|
|||||||
const date = new Date(note.createdAt).getDate();
|
const date = new Date(note.createdAt).getDate();
|
||||||
const month = new Date(note.createdAt).getMonth() + 1;
|
const month = new Date(note.createdAt).getMonth() + 1;
|
||||||
note._date = date;
|
note._date = date;
|
||||||
note._datetext = `${month}月 ${date}日`;
|
note._datetext = '%i18n:common.month-and-day%'.replace('{month}', month.toString()).replace('{day}', date.toString());
|
||||||
return note;
|
return note;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -149,7 +149,7 @@ export default Vue.extend({
|
|||||||
|
|
||||||
// サウンドを再生する
|
// サウンドを再生する
|
||||||
if (this.$store.state.device.enableSounds && !silent) {
|
if (this.$store.state.device.enableSounds && !silent) {
|
||||||
const sound = new Audio(`${url}/assets/post.mp3`);
|
const sound = new Audio(`${config.url}/assets/post.mp3`);
|
||||||
sound.volume = this.$store.state.device.soundVolume;
|
sound.volume = this.$store.state.device.soundVolume;
|
||||||
sound.play();
|
sound.play();
|
||||||
}
|
}
|
||||||
@ -187,7 +187,7 @@ export default Vue.extend({
|
|||||||
|
|
||||||
clearNotification() {
|
clearNotification() {
|
||||||
this.unreadCount = 0;
|
this.unreadCount = 0;
|
||||||
document.title = '%i18n:common.name%';
|
document.title = config.name;
|
||||||
},
|
},
|
||||||
|
|
||||||
onVisibilitychange() {
|
onVisibilitychange() {
|
||||||
|
@ -130,7 +130,7 @@ export default Vue.extend({
|
|||||||
const date = new Date(notification.createdAt).getDate();
|
const date = new Date(notification.createdAt).getDate();
|
||||||
const month = new Date(notification.createdAt).getMonth() + 1;
|
const month = new Date(notification.createdAt).getMonth() + 1;
|
||||||
notification._date = date;
|
notification._date = date;
|
||||||
notification._datetext = `${month}月 ${date}日`;
|
notification._datetext = '%i18n:common.month-and-day%'.replace('{month}', month.toString()).replace('{day}', date.toString());
|
||||||
return notification;
|
return notification;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -14,7 +14,7 @@
|
|||||||
<b>%i18n:@recent-tags%:</b>
|
<b>%i18n:@recent-tags%:</b>
|
||||||
<a v-for="tag in recentHashtags.slice(0, 5)" @click="addTag(tag)" title="%@click-to-tagging%">#{{ tag }}</a>
|
<a v-for="tag in recentHashtags.slice(0, 5)" @click="addTag(tag)" title="%@click-to-tagging%">#{{ tag }}</a>
|
||||||
</div>
|
</div>
|
||||||
<input v-show="useCw" v-model="cw" placeholder="内容への注釈 (オプション)">
|
<input v-show="useCw" v-model="cw" placeholder="%i18n:@annotations%">
|
||||||
<textarea :class="{ with: (files.length != 0 || poll) }"
|
<textarea :class="{ with: (files.length != 0 || poll) }"
|
||||||
ref="text" v-model="text" :disabled="posting"
|
ref="text" v-model="text" :disabled="posting"
|
||||||
@keydown="onKeydown" @paste="onPaste" :placeholder="placeholder"
|
@keydown="onKeydown" @paste="onPaste" :placeholder="placeholder"
|
||||||
|
@ -55,6 +55,7 @@
|
|||||||
<span>%i18n:@show-maps-desc%</span>
|
<span>%i18n:@show-maps-desc%</span>
|
||||||
</mk-switch>
|
</mk-switch>
|
||||||
<mk-switch v-model="$store.state.settings.reversiBoardLabels" @change="onChangeReversiBoardLabels" text="%i18n:common.show-reversi-board-labels%"/>
|
<mk-switch v-model="$store.state.settings.reversiBoardLabels" @change="onChangeReversiBoardLabels" text="%i18n:common.show-reversi-board-labels%"/>
|
||||||
|
<mk-switch v-model="$store.state.settings.disableAnimatedMfm" @change="onChangeDisableAnimatedMfm" text="%i18n:common.disable-animated-mfm%"/>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
<section class="web" v-show="page == 'web'">
|
<section class="web" v-show="page == 'web'">
|
||||||
@ -376,6 +377,12 @@ export default Vue.extend({
|
|||||||
value: v
|
value: v
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
onChangeDisableAnimatedMfm(v) {
|
||||||
|
this.$store.dispatch('settings/set', {
|
||||||
|
key: 'disableAnimatedMfm',
|
||||||
|
value: v
|
||||||
|
});
|
||||||
|
},
|
||||||
onChangeGradientWindowHeader(v) {
|
onChangeGradientWindowHeader(v) {
|
||||||
this.$store.dispatch('settings/set', {
|
this.$store.dispatch('settings/set', {
|
||||||
key: 'gradientWindowHeader',
|
key: 'gradientWindowHeader',
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
<div class="main" ref="main">
|
<div class="main" ref="main">
|
||||||
<div class="backdrop"></div>
|
<div class="backdrop"></div>
|
||||||
<div class="main">
|
<div class="main">
|
||||||
<p ref="welcomeback" v-if="$store.getters.isSignedIn">%i18n:@welcome-back%<b>{{ $store.state.i | userName }}</b>さん</p>
|
<p ref="welcomeback" v-if="$store.getters.isSignedIn">%i18n:@welcome-back%<b>{{ $store.state.i | userName }}</b>%i18n:@adjective%</p>
|
||||||
<div class="container" ref="mainContainer">
|
<div class="container" ref="mainContainer">
|
||||||
<div class="left">
|
<div class="left">
|
||||||
<x-nav/>
|
<x-nav/>
|
||||||
|
@ -27,7 +27,7 @@ export default Vue.extend({
|
|||||||
methods: {
|
methods: {
|
||||||
add() {
|
add() {
|
||||||
(this as any).apis.input({
|
(this as any).apis.input({
|
||||||
title: 'リスト名',
|
title: '%i18n:@list-name%',
|
||||||
}).then(async title => {
|
}).then(async title => {
|
||||||
const list = await (this as any).api('users/lists/create', {
|
const list = await (this as any).api('users/lists/create', {
|
||||||
title
|
title
|
||||||
|
@ -72,7 +72,7 @@ export default Vue.extend({
|
|||||||
const date = new Date(note.createdAt).getDate();
|
const date = new Date(note.createdAt).getDate();
|
||||||
const month = new Date(note.createdAt).getMonth() + 1;
|
const month = new Date(note.createdAt).getMonth() + 1;
|
||||||
note._date = date;
|
note._date = date;
|
||||||
note._datetext = `${month}月 ${date}日`;
|
note._datetext = '%i18n:common.month-and-day%'.replace('{month}', month.toString()).replace('{day}', date.toString());
|
||||||
return note;
|
return note;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -51,7 +51,7 @@ export default Vue.extend({
|
|||||||
const date = new Date(notification.createdAt).getDate();
|
const date = new Date(notification.createdAt).getDate();
|
||||||
const month = new Date(notification.createdAt).getMonth() + 1;
|
const month = new Date(notification.createdAt).getMonth() + 1;
|
||||||
notification._date = date;
|
notification._date = date;
|
||||||
notification._datetext = `${month}月 ${date}日`;
|
notification._datetext = '%i18n:common.month-and-day%'.replace('{month}', month.toString()).replace('{day}', date.toString());
|
||||||
return notification;
|
return notification;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
<template>
|
<template>
|
||||||
<component :is="ui ? 'mk-ui' : 'div'">
|
<component :is="ui ? 'mk-ui' : 'div'">
|
||||||
<mk-reversi :game-id="$route.params.game" @nav="nav"/>
|
<mk-reversi :game-id="$route.params.game" @nav="nav" :self-nav="false"/>
|
||||||
</component>
|
</component>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
@ -14,9 +14,14 @@ export default Vue.extend({
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
nav(game) {
|
nav(game, actualNav) {
|
||||||
history.pushState(null, null, '/reversi/' + game.id);
|
if (actualNav) {
|
||||||
},
|
this.$router.push('/reversi/' + game.id);
|
||||||
|
} else {
|
||||||
|
// TODO: https://github.com/vuejs/vue-router/issues/703
|
||||||
|
this.$router.push('/reversi/' + game.id);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
@ -4,9 +4,11 @@
|
|||||||
|
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import Vue from 'vue';
|
import Vue from 'vue';
|
||||||
|
import * as config from '../../../config';
|
||||||
|
|
||||||
export default Vue.extend({
|
export default Vue.extend({
|
||||||
mounted() {
|
mounted() {
|
||||||
document.title = '%i18n:common.name% - %i18n:@title%';
|
document.title = `${config.name} - %i18n:@title%`;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
@ -7,6 +7,7 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import Vue from 'vue';
|
import Vue from 'vue';
|
||||||
import Progress from '../../../common/scripts/loading';
|
import Progress from '../../../common/scripts/loading';
|
||||||
|
import * as config from '../../../config';
|
||||||
|
|
||||||
export default Vue.extend({
|
export default Vue.extend({
|
||||||
props: {
|
props: {
|
||||||
@ -16,7 +17,7 @@ export default Vue.extend({
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
mounted() {
|
mounted() {
|
||||||
document.title = '%i18n:common.name%';
|
document.title = config.name;
|
||||||
|
|
||||||
Progress.start();
|
Progress.start();
|
||||||
},
|
},
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="pptjhabgjtt7kwskbfv4y3uml6fpuhmr">
|
<div class="pptjhabgjtt7kwskbfv4y3uml6fpuhmr">
|
||||||
<h1>{{'%i18n:@share-with%'.split("{}")[0] + '%i18n:common.name%' + '%i18n:@share-with%'.split("{}")[1]}}</h1>
|
<h1>{{ '%i18n:@share-with%'.replace('{}', name) }}</h1>
|
||||||
<div>
|
<div>
|
||||||
<mk-signin v-if="!$store.getters.isSignedIn"/>
|
<mk-signin v-if="!$store.getters.isSignedIn"/>
|
||||||
<mk-post-form v-else-if="!posted" :initial-text="text" :instant="true" @posted="posted = true"/>
|
<mk-post-form v-else-if="!posted" :initial-text="text" :instant="true" @posted="posted = true"/>
|
||||||
@ -12,10 +12,12 @@
|
|||||||
|
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import Vue from 'vue';
|
import Vue from 'vue';
|
||||||
|
import * as config from '../../../config';
|
||||||
|
|
||||||
export default Vue.extend({
|
export default Vue.extend({
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
|
name: config.name,
|
||||||
posted: false,
|
posted: false,
|
||||||
text: new URLSearchParams(location.search).get('text')
|
text: new URLSearchParams(location.search).get('text')
|
||||||
};
|
};
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
<span v-if="user.isMuted">%fa:eye% %i18n:@unmute%</span>
|
<span v-if="user.isMuted">%fa:eye% %i18n:@unmute%</span>
|
||||||
<span v-if="!user.isMuted">%fa:eye-slash% %i18n:@mute%</span>
|
<span v-if="!user.isMuted">%fa:eye-slash% %i18n:@mute%</span>
|
||||||
</button>
|
</button>
|
||||||
<button class="mute ui" @click="list">%fa:list% リストに追加</button>
|
<button class="mute ui" @click="list">%fa:list% %i18n:@push-to-a-list%</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
@ -76,7 +76,7 @@ export default Vue.extend({
|
|||||||
});
|
});
|
||||||
(this as any).apis.dialog({
|
(this as any).apis.dialog({
|
||||||
title: 'Done!',
|
title: 'Done!',
|
||||||
text: `${this.user.name}を${list.title}に追加しました。`
|
text: '%i18n:@list-pushed%'.replace('{user}', this.user.name).replace('{list}', list.title)
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -68,7 +68,6 @@ export default Vue.extend({
|
|||||||
this.user = user;
|
this.user = user;
|
||||||
this.fetching = false;
|
this.fetching = false;
|
||||||
Progress.done();
|
Progress.done();
|
||||||
document.title = getUserName(this.user) + ' | %i18n:common.name%';
|
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
<div class="body" :style="{ backgroundImage: `url('${ welcomeBgUrl }')` }">
|
<div class="body" :style="{ backgroundImage: `url('${ welcomeBgUrl }')` }">
|
||||||
<div class="container">
|
<div class="container">
|
||||||
<div class="info">
|
<div class="info">
|
||||||
<span>%i18n:common.name% <b>{{ host }}</b></span>
|
<span><b>{{ host }}</b></span>
|
||||||
<span class="stats" v-if="stats">
|
<span class="stats" v-if="stats">
|
||||||
<span>%fa:user% {{ stats.originalUsersCount | number }}</span>
|
<span>%fa:user% {{ stats.originalUsersCount | number }}</span>
|
||||||
<span>%fa:pencil-alt% {{ stats.originalNotesCount | number }}</span>
|
<span>%fa:pencil-alt% {{ stats.originalNotesCount | number }}</span>
|
||||||
@ -16,9 +16,9 @@
|
|||||||
</div>
|
</div>
|
||||||
<main>
|
<main>
|
||||||
<div class="about">
|
<div class="about">
|
||||||
<h1 v-if="name">{{ name }}</h1>
|
<h1 v-if="name != 'Misskey'">{{ name }}</h1>
|
||||||
<h1 v-else><img :src="$store.state.device.darkmode ? 'assets/title.dark.svg' : 'assets/title.light.svg'" alt="%i18n:common.name%"></h1>
|
<h1 v-else><img :src="$store.state.device.darkmode ? 'assets/title.dark.svg' : 'assets/title.light.svg'" :alt="name"></h1>
|
||||||
<p class="powerd-by" v-if="name">%i18n:@powered-by-misskey%</p>
|
<p class="powerd-by" v-if="name != 'Misskey'">%i18n:@powered-by-misskey%</p>
|
||||||
<p class="desc" v-html="description || '%i18n:common.about%'"></p>
|
<p class="desc" v-html="description || '%i18n:common.about%'"></p>
|
||||||
<a ref="signup" @click="signup">📦 %i18n:@signup%</a>
|
<a ref="signup" @click="signup">📦 %i18n:@signup%</a>
|
||||||
</div>
|
</div>
|
||||||
@ -32,7 +32,7 @@
|
|||||||
<mk-nav class="nav"/>
|
<mk-nav class="nav"/>
|
||||||
</div>
|
</div>
|
||||||
<mk-forkit class="forkit"/>
|
<mk-forkit class="forkit"/>
|
||||||
<img src="assets/title.dark.svg" alt="%i18n:common.name%">
|
<img src="assets/title.dark.svg" :alt="name">
|
||||||
</div>
|
</div>
|
||||||
<div class="tl">
|
<div class="tl">
|
||||||
<mk-welcome-timeline :max="20"/>
|
<mk-welcome-timeline :max="20"/>
|
||||||
|
@ -55,7 +55,7 @@ export default define({
|
|||||||
}).then(data => {
|
}).then(data => {
|
||||||
this.clear();
|
this.clear();
|
||||||
}).catch(err => {
|
}).catch(err => {
|
||||||
alert('失敗した');
|
alert('Something happened');
|
||||||
}).then(() => {
|
}).then(() => {
|
||||||
this.posting = false;
|
this.posting = false;
|
||||||
});
|
});
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
<template>
|
<template>
|
||||||
<mk-ui>
|
<mk-ui>
|
||||||
<p v-if="fetching">読み込み中</p>
|
<p v-if="fetching">%i18n:common.loading%</p>
|
||||||
<b-card v-if="!fetching" :header="app.name">
|
<b-card v-if="!fetching" :header="app.name">
|
||||||
<b-form-group label="App Secret">
|
<b-form-group label="App Secret">
|
||||||
<b-input :value="app.secret" readonly/>
|
<b-input :value="app.secret" readonly/>
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
<template>
|
<template>
|
||||||
<mk-ui>
|
<mk-ui>
|
||||||
<b-button to="/apps" variant="primary">アプリの管理</b-button>
|
<b-button to="/apps" variant="primary">%i18n:@manage-apps%</b-button>
|
||||||
</mk-ui>
|
</mk-ui>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
<template>
|
<template>
|
||||||
<div>
|
<div>
|
||||||
<b-navbar toggleable="md" type="dark" variant="info">
|
<b-navbar toggleable="md" type="dark" variant="info">
|
||||||
<b-navbar-brand>%i18n:common.name% Developers</b-navbar-brand>
|
<b-navbar-brand>Developers</b-navbar-brand>
|
||||||
<b-navbar-nav>
|
<b-navbar-nav>
|
||||||
<b-nav-item to="/">Home</b-nav-item>
|
<b-nav-item to="/">Home</b-nav-item>
|
||||||
<b-nav-item to="/apps">Apps</b-nav-item>
|
<b-nav-item to="/apps">Apps</b-nav-item>
|
||||||
|
@ -55,7 +55,7 @@ Vue.mixin({
|
|||||||
|
|
||||||
console.info(`Misskey v${version} (${codename})`);
|
console.info(`Misskey v${version} (${codename})`);
|
||||||
console.info(
|
console.info(
|
||||||
'%cここにコードを入力したり張り付けたりしないでください。アカウントが不正利用される可能性があります。',
|
'%c%i18n:common.do-not-copy-paste%',
|
||||||
'color: red; background: yellow; font-size: 16px; font-weight: bold;');
|
'color: red; background: yellow; font-size: 16px; font-weight: bold;');
|
||||||
|
|
||||||
// BootTimer解除
|
// BootTimer解除
|
||||||
|
@ -38,6 +38,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 * as config from '../../../config';
|
||||||
|
|
||||||
const displayLimit = 30;
|
const displayLimit = 30;
|
||||||
|
|
||||||
@ -66,7 +67,7 @@ export default Vue.extend({
|
|||||||
const date = new Date(note.createdAt).getDate();
|
const date = new Date(note.createdAt).getDate();
|
||||||
const month = new Date(note.createdAt).getMonth() + 1;
|
const month = new Date(note.createdAt).getMonth() + 1;
|
||||||
note._date = date;
|
note._date = date;
|
||||||
note._datetext = `${month}月 ${date}日`;
|
note._datetext = '%i18n:common.month-and-day%'.replace('{month}', month.toString()).replace('{day}', date.toString());
|
||||||
return note;
|
return note;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -183,7 +184,7 @@ export default Vue.extend({
|
|||||||
|
|
||||||
clearNotification() {
|
clearNotification() {
|
||||||
this.unreadCount = 0;
|
this.unreadCount = 0;
|
||||||
document.title = '%i18n:common.name%';
|
document.title = config.name;
|
||||||
},
|
},
|
||||||
|
|
||||||
onVisibilitychange() {
|
onVisibilitychange() {
|
||||||
|
@ -42,7 +42,7 @@ export default Vue.extend({
|
|||||||
const date = new Date(notification.createdAt).getDate();
|
const date = new Date(notification.createdAt).getDate();
|
||||||
const month = new Date(notification.createdAt).getMonth() + 1;
|
const month = new Date(notification.createdAt).getMonth() + 1;
|
||||||
notification._date = date;
|
notification._date = date;
|
||||||
notification._datetext = `${month}月 ${date}日`;
|
notification._datetext = '%i18n:common.month-and-day%'.replace('{month}', month.toString()).replace('{day}', date.toString());
|
||||||
return notification;
|
return notification;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -3,12 +3,12 @@
|
|||||||
<mk-special-message/>
|
<mk-special-message/>
|
||||||
<div class="main" ref="main">
|
<div class="main" ref="main">
|
||||||
<div class="backdrop"></div>
|
<div class="backdrop"></div>
|
||||||
<p ref="welcomeback" v-if="$store.getters.isSignedIn">%i18n:@welcome-back%<b>{{ $store.state.i | userName }}</b>さん</p>
|
<p ref="welcomeback" v-if="$store.getters.isSignedIn">%i18n:@welcome-back%<b>{{ $store.state.i | userName }}</b>%i18n:@adjective%</p>
|
||||||
<div class="content" ref="mainContainer">
|
<div class="content" ref="mainContainer">
|
||||||
<button class="nav" @click="$parent.isDrawerOpening = true">%fa:bars%</button>
|
<button class="nav" @click="$parent.isDrawerOpening = true">%fa:bars%</button>
|
||||||
<template v-if="hasUnreadNotification || hasUnreadMessagingMessage || hasGameInvitation">%fa:circle%</template>
|
<template v-if="hasUnreadNotification || hasUnreadMessagingMessage || hasGameInvitation">%fa:circle%</template>
|
||||||
<h1>
|
<h1>
|
||||||
<slot>%i18n:common.name%</slot>
|
<slot>config.name</slot>
|
||||||
</h1>
|
</h1>
|
||||||
<slot name="func"></slot>
|
<slot name="func"></slot>
|
||||||
</div>
|
</div>
|
||||||
@ -20,11 +20,13 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import Vue from 'vue';
|
import Vue from 'vue';
|
||||||
import * as anime from 'animejs';
|
import * as anime from 'animejs';
|
||||||
|
import * as config from '../../../config';
|
||||||
|
|
||||||
export default Vue.extend({
|
export default Vue.extend({
|
||||||
props: ['func'],
|
props: ['func'],
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
|
config,
|
||||||
hasGameInvitation: false,
|
hasGameInvitation: false,
|
||||||
connection: null,
|
connection: null,
|
||||||
connectionId: null
|
connectionId: null
|
||||||
|
@ -25,6 +25,7 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import Vue from 'vue';
|
import Vue from 'vue';
|
||||||
import Progress from '../../../common/scripts/loading';
|
import Progress from '../../../common/scripts/loading';
|
||||||
|
import * as config from '../../../config';
|
||||||
|
|
||||||
export default Vue.extend({
|
export default Vue.extend({
|
||||||
data() {
|
data() {
|
||||||
@ -43,7 +44,7 @@ export default Vue.extend({
|
|||||||
window.addEventListener('popstate', this.onPopState);
|
window.addEventListener('popstate', this.onPopState);
|
||||||
},
|
},
|
||||||
mounted() {
|
mounted() {
|
||||||
document.title = '%i18n:common.name% Drive';
|
document.title = `${config.name} Drive`;
|
||||||
document.documentElement.style.background = '#fff';
|
document.documentElement.style.background = '#fff';
|
||||||
},
|
},
|
||||||
beforeDestroy() {
|
beforeDestroy() {
|
||||||
@ -63,7 +64,7 @@ export default Vue.extend({
|
|||||||
(this.$refs as any).browser.openContextMenu();
|
(this.$refs as any).browser.openContextMenu();
|
||||||
},
|
},
|
||||||
onMoveRoot(silent) {
|
onMoveRoot(silent) {
|
||||||
const title = '%i18n:common.name% Drive';
|
const title = `${config.name} Drive`;
|
||||||
|
|
||||||
if (!silent) {
|
if (!silent) {
|
||||||
// Rewrite URL
|
// Rewrite URL
|
||||||
@ -76,7 +77,7 @@ export default Vue.extend({
|
|||||||
this.folder = null;
|
this.folder = null;
|
||||||
},
|
},
|
||||||
onOpenFolder(folder, silent) {
|
onOpenFolder(folder, silent) {
|
||||||
const title = folder.name + ' | %i18n:common.name% Drive';
|
const title = `${folder.name} | ${config.name} Drive`;
|
||||||
|
|
||||||
if (!silent) {
|
if (!silent) {
|
||||||
// Rewrite URL
|
// Rewrite URL
|
||||||
@ -89,7 +90,7 @@ export default Vue.extend({
|
|||||||
this.folder = folder;
|
this.folder = folder;
|
||||||
},
|
},
|
||||||
onOpenFile(file, silent) {
|
onOpenFile(file, silent) {
|
||||||
const title = file.name + ' | %i18n:common.name% Drive';
|
const title = `${file.name} | ${config.name} Drive`;
|
||||||
|
|
||||||
if (!silent) {
|
if (!silent) {
|
||||||
// Rewrite URL
|
// Rewrite URL
|
||||||
|
@ -14,6 +14,7 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import Vue from 'vue';
|
import Vue from 'vue';
|
||||||
import Progress from '../../../common/scripts/loading';
|
import Progress from '../../../common/scripts/loading';
|
||||||
|
import * as config from '../../../config';
|
||||||
|
|
||||||
export default Vue.extend({
|
export default Vue.extend({
|
||||||
data() {
|
data() {
|
||||||
@ -28,7 +29,7 @@ export default Vue.extend({
|
|||||||
this.fetch();
|
this.fetch();
|
||||||
},
|
},
|
||||||
mounted() {
|
mounted() {
|
||||||
document.title = '%i18n:common.name% | %i18n:@notifications%';
|
document.title = `${config.name} | %i18n:@notifications%`;
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
fetch() {
|
fetch() {
|
||||||
|
@ -21,6 +21,7 @@ import Vue from 'vue';
|
|||||||
import Progress from '../../../common/scripts/loading';
|
import Progress from '../../../common/scripts/loading';
|
||||||
import parseAcct from '../../../../../misc/acct/parse';
|
import parseAcct from '../../../../../misc/acct/parse';
|
||||||
import getUserName from '../../../../../misc/get-user-name';
|
import getUserName from '../../../../../misc/get-user-name';
|
||||||
|
import * as config from '../../../config';
|
||||||
|
|
||||||
export default Vue.extend({
|
export default Vue.extend({
|
||||||
data() {
|
data() {
|
||||||
@ -49,7 +50,7 @@ export default Vue.extend({
|
|||||||
this.user = user;
|
this.user = user;
|
||||||
this.fetching = false;
|
this.fetching = false;
|
||||||
|
|
||||||
document.title = '%i18n:@followers-of%'.replace('{}', this.name) + ' | %i18n:common.name%';
|
document.title = '%i18n:@followers-of%'.replace('{}', this.name) + ' | ' + config.name;
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
onLoaded() {
|
onLoaded() {
|
||||||
|
@ -20,6 +20,7 @@
|
|||||||
import Vue from 'vue';
|
import Vue from 'vue';
|
||||||
import Progress from '../../../common/scripts/loading';
|
import Progress from '../../../common/scripts/loading';
|
||||||
import parseAcct from '../../../../../misc/acct/parse';
|
import parseAcct from '../../../../../misc/acct/parse';
|
||||||
|
import * as config from '../../../config';
|
||||||
|
|
||||||
export default Vue.extend({
|
export default Vue.extend({
|
||||||
data() {
|
data() {
|
||||||
@ -48,7 +49,7 @@ export default Vue.extend({
|
|||||||
this.user = user;
|
this.user = user;
|
||||||
this.fetching = false;
|
this.fetching = false;
|
||||||
|
|
||||||
document.title = '%i18n:@followers-of%'.replace('{}', this.name) + ' | %i18n:common.name%';
|
document.title = '%i18n:@followers-of%'.replace('{}', this.name) + ' | ' + config.name;
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
onLoaded() {
|
onLoaded() {
|
||||||
|
@ -1,21 +1,27 @@
|
|||||||
<template>
|
<template>
|
||||||
<mk-ui>
|
<mk-ui>
|
||||||
<span slot="header">%fa:gamepad%%i18n:@reversi%</span>
|
<span slot="header">%fa:gamepad%%i18n:@reversi%</span>
|
||||||
<mk-reversi :game-id="$route.params.game" @nav="nav"/>
|
<mk-reversi :game-id="$route.params.game" @nav="nav" :self-nav="false"/>
|
||||||
</mk-ui>
|
</mk-ui>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import Vue from 'vue';
|
import Vue from 'vue';
|
||||||
|
import * as config from '../../../../config';
|
||||||
|
|
||||||
export default Vue.extend({
|
export default Vue.extend({
|
||||||
mounted() {
|
mounted() {
|
||||||
document.title = '%i18n:common.name% %i18n:@reversi%';
|
document.title = `${config.name} %i18n:@reversi%`;
|
||||||
document.documentElement.style.background = '#fff';
|
document.documentElement.style.background = '#fff';
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
nav(game) {
|
nav(game, actualNav) {
|
||||||
history.pushState(null, null, '/reversi/' + game.id);
|
if (actualNav) {
|
||||||
|
this.$router.push('/reversi/' + game.id);
|
||||||
|
} else {
|
||||||
|
// TODO: https://github.com/vuejs/vue-router/issues/703
|
||||||
|
this.$router.push('/reversi/' + game.id);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -49,6 +49,7 @@
|
|||||||
import Vue from 'vue';
|
import Vue from 'vue';
|
||||||
import Progress from '../../../common/scripts/loading';
|
import Progress from '../../../common/scripts/loading';
|
||||||
import XTl from './home.timeline.vue';
|
import XTl from './home.timeline.vue';
|
||||||
|
import * as config from '../../../config';
|
||||||
|
|
||||||
export default Vue.extend({
|
export default Vue.extend({
|
||||||
components: {
|
components: {
|
||||||
@ -96,7 +97,7 @@ export default Vue.extend({
|
|||||||
},
|
},
|
||||||
|
|
||||||
mounted() {
|
mounted() {
|
||||||
document.title = '%i18n:common.name%';
|
document.title = config.name;
|
||||||
|
|
||||||
Progress.start();
|
Progress.start();
|
||||||
|
|
||||||
|
@ -11,6 +11,7 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import Vue from 'vue';
|
import Vue from 'vue';
|
||||||
import parseAcct from '../../../../../misc/acct/parse';
|
import parseAcct from '../../../../../misc/acct/parse';
|
||||||
|
import * as config from '../../../config';
|
||||||
|
|
||||||
export default Vue.extend({
|
export default Vue.extend({
|
||||||
data() {
|
data() {
|
||||||
@ -47,7 +48,7 @@ export default Vue.extend({
|
|||||||
this.user = user;
|
this.user = user;
|
||||||
this.fetching = false;
|
this.fetching = false;
|
||||||
|
|
||||||
document.title = `%i18n:@messaging%: ${Vue.filter('userName')(this.user)} | %i18n:common.name%`;
|
document.title = `%i18n:@messaging%: ${Vue.filter('userName')(this.user)} | ${config.name}`;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -8,10 +8,11 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import Vue from 'vue';
|
import Vue from 'vue';
|
||||||
import getAcct from '../../../../../misc/acct/render';
|
import getAcct from '../../../../../misc/acct/render';
|
||||||
|
import * as config from '../../../config';
|
||||||
|
|
||||||
export default Vue.extend({
|
export default Vue.extend({
|
||||||
mounted() {
|
mounted() {
|
||||||
document.title = '%i18n:common.name% %i18n:@messaging%';
|
document.title = `${config.name} %i18n:@messaging%`;
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
navigate(user) {
|
navigate(user) {
|
||||||
|
@ -16,6 +16,7 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import Vue from 'vue';
|
import Vue from 'vue';
|
||||||
import Progress from '../../../common/scripts/loading';
|
import Progress from '../../../common/scripts/loading';
|
||||||
|
import * as config from '../../../config';
|
||||||
|
|
||||||
export default Vue.extend({
|
export default Vue.extend({
|
||||||
data() {
|
data() {
|
||||||
@ -31,7 +32,7 @@ export default Vue.extend({
|
|||||||
this.fetch();
|
this.fetch();
|
||||||
},
|
},
|
||||||
mounted() {
|
mounted() {
|
||||||
document.title = '%i18n:common.name%';
|
document.title = config.name;
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
fetch() {
|
fetch() {
|
||||||
|
@ -15,7 +15,7 @@ import Progress from '../../../common/scripts/loading';
|
|||||||
|
|
||||||
export default Vue.extend({
|
export default Vue.extend({
|
||||||
mounted() {
|
mounted() {
|
||||||
document.title = '%i18n:common.name% | %i18n:@notifications%';
|
document.title = '%i18n:@notifications%';
|
||||||
|
|
||||||
Progress.start();
|
Progress.start();
|
||||||
},
|
},
|
||||||
|
@ -25,7 +25,7 @@ export default Vue.extend({
|
|||||||
};
|
};
|
||||||
},
|
},
|
||||||
mounted() {
|
mounted() {
|
||||||
document.title = '%i18n:common.name% | %i18n:@title%';
|
document.title = '%i18n:@title%';
|
||||||
|
|
||||||
Progress.start();
|
Progress.start();
|
||||||
|
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
<span slot="header">%fa:search% {{ q }}</span>
|
<span slot="header">%fa:search% {{ q }}</span>
|
||||||
|
|
||||||
<main>
|
<main>
|
||||||
<p v-if="!fetching && empty">%fa:search%「{{ q }}」に関する投稿は見つかりませんでした。</p>
|
<p :class="$style.empty" v-if="!fetching && empty">%fa:search% {{ '%i18n:not-found%'.split('{}')[0] }}{{ q }}{{ '%i18n:not-found%'.split('{}')[1] }}</p>
|
||||||
<mk-notes ref="timeline" :more="existMore ? more : null"/>
|
<mk-notes ref="timeline" :more="existMore ? more : null"/>
|
||||||
</main>
|
</main>
|
||||||
</mk-ui>
|
</mk-ui>
|
||||||
@ -12,6 +12,7 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import Vue from 'vue';
|
import Vue from 'vue';
|
||||||
import Progress from '../../../common/scripts/loading';
|
import Progress from '../../../common/scripts/loading';
|
||||||
|
import * as config from '../../../config';
|
||||||
|
|
||||||
const limit = 20;
|
const limit = 20;
|
||||||
|
|
||||||
@ -34,7 +35,7 @@ export default Vue.extend({
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
mounted() {
|
mounted() {
|
||||||
document.title = `%i18n:@search%: ${this.q} | %i18n:common.name%`;
|
document.title = `%i18n:@search%: ${this.q} | ${config.name}`;
|
||||||
|
|
||||||
this.fetch();
|
this.fetch();
|
||||||
},
|
},
|
||||||
|
@ -14,6 +14,7 @@
|
|||||||
<ui-switch v-model="$store.state.settings.circleIcons" @change="onChangeCircleIcons">%i18n:@circle-icons%</ui-switch>
|
<ui-switch v-model="$store.state.settings.circleIcons" @change="onChangeCircleIcons">%i18n:@circle-icons%</ui-switch>
|
||||||
<ui-switch v-model="$store.state.settings.iLikeSushi" @change="onChangeILikeSushi">%i18n:common.i-like-sushi%</ui-switch>
|
<ui-switch v-model="$store.state.settings.iLikeSushi" @change="onChangeILikeSushi">%i18n:common.i-like-sushi%</ui-switch>
|
||||||
<ui-switch v-model="$store.state.settings.reversiBoardLabels" @change="onChangeReversiBoardLabels">%i18n:common.show-reversi-board-labels%</ui-switch>
|
<ui-switch v-model="$store.state.settings.reversiBoardLabels" @change="onChangeReversiBoardLabels">%i18n:common.show-reversi-board-labels%</ui-switch>
|
||||||
|
<ui-switch v-model="$store.state.settings.disableAnimatedMfm" @change="onChangeDisableAnimatedMfm">%i18n:common.disable-animated-mfm%</ui-switch>
|
||||||
|
|
||||||
<div>
|
<div>
|
||||||
<div>%i18n:@timeline%</div>
|
<div>%i18n:@timeline%</div>
|
||||||
@ -142,7 +143,7 @@ export default Vue.extend({
|
|||||||
},
|
},
|
||||||
|
|
||||||
mounted() {
|
mounted() {
|
||||||
document.title = '%i18n:common.name% | %i18n:@settings%';
|
document.title = '%i18n:@settings%';
|
||||||
},
|
},
|
||||||
|
|
||||||
methods: {
|
methods: {
|
||||||
@ -192,6 +193,13 @@ export default Vue.extend({
|
|||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
|
onChangeDisableAnimatedMfm(v) {
|
||||||
|
this.$store.dispatch('settings/set', {
|
||||||
|
key: 'disableAnimatedMfm',
|
||||||
|
value: v
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
onChangeShowReplyTarget(v) {
|
onChangeShowReplyTarget(v) {
|
||||||
this.$store.dispatch('settings/set', {
|
this.$store.dispatch('settings/set', {
|
||||||
key: 'showReplyTarget',
|
key: 'showReplyTarget',
|
||||||
|
@ -1,21 +1,23 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="azibmfpleajagva420swmu4c3r7ni7iw">
|
<div class="azibmfpleajagva420swmu4c3r7ni7iw">
|
||||||
<h1>{{'%i18n:@share-with%'.split("{}")[0] + '%i18n:common.name%' + '%i18n:@share-with%'.split("{}")[1]}}</h1>
|
<h1>{{ '%i18n:@share-with%'.replace('{}', name) }}</h1>
|
||||||
<div>
|
<div>
|
||||||
<mk-signin v-if="!$store.getters.isSignedIn"/>
|
<mk-signin v-if="!$store.getters.isSignedIn"/>
|
||||||
<mk-post-form v-else-if="!posted" :initial-text="text" :instant="true" @posted="posted = true"/>
|
<mk-post-form v-else-if="!posted" :initial-text="text" :instant="true" @posted="posted = true"/>
|
||||||
<p v-if="posted" class="posted">%fa:check%</p>
|
<p v-if="posted" class="posted">%fa:check%</p>
|
||||||
</div>
|
</div>
|
||||||
<ui-button class="close" v-if="posted" @click="close">閉じる</ui-button>
|
<ui-button class="close" v-if="posted" @click="close">%i18n:common.close%</ui-button>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import Vue from 'vue';
|
import Vue from 'vue';
|
||||||
|
import * as config from '../../../config';
|
||||||
|
|
||||||
export default Vue.extend({
|
export default Vue.extend({
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
|
name: config.name,
|
||||||
posted: false,
|
posted: false,
|
||||||
text: new URLSearchParams(location.search).get('text')
|
text: new URLSearchParams(location.search).get('text')
|
||||||
};
|
};
|
||||||
|
@ -23,7 +23,7 @@ export default Vue.extend({
|
|||||||
};
|
};
|
||||||
},
|
},
|
||||||
mounted() {
|
mounted() {
|
||||||
document.title = '%i18n:common.name% | %i18n:@title%';
|
document.title = '%i18n:@title%';
|
||||||
|
|
||||||
Progress.start();
|
Progress.start();
|
||||||
|
|
||||||
|
@ -67,6 +67,7 @@ import * as age from 's-age';
|
|||||||
import parseAcct from '../../../../../misc/acct/parse';
|
import parseAcct from '../../../../../misc/acct/parse';
|
||||||
import Progress from '../../../common/scripts/loading';
|
import Progress from '../../../common/scripts/loading';
|
||||||
import XHome from './user/home.vue';
|
import XHome from './user/home.vue';
|
||||||
|
import * as config from '../../../config';
|
||||||
|
|
||||||
export default Vue.extend({
|
export default Vue.extend({
|
||||||
components: {
|
components: {
|
||||||
@ -106,7 +107,7 @@ export default Vue.extend({
|
|||||||
this.fetching = false;
|
this.fetching = false;
|
||||||
|
|
||||||
Progress.done();
|
Progress.done();
|
||||||
document.title = Vue.filter('userName')(this.user) + ' | %i18n:common.name%';
|
document.title = Vue.filter('userName')(this.user) + ' | ' + config.name;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,10 +1,10 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="welcome">
|
<div class="welcome">
|
||||||
<div>
|
<div>
|
||||||
<img :src="$store.state.device.darkmode ? 'assets/title.dark.svg' : 'assets/title.light.svg'" alt="%i18n:common.name%">
|
<img :src="$store.state.device.darkmode ? 'assets/title.dark.svg' : 'assets/title.light.svg'" :alt="name">
|
||||||
<p class="host">{{ host }}</p>
|
<p class="host">{{ host }}</p>
|
||||||
<div class="about">
|
<div class="about">
|
||||||
<h2>{{ name || 'unidentified' }}</h2>
|
<h2>{{ name }}</h2>
|
||||||
<p v-html="description || '%i18n:common.about%'"></p>
|
<p v-html="description || '%i18n:common.about%'"></p>
|
||||||
<router-link class="signup" to="/signup">%i18n:@signup%</router-link>
|
<router-link class="signup" to="/signup">%i18n:@signup%</router-link>
|
||||||
</div>
|
</div>
|
||||||
|
@ -24,8 +24,8 @@
|
|||||||
<option value="nav">%i18n:common.widgets.nav%</option>
|
<option value="nav">%i18n:common.widgets.nav%</option>
|
||||||
<option value="tips">%i18n:common.widgets.tips%</option>
|
<option value="tips">%i18n:common.widgets.tips%</option>
|
||||||
</select>
|
</select>
|
||||||
<button @click="addWidget">追加</button>
|
<button @click="addWidget">%i18n:add-widget%</button>
|
||||||
<p><a @click="hint">カスタマイズのヒント</a></p>
|
<p><a @click="hint">%i18n:customization-tips%</a></p>
|
||||||
</header>
|
</header>
|
||||||
<x-draggable
|
<x-draggable
|
||||||
:list="widgets"
|
:list="widgets"
|
||||||
@ -53,6 +53,7 @@
|
|||||||
import Vue from 'vue';
|
import Vue from 'vue';
|
||||||
import * as XDraggable from 'vuedraggable';
|
import * as XDraggable from 'vuedraggable';
|
||||||
import * as uuid from 'uuid';
|
import * as uuid from 'uuid';
|
||||||
|
import * as config from '../../../config';
|
||||||
|
|
||||||
export default Vue.extend({
|
export default Vue.extend({
|
||||||
components: {
|
components: {
|
||||||
@ -102,7 +103,7 @@ export default Vue.extend({
|
|||||||
},
|
},
|
||||||
|
|
||||||
mounted() {
|
mounted() {
|
||||||
document.title = '%i18n:common.name%';
|
document.title = config.name;
|
||||||
},
|
},
|
||||||
|
|
||||||
methods: {
|
methods: {
|
||||||
|
@ -47,6 +47,8 @@ export default function load() {
|
|||||||
if (config.localDriveCapacityMb == null) config.localDriveCapacityMb = 256;
|
if (config.localDriveCapacityMb == null) config.localDriveCapacityMb = 256;
|
||||||
if (config.remoteDriveCapacityMb == null) config.remoteDriveCapacityMb = 8;
|
if (config.remoteDriveCapacityMb == null) config.remoteDriveCapacityMb = 8;
|
||||||
|
|
||||||
|
if (config.name == null) config.name = 'Misskey';
|
||||||
|
|
||||||
return Object.assign(config, mixin);
|
return Object.assign(config, mixin);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -172,3 +172,6 @@ type: `textbox`
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
メッセージの種類: `success`, `info`, `warning`, `error`。
|
メッセージの種類: `success`, `info`, `warning`, `error`。
|
||||||
|
|
||||||
|
## 投了する
|
||||||
|
投了をするには、<a href="./api/endpoints/games/reversi/games/surrender">このエンドポイント</a>にリクエストします。
|
||||||
|
@ -4,6 +4,8 @@
|
|||||||
|
|
||||||
Error.stackTraceLimit = Infinity;
|
Error.stackTraceLimit = Infinity;
|
||||||
|
|
||||||
|
require('events').EventEmitter.defaultMaxListeners = 128;
|
||||||
|
|
||||||
import * as os from 'os';
|
import * as os from 'os';
|
||||||
import * as cluster from 'cluster';
|
import * as cluster from 'cluster';
|
||||||
import * as debug from 'debug';
|
import * as debug from 'debug';
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
const { lib: emojilib } = require('emojilib');
|
const { lib: emojilib } = require('emojilib');
|
||||||
const JSDOM = require('jsdom');
|
const jsdom = require('jsdom');
|
||||||
|
const { JSDOM } = jsdom;
|
||||||
import config from '../config';
|
import config from '../config';
|
||||||
import { INote } from '../models/note';
|
import { INote } from '../models/note';
|
||||||
import { TextElement } from './parse';
|
import { TextElement } from './parse';
|
||||||
@ -17,6 +18,12 @@ const handlers: { [key: string]: (window: any, token: any, mentionedRemoteUsers:
|
|||||||
document.body.appendChild(b);
|
document.body.appendChild(b);
|
||||||
},
|
},
|
||||||
|
|
||||||
|
motion({ document }, { big }) {
|
||||||
|
const b = document.createElement('strong');
|
||||||
|
b.textContent = big;
|
||||||
|
document.body.appendChild(b);
|
||||||
|
},
|
||||||
|
|
||||||
code({ document }, { code }) {
|
code({ document }, { code }) {
|
||||||
const pre = document.createElement('pre');
|
const pre = document.createElement('pre');
|
||||||
const inner = document.createElement('code');
|
const inner = document.createElement('code');
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/**
|
/**
|
||||||
* Bold
|
* Big
|
||||||
*/
|
*/
|
||||||
|
|
||||||
export type TextElementBig = {
|
export type TextElementBig = {
|
||||||
|
20
src/mfm/parse/elements/motion.ts
Normal file
20
src/mfm/parse/elements/motion.ts
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
/**
|
||||||
|
* Motion
|
||||||
|
*/
|
||||||
|
|
||||||
|
export type TextElementMotion = {
|
||||||
|
type: 'motion'
|
||||||
|
content: string
|
||||||
|
motion: string
|
||||||
|
};
|
||||||
|
|
||||||
|
export default function(text: string) {
|
||||||
|
const match = text.match(/^\(\(\((.+?)\)\)\)/) || text.match(/^<motion>(.+?)<\/motion>/);
|
||||||
|
if (!match) return null;
|
||||||
|
const motion = match[0];
|
||||||
|
return {
|
||||||
|
type: 'motion',
|
||||||
|
content: motion,
|
||||||
|
motion: match[1]
|
||||||
|
} as TextElementMotion;
|
||||||
|
}
|
@ -14,6 +14,7 @@ import { TextElementQuote } from './elements/quote';
|
|||||||
import { TextElementSearch } from './elements/search';
|
import { TextElementSearch } from './elements/search';
|
||||||
import { TextElementTitle } from './elements/title';
|
import { TextElementTitle } from './elements/title';
|
||||||
import { TextElementUrl } from './elements/url';
|
import { TextElementUrl } from './elements/url';
|
||||||
|
import { TextElementMotion } from './elements/motion';
|
||||||
|
|
||||||
const elements = [
|
const elements = [
|
||||||
require('./elements/big'),
|
require('./elements/big'),
|
||||||
@ -27,7 +28,8 @@ const elements = [
|
|||||||
require('./elements/inline-code'),
|
require('./elements/inline-code'),
|
||||||
require('./elements/quote'),
|
require('./elements/quote'),
|
||||||
require('./elements/emoji'),
|
require('./elements/emoji'),
|
||||||
require('./elements/search')
|
require('./elements/search'),
|
||||||
|
require('./elements/motion')
|
||||||
].map(element => element.default as TextElementProcessor);
|
].map(element => element.default as TextElementProcessor);
|
||||||
|
|
||||||
export type TextElement = { type: 'text', content: string }
|
export type TextElement = { type: 'text', content: string }
|
||||||
@ -42,7 +44,8 @@ export type TextElement = { type: 'text', content: string }
|
|||||||
| TextElementQuote
|
| TextElementQuote
|
||||||
| TextElementSearch
|
| TextElementSearch
|
||||||
| TextElementTitle
|
| TextElementTitle
|
||||||
| TextElementUrl;
|
| TextElementUrl
|
||||||
|
| TextElementMotion;
|
||||||
export type TextElementProcessor = (text: string, i: number) => TextElement | TextElement[];
|
export type TextElementProcessor = (text: string, i: number) => TextElement | TextElement[];
|
||||||
|
|
||||||
export default (source: string): TextElement[] => {
|
export default (source: string): TextElement[] => {
|
||||||
|
@ -25,6 +25,7 @@ export interface IReversiGame {
|
|||||||
isStarted: boolean;
|
isStarted: boolean;
|
||||||
isEnded: boolean;
|
isEnded: boolean;
|
||||||
winnerId: mongo.ObjectID;
|
winnerId: mongo.ObjectID;
|
||||||
|
surrendered: mongo.ObjectID;
|
||||||
logs: Array<{
|
logs: Array<{
|
||||||
at: Date;
|
at: Date;
|
||||||
color: boolean;
|
color: boolean;
|
||||||
|
@ -7,6 +7,11 @@ export default async (job: bq.Job, done: any): Promise<void> => {
|
|||||||
await request(job.data.user, job.data.to, job.data.content);
|
await request(job.data.user, job.data.to, job.data.content);
|
||||||
done();
|
done();
|
||||||
} catch (res) {
|
} catch (res) {
|
||||||
|
if (!res.hasOwnProperty('statusCode')) {
|
||||||
|
console.warn(`deliver failed (unknown): ${res}`);
|
||||||
|
return done();
|
||||||
|
}
|
||||||
|
|
||||||
if (res.statusCode == null) return done();
|
if (res.statusCode == null) return done();
|
||||||
if (res.statusCode >= 400 && res.statusCode < 500) {
|
if (res.statusCode >= 400 && res.statusCode < 500) {
|
||||||
// HTTPステータスコード4xxはクライアントエラーであり、それはつまり
|
// HTTPステータスコード4xxはクライアントエラーであり、それはつまり
|
||||||
|
59
src/server/api/endpoints/games/reversi/games/surrender.ts
Normal file
59
src/server/api/endpoints/games/reversi/games/surrender.ts
Normal file
@ -0,0 +1,59 @@
|
|||||||
|
import $ from 'cafy'; import ID from '../../../../../../misc/cafy-id';
|
||||||
|
import ReversiGame, { pack } from '../../../../../../models/games/reversi/game';
|
||||||
|
import { ILocalUser } from '../../../../../../models/user';
|
||||||
|
import getParams from '../../../../get-params';
|
||||||
|
import { publishReversiGameStream } from '../../../../../../stream';
|
||||||
|
|
||||||
|
export const meta = {
|
||||||
|
desc: {
|
||||||
|
ja: '指定したリバーシの対局で投了します。'
|
||||||
|
},
|
||||||
|
|
||||||
|
requireCredential: true,
|
||||||
|
|
||||||
|
params: {
|
||||||
|
gameId: $.type(ID).note({
|
||||||
|
desc: {
|
||||||
|
ja: '投了したい対局'
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
export default (params: any, user: ILocalUser) => new Promise(async (res, rej) => {
|
||||||
|
const [ps, psErr] = getParams(meta, params);
|
||||||
|
if (psErr) return rej(psErr);
|
||||||
|
|
||||||
|
const game = await ReversiGame.findOne({ _id: ps.gameId });
|
||||||
|
|
||||||
|
if (game == null) {
|
||||||
|
return rej('game not found');
|
||||||
|
}
|
||||||
|
|
||||||
|
if (game.isEnded) {
|
||||||
|
return rej('this game is already ended');
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!game.user1Id.equals(user._id) && !game.user2Id.equals(user._id)) {
|
||||||
|
return rej('access denied');
|
||||||
|
}
|
||||||
|
|
||||||
|
const winnerId = game.user1Id.equals(user._id) ? game.user2Id : game.user1Id;
|
||||||
|
|
||||||
|
await ReversiGame.update({
|
||||||
|
_id: game._id
|
||||||
|
}, {
|
||||||
|
$set: {
|
||||||
|
surrendered: user._id,
|
||||||
|
isEnded: true,
|
||||||
|
winnerId: winnerId
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
publishReversiGameStream(game._id, 'ended', {
|
||||||
|
winnerId: winnerId,
|
||||||
|
game: await pack(game._id, user)
|
||||||
|
});
|
||||||
|
|
||||||
|
res();
|
||||||
|
});
|
@ -1,33 +1,156 @@
|
|||||||
import $ from 'cafy';
|
import $ from 'cafy';
|
||||||
import User, { pack, ILocalUser } from '../../../../models/user';
|
|
||||||
const escapeRegexp = require('escape-regexp');
|
const escapeRegexp = require('escape-regexp');
|
||||||
|
import User, { pack, ILocalUser, validateUsername, IUser } from '../../../../models/user';
|
||||||
|
import getParams from '../../get-params';
|
||||||
|
|
||||||
|
export const meta = {
|
||||||
|
desc: {
|
||||||
|
ja: 'ユーザーを検索します。'
|
||||||
|
},
|
||||||
|
|
||||||
|
requireCredential: false,
|
||||||
|
|
||||||
|
params: {
|
||||||
|
query: $.str.note({
|
||||||
|
desc: {
|
||||||
|
ja: 'クエリ'
|
||||||
|
}
|
||||||
|
}),
|
||||||
|
|
||||||
|
offset: $.num.optional.min(0).note({
|
||||||
|
default: 0,
|
||||||
|
desc: {
|
||||||
|
ja: 'オフセット'
|
||||||
|
}
|
||||||
|
}),
|
||||||
|
|
||||||
|
limit: $.num.optional.range(1, 100).note({
|
||||||
|
default: 10,
|
||||||
|
desc: {
|
||||||
|
ja: '取得する数'
|
||||||
|
}
|
||||||
|
}),
|
||||||
|
|
||||||
|
localOnly: $.bool.optional.note({
|
||||||
|
default: false,
|
||||||
|
desc: {
|
||||||
|
ja: 'ローカルユーザーのみ検索対象にするか否か'
|
||||||
|
}
|
||||||
|
}),
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Search a user
|
* Search a user
|
||||||
*/
|
*/
|
||||||
export default (params: any, me: ILocalUser) => new Promise(async (res, rej) => {
|
export default (params: any, me: ILocalUser) => new Promise(async (res, rej) => {
|
||||||
// Get 'query' parameter
|
const [ps, psErr] = getParams(meta, params);
|
||||||
const [query, queryError] = $.str.pipe(x => x != '').get(params.query);
|
if (psErr) return rej(psErr);
|
||||||
if (queryError) return rej('invalid query param');
|
|
||||||
|
|
||||||
// Get 'max' parameter
|
const isUsername = validateUsername(ps.query.replace('@', ''));
|
||||||
const [max = 10, maxErr] = $.num.optional.range(1, 30).get(params.max);
|
|
||||||
if (maxErr) return rej('invalid max param');
|
|
||||||
|
|
||||||
const escapedQuery = escapeRegexp(query);
|
let users: IUser[] = [];
|
||||||
|
|
||||||
// Search users
|
if (isUsername) {
|
||||||
const users = await User
|
users = await User
|
||||||
.find({
|
.find({
|
||||||
host: null,
|
host: null,
|
||||||
$or: [{
|
usernameLower: new RegExp('^' + escapeRegexp(ps.query.replace('@', '').toLowerCase()))
|
||||||
usernameLower: new RegExp(escapedQuery.replace('@', '').toLowerCase())
|
|
||||||
}, {
|
}, {
|
||||||
name: new RegExp(escapedQuery)
|
limit: ps.limit,
|
||||||
}]
|
skip: ps.offset
|
||||||
}, {
|
});
|
||||||
limit: max
|
|
||||||
});
|
if (users.length < ps.limit && !ps.localOnly) {
|
||||||
|
const otherUsers = await User
|
||||||
|
.find({
|
||||||
|
host: { $ne: null },
|
||||||
|
usernameLower: new RegExp('^' + escapeRegexp(ps.query.replace('@', '').toLowerCase()))
|
||||||
|
}, {
|
||||||
|
limit: ps.limit - users.length
|
||||||
|
});
|
||||||
|
|
||||||
|
users = users.concat(otherUsers);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (users.length < ps.limit) {
|
||||||
|
const otherUsers = await User
|
||||||
|
.find({
|
||||||
|
_id: { $nin: users.map(u => u._id) },
|
||||||
|
host: null,
|
||||||
|
usernameLower: new RegExp(escapeRegexp(ps.query.replace('@', '').toLowerCase()))
|
||||||
|
}, {
|
||||||
|
limit: ps.limit - users.length
|
||||||
|
});
|
||||||
|
|
||||||
|
users = users.concat(otherUsers);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (users.length < ps.limit && !ps.localOnly) {
|
||||||
|
const otherUsers = await User
|
||||||
|
.find({
|
||||||
|
_id: { $nin: users.map(u => u._id) },
|
||||||
|
host: { $ne: null },
|
||||||
|
usernameLower: new RegExp(escapeRegexp(ps.query.replace('@', '').toLowerCase()))
|
||||||
|
}, {
|
||||||
|
limit: ps.limit - users.length
|
||||||
|
});
|
||||||
|
|
||||||
|
users = users.concat(otherUsers);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (users.length < ps.limit) {
|
||||||
|
const otherUsers = await User
|
||||||
|
.find({
|
||||||
|
_id: { $nin: users.map(u => u._id) },
|
||||||
|
host: null,
|
||||||
|
name: new RegExp('^' + escapeRegexp(ps.query.toLowerCase()))
|
||||||
|
}, {
|
||||||
|
limit: ps.limit - users.length
|
||||||
|
});
|
||||||
|
|
||||||
|
users = users.concat(otherUsers);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (users.length < ps.limit && !ps.localOnly) {
|
||||||
|
const otherUsers = await User
|
||||||
|
.find({
|
||||||
|
_id: { $nin: users.map(u => u._id) },
|
||||||
|
host: { $ne: null },
|
||||||
|
name: new RegExp('^' + escapeRegexp(ps.query.toLowerCase()))
|
||||||
|
}, {
|
||||||
|
limit: ps.limit - users.length
|
||||||
|
});
|
||||||
|
|
||||||
|
users = users.concat(otherUsers);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (users.length < ps.limit) {
|
||||||
|
const otherUsers = await User
|
||||||
|
.find({
|
||||||
|
_id: { $nin: users.map(u => u._id) },
|
||||||
|
host: null,
|
||||||
|
name: new RegExp(escapeRegexp(ps.query.toLowerCase()))
|
||||||
|
}, {
|
||||||
|
limit: ps.limit - users.length
|
||||||
|
});
|
||||||
|
|
||||||
|
users = users.concat(otherUsers);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (users.length < ps.limit && !ps.localOnly) {
|
||||||
|
const otherUsers = await User
|
||||||
|
.find({
|
||||||
|
_id: { $nin: users.map(u => u._id) },
|
||||||
|
host: { $ne: null },
|
||||||
|
name: new RegExp(escapeRegexp(ps.query.toLowerCase()))
|
||||||
|
}, {
|
||||||
|
limit: ps.limit - users.length
|
||||||
|
});
|
||||||
|
|
||||||
|
users = users.concat(otherUsers);
|
||||||
|
}
|
||||||
|
|
||||||
// Serialize
|
// Serialize
|
||||||
res(await Promise.all(users.map(user => pack(user, me, { detail: true }))));
|
res(await Promise.all(users.map(user => pack(user, me, { detail: true }))));
|
||||||
|
@ -1,70 +0,0 @@
|
|||||||
import $ from 'cafy';
|
|
||||||
import User, { pack, ILocalUser } from '../../../../models/user';
|
|
||||||
const escapeRegexp = require('escape-regexp');
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Search a user by username
|
|
||||||
*/
|
|
||||||
export default (params: any, me: ILocalUser) => new Promise(async (res, rej) => {
|
|
||||||
// Get 'query' parameter
|
|
||||||
const [query, queryError] = $.str.get(params.query);
|
|
||||||
if (queryError) return rej('invalid query param');
|
|
||||||
|
|
||||||
// Get 'offset' parameter
|
|
||||||
const [offset = 0, offsetErr] = $.num.optional.min(0).get(params.offset);
|
|
||||||
if (offsetErr) return rej('invalid offset param');
|
|
||||||
|
|
||||||
// Get 'limit' parameter
|
|
||||||
const [limit = 10, limitErr] = $.num.optional.range(1, 100).get(params.limit);
|
|
||||||
if (limitErr) return rej('invalid limit param');
|
|
||||||
|
|
||||||
let users = await User
|
|
||||||
.find({
|
|
||||||
host: null,
|
|
||||||
usernameLower: new RegExp('^' + escapeRegexp(query.toLowerCase()))
|
|
||||||
}, {
|
|
||||||
limit: limit,
|
|
||||||
skip: offset
|
|
||||||
});
|
|
||||||
|
|
||||||
if (users.length < limit) {
|
|
||||||
const otherUsers = await User
|
|
||||||
.find({
|
|
||||||
host: { $ne: null },
|
|
||||||
usernameLower: new RegExp('^' + escapeRegexp(query.toLowerCase()))
|
|
||||||
}, {
|
|
||||||
limit: limit - users.length
|
|
||||||
});
|
|
||||||
|
|
||||||
users = users.concat(otherUsers);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (users.length < limit) {
|
|
||||||
const otherUsers = await User
|
|
||||||
.find({
|
|
||||||
_id: { $nin: users.map(u => u._id) },
|
|
||||||
host: null,
|
|
||||||
usernameLower: new RegExp(escapeRegexp(query.toLowerCase()))
|
|
||||||
}, {
|
|
||||||
limit: limit - users.length
|
|
||||||
});
|
|
||||||
|
|
||||||
users = users.concat(otherUsers);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (users.length < limit) {
|
|
||||||
const otherUsers = await User
|
|
||||||
.find({
|
|
||||||
_id: { $nin: users.map(u => u._id) },
|
|
||||||
host: { $ne: null },
|
|
||||||
usernameLower: new RegExp(escapeRegexp(query.toLowerCase()))
|
|
||||||
}, {
|
|
||||||
limit: limit - users.length
|
|
||||||
});
|
|
||||||
|
|
||||||
users = users.concat(otherUsers);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Serialize
|
|
||||||
res(await Promise.all(users.map(user => pack(user, me, { detail: true }))));
|
|
||||||
});
|
|
@ -11,7 +11,7 @@ const handler = new EventEmitter();
|
|||||||
|
|
||||||
let bot: IUser;
|
let bot: IUser;
|
||||||
|
|
||||||
const post = async (text: string) => {
|
const post = async (text: string, home = true) => {
|
||||||
if (bot == null) {
|
if (bot == null) {
|
||||||
const account = await User.findOne({
|
const account = await User.findOne({
|
||||||
usernameLower: config.github_bot.username.toLowerCase()
|
usernameLower: config.github_bot.username.toLowerCase()
|
||||||
@ -25,7 +25,7 @@ const post = async (text: string) => {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
createNote(bot, { text, visibility: 'home' });
|
createNote(bot, { text, visibility: home ? 'home' : 'public' });
|
||||||
};
|
};
|
||||||
|
|
||||||
// Init router
|
// Init router
|
||||||
@ -130,7 +130,7 @@ handler.on('issue_comment', event => {
|
|||||||
|
|
||||||
handler.on('watch', event => {
|
handler.on('watch', event => {
|
||||||
const sender = event.sender;
|
const sender = event.sender;
|
||||||
post(`⭐️ Starred by **${sender.login}** ⭐️`);
|
post(`(((⭐️))) Starred by **${sender.login}** (((⭐️)))`, false);
|
||||||
});
|
});
|
||||||
|
|
||||||
handler.on('fork', event => {
|
handler.on('fork', event => {
|
||||||
|
@ -103,6 +103,24 @@ export default async (user: IUser, data: Option, silent = false) => new Promise<
|
|||||||
data.visibleUsers = data.visibleUsers.filter(x => x != null);
|
data.visibleUsers = data.visibleUsers.filter(x => x != null);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (data.reply && data.reply.deletedAt != null) {
|
||||||
|
return rej();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (data.renote && data.renote.deletedAt != null) {
|
||||||
|
return rej();
|
||||||
|
}
|
||||||
|
|
||||||
|
// リプライ先が自分以外の非公開の投稿なら禁止
|
||||||
|
if (data.reply && data.reply.visibility == 'private' && !data.reply.userId.equals(user._id)) {
|
||||||
|
return rej();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Renote先が自分以外の非公開の投稿なら禁止
|
||||||
|
if (data.renote && data.renote.visibility == 'private' && !data.renote.userId.equals(user._id)) {
|
||||||
|
return rej();
|
||||||
|
}
|
||||||
|
|
||||||
if (data.text) {
|
if (data.text) {
|
||||||
data.text = data.text.trim();
|
data.text = data.text.trim();
|
||||||
}
|
}
|
||||||
|
16
test/mfm.ts
16
test/mfm.ts
@ -34,11 +34,25 @@ describe('Text', () => {
|
|||||||
it('big', () => {
|
it('big', () => {
|
||||||
const tokens = analyze('***Strawberry*** Pasta');
|
const tokens = analyze('***Strawberry*** Pasta');
|
||||||
assert.deepEqual([
|
assert.deepEqual([
|
||||||
{ type: 'big', content: '***Strawberry***', bold: 'Strawberry' },
|
{ type: 'big', content: '***Strawberry***', big: 'Strawberry' },
|
||||||
{ type: 'text', content: ' Pasta' }
|
{ type: 'text', content: ' Pasta' }
|
||||||
], tokens);
|
], tokens);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('motion', () => {
|
||||||
|
const tokens1 = analyze('(((Strawberry))) Pasta');
|
||||||
|
assert.deepEqual([
|
||||||
|
{ type: 'motion', content: '(((Strawberry)))', motion: 'Strawberry' },
|
||||||
|
{ type: 'text', content: ' Pasta' }
|
||||||
|
], tokens1);
|
||||||
|
|
||||||
|
const tokens2 = analyze('<motion>Strawberry</motion> Pasta');
|
||||||
|
assert.deepEqual([
|
||||||
|
{ type: 'motion', content: '<motion>Strawberry</motion>', motion: 'Strawberry' },
|
||||||
|
{ type: 'text', content: ' Pasta' }
|
||||||
|
], tokens2);
|
||||||
|
});
|
||||||
|
|
||||||
it('mention', () => {
|
it('mention', () => {
|
||||||
const tokens = analyze('@himawari お腹ペコい');
|
const tokens = analyze('@himawari お腹ペコい');
|
||||||
assert.deepEqual([
|
assert.deepEqual([
|
||||||
|
Reference in New Issue
Block a user