Compare commits
271 Commits
Author | SHA1 | Date | |
---|---|---|---|
01d3f5f09d | |||
4333ff00a0 | |||
25b88afbb7 | |||
6a92c19227 | |||
56b69b5fb7 | |||
ebf0479ecc | |||
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 | |||
b60af54db1 | |||
047320e50a | |||
29418ecbb4 | |||
67e97310cf | |||
33d3d5c570 | |||
864d1a39cd | |||
ee050cc37e | |||
e14f244e83 | |||
1ba43d83b0 | |||
72fc6d387f | |||
4a935e0659 | |||
8a0dab49e0 | |||
65574abab7 | |||
37d21462b8 | |||
1acd25810c | |||
a81b771f15 | |||
d30b2e7270 | |||
69f82508cb | |||
fddaa11645 | |||
bbe740785d | |||
0389afa0fe | |||
caec6933d1 | |||
420164c59a | |||
b13f42645b | |||
22c945d21b | |||
12fab6fa53 | |||
51651e0c87 | |||
ce395e626f | |||
b0f93588bb | |||
d456e5e45c | |||
84e47bad7e | |||
deee2391ba | |||
5cdd06ca2f | |||
6245a86a6f | |||
c72e8bd88d | |||
c58719348f | |||
40525a9d6d | |||
eac5d6d127 | |||
9cd7af6b99 | |||
5cd441c0cb | |||
32cc778ed3 | |||
c966b3f371 | |||
9baa0128df | |||
42fbc7ab66 | |||
8272118e29 | |||
1dc8d4f926 | |||
4beb93055b | |||
e66ec6823d | |||
1d2b01df5c | |||
5defcd6592 | |||
13451f6843 | |||
6d1d6f1e6e | |||
bb064e47f7 | |||
4e239f6089 | |||
b35b458001 | |||
315c28234e | |||
d996cd6dda | |||
8a61e12cc8 | |||
99f4cbab4b | |||
1b4da6f26d | |||
14ebc8f2b6 | |||
f97c1a0895 | |||
533448d835 | |||
cbcf3fd7f1 | |||
4f4fd65a56 | |||
d2a7b471f6 | |||
df05071636 | |||
bd8aee7b2c | |||
3459112732 | |||
8e8c02840d | |||
f376f0e03a | |||
59f6d767b3 | |||
e46857af00 | |||
e987e47d18 | |||
588cd27d5b | |||
d9efc4793a | |||
9d5983938b | |||
9686f45d24 | |||
cb0a0a7aa4 | |||
254495cd3d | |||
6da9da0e8f | |||
d8260a4aaa | |||
000635252c | |||
faac4dbe22 | |||
a3007a266d | |||
3f0f1048fe | |||
c016d212ed | |||
8f228b20de | |||
a64945a8dd | |||
2986876810 | |||
166ef3ba52 | |||
8bbd36a7dd | |||
55c2254c3f | |||
f7e72829ad | |||
cd6829ca64 | |||
a88942f58a | |||
b4d79ce4a4 | |||
51b4f95f79 | |||
125da8d843 | |||
8385cb436e | |||
95ffeceb7f | |||
1e3cff6174 | |||
3f29a0382b | |||
e42d26f965 | |||
8f91a98b65 | |||
58f62e21ff | |||
fc45d47e15 | |||
5409bc6392 | |||
dcad453069 | |||
5ef1678a8c | |||
a682dff069 | |||
8afa11913c | |||
2cf139145e | |||
a219bee4f0 | |||
2efb0972f6 | |||
7b33c63f78 | |||
0df093383d | |||
cdf65aedcb | |||
b9dfb937f1 | |||
2ea3b57499 | |||
fd9200cbb0 | |||
40d422c6f3 | |||
9d6bbbc4e3 | |||
3fa8433a0e | |||
82af341261 | |||
436519f4f4 | |||
6be5984868 | |||
503d10145a | |||
97ed8d1728 | |||
8c16ed243a | |||
0c482175a2 | |||
acfd7896ea | |||
8d6e0bd43d | |||
b35ef61515 | |||
ec18dac5e5 | |||
ccdc33e476 | |||
3f5972be7b |
1
.gitignore
vendored
1
.gitignore
vendored
@ -4,6 +4,7 @@
|
|||||||
/node_modules
|
/node_modules
|
||||||
/build
|
/build
|
||||||
/built
|
/built
|
||||||
|
built
|
||||||
/data
|
/data
|
||||||
/.cache-loader
|
/.cache-loader
|
||||||
npm-debug.log
|
npm-debug.log
|
||||||
|
@ -6,6 +6,13 @@ 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:
|
||||||
|
detected: "広告ブロッカーを無効にしてください"
|
||||||
|
warning: "<strong>Misskeyは広告を掲載していません</strong>が、広告をブロックする機能が有効だと一部の機能が利用できなかったり、不具合が発生する場合があります。"
|
||||||
|
application-authorization: "アプリの連携"
|
||||||
|
close: "閉じる"
|
||||||
|
do-not-copy-paste: "ここにコードを入力したり張り付けたりしないでください。アカウントが不正利用される可能性があります。"
|
||||||
|
got-it: "わかった"
|
||||||
customization-tips:
|
customization-tips:
|
||||||
title: "カスタマイズのヒント"
|
title: "カスタマイズのヒント"
|
||||||
paragraph1: "ホームのカスタマイズでは、ウィジェットを追加/削除したり、ドラッグ&ドロップして並べ替えたりすることができます。"
|
paragraph1: "ホームのカスタマイズでは、ウィジェットを追加/削除したり、ドラッグ&ドロップして並べ替えたりすることができます。"
|
||||||
@ -13,7 +20,14 @@ common:
|
|||||||
paragraph3: "ウィジェットを削除するには、ヘッダーの<strong>「ゴミ箱」</strong>と書かれたエリアにウィジェットをドラッグ&ドロップします。"
|
paragraph3: "ウィジェットを削除するには、ヘッダーの<strong>「ゴミ箱」</strong>と書かれたエリアにウィジェットをドラッグ&ドロップします。"
|
||||||
paragraph4: "カスタマイズを終了するには、右上の「完了」をクリックします。"
|
paragraph4: "カスタマイズを終了するには、右上の「完了」をクリックします。"
|
||||||
gotit: "Got it!"
|
gotit: "Got it!"
|
||||||
name: "Misskey"
|
notification:
|
||||||
|
file-uploaded: "ファイルがアップロードされました"
|
||||||
|
message-from: "{}さんからメッセージ:"
|
||||||
|
reversi-invited: "対局への招待があります"
|
||||||
|
reversi-invited-by: "{}さんから"
|
||||||
|
notified-by: "{}さんから"
|
||||||
|
reply-from: "{}さんから返信:"
|
||||||
|
quoted-by: "{}さんが引用:"
|
||||||
time:
|
time:
|
||||||
unknown: "なぞのじかん"
|
unknown: "なぞのじかん"
|
||||||
future: "未来"
|
future: "未来"
|
||||||
@ -25,6 +39,7 @@ common:
|
|||||||
weeks_ago: "{}週間前"
|
weeks_ago: "{}週間前"
|
||||||
months_ago: "{}ヶ月前"
|
months_ago: "{}ヶ月前"
|
||||||
years_ago: "{}年前"
|
years_ago: "{}年前"
|
||||||
|
month-and-day: "{month}月 {day}日"
|
||||||
trash: "ゴミ箱"
|
trash: "ゴミ箱"
|
||||||
weekday-short:
|
weekday-short:
|
||||||
sunday: "日"
|
sunday: "日"
|
||||||
@ -69,6 +84,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: "あなたのターンです"
|
||||||
@ -121,7 +137,38 @@ common:
|
|||||||
rename: "名前を変更"
|
rename: "名前を変更"
|
||||||
stack-left: "左に重ねる"
|
stack-left: "左に重ねる"
|
||||||
pop-right: "右に出す"
|
pop-right: "右に出す"
|
||||||
|
auth/views/form.vue:
|
||||||
|
share-access: "<i>{{ app.name }}</i>があなたのアカウントにアクセスすることを<b>許可</b>しますか?"
|
||||||
|
permission-ask: "このアプリは次の権限を要求しています:"
|
||||||
|
account-read: "アカウントの情報を見る。"
|
||||||
|
account-write: "アカウントの情報を操作する。"
|
||||||
|
note-write: "投稿する。"
|
||||||
|
like-write: "いいねしたりいいね解除する。"
|
||||||
|
following-write: "フォローしたりフォロー解除する。"
|
||||||
|
drive-read: "ドライブを見る。"
|
||||||
|
drive-write: "ドライブを操作する。"
|
||||||
|
notification-read: "通知を見る。"
|
||||||
|
notification-write: "通知を操作する。"
|
||||||
|
cancel: "キャンセル"
|
||||||
|
accept: "アクセスを許可"
|
||||||
|
auth/views/index.vue:
|
||||||
|
loading: "読み込み中"
|
||||||
|
denied: "アプリケーションの連携をキャンセルしました。"
|
||||||
|
denied-paragraph: "このアプリがあなたのアカウントにアクセスすることはありません。"
|
||||||
|
already-authorized: "このアプリは既に連携済みです"
|
||||||
|
allowed: "アプリケーションの連携を許可しました"
|
||||||
|
callback-url: "アプリケーションに戻っています"
|
||||||
|
please-go-back: "アプリケーションに戻って、やっていってください。"
|
||||||
|
error: "セッションが存在しません。"
|
||||||
|
sign-in: "サインインしてください"
|
||||||
common/views/components/games/reversi/reversi.vue:
|
common/views/components/games/reversi/reversi.vue:
|
||||||
|
matching:
|
||||||
|
waiting-for: "{}を待っています"
|
||||||
|
cancel: "キャンセル"
|
||||||
|
common/views/components/games/reversi/reversi.game.vue:
|
||||||
|
surrender: "投了"
|
||||||
|
surrendered: "投了により"
|
||||||
|
common/views/components/games/reversi/reversi.index.vue:
|
||||||
title: "Misskey Reversi"
|
title: "Misskey Reversi"
|
||||||
sub-title: "他のMisskeyユーザーとリバーシで対戦しよう"
|
sub-title: "他のMisskeyユーザーとリバーシで対戦しよう"
|
||||||
invite: "招待"
|
invite: "招待"
|
||||||
@ -136,9 +183,6 @@ common/views/components/games/reversi/reversi.vue:
|
|||||||
game-state:
|
game-state:
|
||||||
ended: "終了"
|
ended: "終了"
|
||||||
playing: "進行中"
|
playing: "進行中"
|
||||||
matching:
|
|
||||||
waiting-for: "{}を待っています"
|
|
||||||
cacnel: "キャンセル"
|
|
||||||
common/views/components/games/reversi/reversi.room.vue:
|
common/views/components/games/reversi/reversi.room.vue:
|
||||||
settings-of-the-game: "ゲームの設定"
|
settings-of-the-game: "ゲームの設定"
|
||||||
choose-map: "マップを選択"
|
choose-map: "マップを選択"
|
||||||
@ -150,7 +194,7 @@ common/views/components/games/reversi/reversi.room.vue:
|
|||||||
looped-map: "ループマップ"
|
looped-map: "ループマップ"
|
||||||
can-put-everywhere: "どこでも置けるモード"
|
can-put-everywhere: "どこでも置けるモード"
|
||||||
settings-of-the-bot: "Botの設定"
|
settings-of-the-bot: "Botの設定"
|
||||||
this-gane-is-started-soon: "ゲームは数秒後に開始されます"
|
this-game-is-started-soon: "ゲームは数秒後に開始されます"
|
||||||
waiting-for-other: "相手の準備が完了するのを待っています"
|
waiting-for-other: "相手の準備が完了するのを待っています"
|
||||||
waiting-for-me: "あなたの準備が完了するのを待っています"
|
waiting-for-me: "あなたの準備が完了するのを待っています"
|
||||||
waiting-for-both: "準備中"
|
waiting-for-both: "準備中"
|
||||||
@ -191,11 +235,13 @@ 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: "既読"
|
||||||
deleted: "このメッセージは削除されました"
|
deleted: "このメッセージは削除されました"
|
||||||
@ -235,6 +281,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: "確認しています..."
|
||||||
@ -344,6 +392,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"
|
||||||
@ -478,6 +537,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: "読み込みに失敗しました。"
|
||||||
retry: "リトライ"
|
retry: "リトライ"
|
||||||
@ -513,6 +574,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: "新規投稿"
|
||||||
reply: "返信"
|
reply: "返信"
|
||||||
@ -674,6 +736,7 @@ desktop/views/components/timeline.vue:
|
|||||||
list: "リスト"
|
list: "リスト"
|
||||||
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: "プロフィール"
|
||||||
drive: "ドライブ"
|
drive: "ドライブ"
|
||||||
@ -702,6 +765,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: "フォロー"
|
||||||
@ -751,8 +815,7 @@ desktop/views/pages/search.vue:
|
|||||||
not-available: "検索機能を利用することができません。"
|
not-available: "検索機能を利用することができません。"
|
||||||
not-found: "「{}」に関する投稿は見つかりませんでした。"
|
not-found: "「{}」に関する投稿は見つかりませんでした。"
|
||||||
desktop/views/pages/share.vue:
|
desktop/views/pages/share.vue:
|
||||||
share-with: "Misskeyで共有"
|
share-with: "{}で共有"
|
||||||
close: "閉じる"
|
|
||||||
desktop/views/pages/tag.vue:
|
desktop/views/pages/tag.vue:
|
||||||
no-posts-found: "ハッシュタグ「{}」が付けられた投稿は見つかりませんでした。"
|
no-posts-found: "ハッシュタグ「{}」が付けられた投稿は見つかりませんでした。"
|
||||||
desktop/views/pages/user-list.users.vue:
|
desktop/views/pages/user-list.users.vue:
|
||||||
@ -785,6 +848,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: "フォロー"
|
||||||
@ -912,6 +977,7 @@ mobile/views/components/timeline.vue:
|
|||||||
load-more: "もっと"
|
load-more: "もっと"
|
||||||
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: "タイムライン"
|
||||||
notifications: "通知"
|
notifications: "通知"
|
||||||
@ -959,8 +1025,13 @@ mobile/views/pages/welcome.vue:
|
|||||||
signup: "新規登録"
|
signup: "新規登録"
|
||||||
mobile/views/pages/widgets.vue:
|
mobile/views/pages/widgets.vue:
|
||||||
dashboard: "ダッシュボード"
|
dashboard: "ダッシュボード"
|
||||||
|
widgets-hints: "ウィジェットを追加/削除したり並べ替えたりできます。ウィジェットを移動するには「三」をドラッグします。ウィジェットを削除するには「x」をタップします。いくつかのウィジェットはタップすることで表示を変更できます。"
|
||||||
|
add-widget: "追加"
|
||||||
|
customization-tips: "カスタマイズのヒント"
|
||||||
mobile/views/pages/widgets/activity.vue:
|
mobile/views/pages/widgets/activity.vue:
|
||||||
activity: "アクティビティ"
|
activity: "アクティビティ"
|
||||||
|
mobile/views/pages/share.vue:
|
||||||
|
share-with: "{}で共有"
|
||||||
mobile/views/pages/messaging.vue:
|
mobile/views/pages/messaging.vue:
|
||||||
messaging: "メッセージ"
|
messaging: "メッセージ"
|
||||||
mobile/views/pages/messaging-room.vue:
|
mobile/views/pages/messaging-room.vue:
|
||||||
@ -976,7 +1047,7 @@ mobile/views/pages/note.vue:
|
|||||||
mobile/views/pages/notifications.vue:
|
mobile/views/pages/notifications.vue:
|
||||||
notifications: "通知"
|
notifications: "通知"
|
||||||
read-all: "すべての通知を既読にしますか?"
|
read-all: "すべての通知を既読にしますか?"
|
||||||
mobile/views/pages/reversi.vue:
|
mobile/views/pages/games/reversi.vue:
|
||||||
reversi: "リバーシ"
|
reversi: "リバーシ"
|
||||||
mobile/views/pages/settings/settings.profile.vue:
|
mobile/views/pages/settings/settings.profile.vue:
|
||||||
title: "プロフィール"
|
title: "プロフィール"
|
||||||
@ -995,6 +1066,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: "ファイルを選択"
|
||||||
mobile/views/pages/settings.vue:
|
mobile/views/pages/settings.vue:
|
||||||
@ -1089,3 +1161,5 @@ docs:
|
|||||||
name: "名前"
|
name: "名前"
|
||||||
type: "型"
|
type: "型"
|
||||||
description: "説明"
|
description: "説明"
|
||||||
|
dev/views/index.vue:
|
||||||
|
manage-apps: "アプリの管理"
|
||||||
|
@ -6,6 +6,13 @@ 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:
|
||||||
|
detected: "広告ブロッカーを無効にしてください"
|
||||||
|
warning: "<strong>Misskeyは広告を掲載していません</strong>が、広告をブロックする機能が有効だと一部の機能が利用できなかったり、不具合が発生する場合があります。"
|
||||||
|
application-authorization: "アプリの連携"
|
||||||
|
close: "閉じる"
|
||||||
|
do-not-copy-paste: "ここにコードを入力したり張り付けたりしないでください。アカウントが不正利用される可能性があります。"
|
||||||
|
got-it: "わかった"
|
||||||
customization-tips:
|
customization-tips:
|
||||||
title: "カスタマイズのヒント"
|
title: "カスタマイズのヒント"
|
||||||
paragraph1: "ホームのカスタマイズでは、ウィジェットを追加/削除したり、ドラッグ&ドロップして並べ替えたりすることができます。"
|
paragraph1: "ホームのカスタマイズでは、ウィジェットを追加/削除したり、ドラッグ&ドロップして並べ替えたりすることができます。"
|
||||||
@ -13,7 +20,14 @@ common:
|
|||||||
paragraph3: "ウィジェットを削除するには、ヘッダーの<strong>「ゴミ箱」</strong>と書かれたエリアにウィジェットをドラッグ&ドロップします。"
|
paragraph3: "ウィジェットを削除するには、ヘッダーの<strong>「ゴミ箱」</strong>と書かれたエリアにウィジェットをドラッグ&ドロップします。"
|
||||||
paragraph4: "カスタマイズを終了するには、右上の「完了」をクリックします。"
|
paragraph4: "カスタマイズを終了するには、右上の「完了」をクリックします。"
|
||||||
gotit: "Got it!"
|
gotit: "Got it!"
|
||||||
name: "Misskey"
|
notification:
|
||||||
|
file-uploaded: "ファイルがアップロードされました"
|
||||||
|
message-from: "{}さんからメッセージ:"
|
||||||
|
reversi-invited: "対局への招待があります"
|
||||||
|
reversi-invited-by: "{}さんから"
|
||||||
|
notified-by: "{}さんから"
|
||||||
|
reply-from: "{}さんから返信:"
|
||||||
|
quoted-by: "{}さんが引用:"
|
||||||
time:
|
time:
|
||||||
unknown: "Unbekannt"
|
unknown: "Unbekannt"
|
||||||
future: "Zukunft"
|
future: "Zukunft"
|
||||||
@ -25,6 +39,7 @@ common:
|
|||||||
weeks_ago: "vor {0} Woche{0:n}"
|
weeks_ago: "vor {0} Woche{0:n}"
|
||||||
months_ago: "vor {0} Monat{0:en}"
|
months_ago: "vor {0} Monat{0:en}"
|
||||||
years_ago: "vor {} Jahr{0:en}"
|
years_ago: "vor {} Jahr{0:en}"
|
||||||
|
month-and-day: "{month}月 {day}日"
|
||||||
trash: "ゴミ箱"
|
trash: "ゴミ箱"
|
||||||
weekday-short:
|
weekday-short:
|
||||||
sunday: "So"
|
sunday: "So"
|
||||||
@ -69,6 +84,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: "あなたのターンです"
|
||||||
@ -121,7 +137,38 @@ common:
|
|||||||
rename: "Umbenennen"
|
rename: "Umbenennen"
|
||||||
stack-left: "Nach links schichten"
|
stack-left: "Nach links schichten"
|
||||||
pop-right: "右に出す"
|
pop-right: "右に出す"
|
||||||
|
auth/views/form.vue:
|
||||||
|
share-access: "<i>{{ app.name }}</i>があなたのアカウントにアクセスすることを<b>許可</b>しますか?"
|
||||||
|
permission-ask: "このアプリは次の権限を要求しています:"
|
||||||
|
account-read: "アカウントの情報を見る。"
|
||||||
|
account-write: "アカウントの情報を操作する。"
|
||||||
|
note-write: "投稿する。"
|
||||||
|
like-write: "いいねしたりいいね解除する。"
|
||||||
|
following-write: "フォローしたりフォロー解除する。"
|
||||||
|
drive-read: "ドライブを見る。"
|
||||||
|
drive-write: "ドライブを操作する。"
|
||||||
|
notification-read: "通知を見る。"
|
||||||
|
notification-write: "通知を操作する。"
|
||||||
|
cancel: "キャンセル"
|
||||||
|
accept: "アクセスを許可"
|
||||||
|
auth/views/index.vue:
|
||||||
|
loading: "読み込み中"
|
||||||
|
denied: "アプリケーションの連携をキャンセルしました。"
|
||||||
|
denied-paragraph: "このアプリがあなたのアカウントにアクセスすることはありません。"
|
||||||
|
already-authorized: "このアプリは既に連携済みです"
|
||||||
|
allowed: "アプリケーションの連携を許可しました"
|
||||||
|
callback-url: "アプリケーションに戻っています"
|
||||||
|
please-go-back: "アプリケーションに戻って、やっていってください。"
|
||||||
|
error: "セッションが存在しません。"
|
||||||
|
sign-in: "サインインしてください"
|
||||||
common/views/components/games/reversi/reversi.vue:
|
common/views/components/games/reversi/reversi.vue:
|
||||||
|
matching:
|
||||||
|
waiting-for: "{}を待っています"
|
||||||
|
cancel: "キャンセル"
|
||||||
|
common/views/components/games/reversi/reversi.game.vue:
|
||||||
|
surrender: "投了"
|
||||||
|
surrendered: "投了により"
|
||||||
|
common/views/components/games/reversi/reversi.index.vue:
|
||||||
title: "Misskey Reversi"
|
title: "Misskey Reversi"
|
||||||
sub-title: "他のMisskeyユーザーとリバーシで対戦しよう"
|
sub-title: "他のMisskeyユーザーとリバーシで対戦しよう"
|
||||||
invite: "招待"
|
invite: "招待"
|
||||||
@ -136,9 +183,6 @@ common/views/components/games/reversi/reversi.vue:
|
|||||||
game-state:
|
game-state:
|
||||||
ended: "終了"
|
ended: "終了"
|
||||||
playing: "進行中"
|
playing: "進行中"
|
||||||
matching:
|
|
||||||
waiting-for: "{}を待っています"
|
|
||||||
cacnel: "キャンセル"
|
|
||||||
common/views/components/games/reversi/reversi.room.vue:
|
common/views/components/games/reversi/reversi.room.vue:
|
||||||
settings-of-the-game: "ゲームの設定"
|
settings-of-the-game: "ゲームの設定"
|
||||||
choose-map: "マップを選択"
|
choose-map: "マップを選択"
|
||||||
@ -150,7 +194,7 @@ common/views/components/games/reversi/reversi.room.vue:
|
|||||||
looped-map: "ループマップ"
|
looped-map: "ループマップ"
|
||||||
can-put-everywhere: "どこでも置けるモード"
|
can-put-everywhere: "どこでも置けるモード"
|
||||||
settings-of-the-bot: "Botの設定"
|
settings-of-the-bot: "Botの設定"
|
||||||
this-gane-is-started-soon: "ゲームは数秒後に開始されます"
|
this-game-is-started-soon: "ゲームは数秒後に開始されます"
|
||||||
waiting-for-other: "相手の準備が完了するのを待っています"
|
waiting-for-other: "相手の準備が完了するのを待っています"
|
||||||
waiting-for-me: "あなたの準備が完了するのを待っています"
|
waiting-for-me: "あなたの準備が完了するのを待っています"
|
||||||
waiting-for-both: "準備中"
|
waiting-for-both: "準備中"
|
||||||
@ -191,11 +235,13 @@ common/views/components/messaging-room.vue:
|
|||||||
no-history: "Keine weitere Chronik vorhanden"
|
no-history: "Keine weitere Chronik vorhanden"
|
||||||
resize-form: "Ziehen um die Größe zu verändern"
|
resize-form: "Ziehen um die Größe zu verändern"
|
||||||
new-message: "Neue Nachricht"
|
new-message: "Neue Nachricht"
|
||||||
|
only-one-file-attached: "メッセージに添付できるのはひとつのファイルのみです"
|
||||||
common/views/components/messaging-room.form.vue:
|
common/views/components/messaging-room.form.vue:
|
||||||
input-message-here: "Nachricht hier eingeben"
|
input-message-here: "Nachricht hier eingeben"
|
||||||
send: "Senden"
|
send: "Senden"
|
||||||
attach-from-local: "Wähle Dateien von deinem PC aus"
|
attach-from-local: "Wähle Dateien von deinem PC aus"
|
||||||
attach-from-drive: "Wähle Dateien von deinem Speicher aus"
|
attach-from-drive: "Wähle Dateien von deinem Speicher aus"
|
||||||
|
only-one-file-attached: "メッセージに添付できるのはひとつのファイルのみです"
|
||||||
common/views/components/messaging-room.message.vue:
|
common/views/components/messaging-room.message.vue:
|
||||||
is-read: "Gelesen"
|
is-read: "Gelesen"
|
||||||
deleted: "Diese Nachricht wurde gelöscht"
|
deleted: "Diese Nachricht wurde gelöscht"
|
||||||
@ -235,6 +281,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..."
|
||||||
@ -344,6 +392,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"
|
||||||
@ -478,6 +537,8 @@ desktop/views/components/notes.note.vue:
|
|||||||
detail: "Zeige Details"
|
detail: "Zeige Details"
|
||||||
private: "Dieser Beitrag ist eine privat"
|
private: "Dieser Beitrag ist eine privat"
|
||||||
deleted: "Dieser Beitrag wurde entfernt"
|
deleted: "Dieser Beitrag wurde entfernt"
|
||||||
|
hide: "隠す"
|
||||||
|
see-more: "もっと見る"
|
||||||
desktop/views/components/notes.vue:
|
desktop/views/components/notes.vue:
|
||||||
error: "Laden fehlgeschlagen."
|
error: "Laden fehlgeschlagen."
|
||||||
retry: "Erneut versuchen"
|
retry: "Erneut versuchen"
|
||||||
@ -513,6 +574,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: "Neue Notiz"
|
note: "Neue Notiz"
|
||||||
reply: "Antworten"
|
reply: "Antworten"
|
||||||
@ -674,6 +736,7 @@ desktop/views/components/timeline.vue:
|
|||||||
list: "Listen"
|
list: "Listen"
|
||||||
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: "Dein Profil"
|
profile: "Dein Profil"
|
||||||
drive: "Speicher"
|
drive: "Speicher"
|
||||||
@ -702,6 +765,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: "フォロー"
|
||||||
@ -751,8 +815,7 @@ desktop/views/pages/search.vue:
|
|||||||
not-available: "検索機能を利用することができません。"
|
not-available: "検索機能を利用することができません。"
|
||||||
not-found: "「{}」に関する投稿は見つかりませんでした。"
|
not-found: "「{}」に関する投稿は見つかりませんでした。"
|
||||||
desktop/views/pages/share.vue:
|
desktop/views/pages/share.vue:
|
||||||
share-with: "Misskeyで共有"
|
share-with: "{}で共有"
|
||||||
close: "閉じる"
|
|
||||||
desktop/views/pages/tag.vue:
|
desktop/views/pages/tag.vue:
|
||||||
no-posts-found: "ハッシュタグ「{}」が付けられた投稿は見つかりませんでした。"
|
no-posts-found: "ハッシュタグ「{}」が付けられた投稿は見つかりませんでした。"
|
||||||
desktop/views/pages/user-list.users.vue:
|
desktop/views/pages/user-list.users.vue:
|
||||||
@ -785,6 +848,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: "フォロー"
|
||||||
@ -912,6 +977,7 @@ mobile/views/components/timeline.vue:
|
|||||||
load-more: "もっと"
|
load-more: "もっと"
|
||||||
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: "タイムライン"
|
||||||
notifications: "通知"
|
notifications: "通知"
|
||||||
@ -959,8 +1025,13 @@ mobile/views/pages/welcome.vue:
|
|||||||
signup: "新規登録"
|
signup: "新規登録"
|
||||||
mobile/views/pages/widgets.vue:
|
mobile/views/pages/widgets.vue:
|
||||||
dashboard: "ダッシュボード"
|
dashboard: "ダッシュボード"
|
||||||
|
widgets-hints: "ウィジェットを追加/削除したり並べ替えたりできます。ウィジェットを移動するには「三」をドラッグします。ウィジェットを削除するには「x」をタップします。いくつかのウィジェットはタップすることで表示を変更できます。"
|
||||||
|
add-widget: "追加"
|
||||||
|
customization-tips: "カスタマイズのヒント"
|
||||||
mobile/views/pages/widgets/activity.vue:
|
mobile/views/pages/widgets/activity.vue:
|
||||||
activity: "アクティビティ"
|
activity: "アクティビティ"
|
||||||
|
mobile/views/pages/share.vue:
|
||||||
|
share-with: "{}で共有"
|
||||||
mobile/views/pages/messaging.vue:
|
mobile/views/pages/messaging.vue:
|
||||||
messaging: "メッセージ"
|
messaging: "メッセージ"
|
||||||
mobile/views/pages/messaging-room.vue:
|
mobile/views/pages/messaging-room.vue:
|
||||||
@ -976,7 +1047,7 @@ mobile/views/pages/note.vue:
|
|||||||
mobile/views/pages/notifications.vue:
|
mobile/views/pages/notifications.vue:
|
||||||
notifications: "通知"
|
notifications: "通知"
|
||||||
read-all: "すべての通知を既読にしますか?"
|
read-all: "すべての通知を既読にしますか?"
|
||||||
mobile/views/pages/reversi.vue:
|
mobile/views/pages/games/reversi.vue:
|
||||||
reversi: "リバーシ"
|
reversi: "リバーシ"
|
||||||
mobile/views/pages/settings/settings.profile.vue:
|
mobile/views/pages/settings/settings.profile.vue:
|
||||||
title: "Profil"
|
title: "Profil"
|
||||||
@ -995,6 +1066,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: "ファイルを選択"
|
||||||
mobile/views/pages/settings.vue:
|
mobile/views/pages/settings.vue:
|
||||||
@ -1089,3 +1161,5 @@ docs:
|
|||||||
name: "名前"
|
name: "名前"
|
||||||
type: "型"
|
type: "型"
|
||||||
description: "説明"
|
description: "説明"
|
||||||
|
dev/views/index.vue:
|
||||||
|
manage-apps: "アプリの管理"
|
||||||
|
100
locales/en.yml
100
locales/en.yml
@ -6,6 +6,13 @@ common:
|
|||||||
misskey: "A ⭐ of the fediverse"
|
misskey: "A ⭐ of the fediverse"
|
||||||
about-title: "A ⭐ of the fediverse."
|
about-title: "A ⭐ of the fediverse."
|
||||||
about: "Thank you for finding Misskey. Misskey is a <b>decentralized microblogging platform</b> born on Earth. Since it exists within the Fediverse (a universe where various social media platforms are organized), it is mutually linked with other social media platforms. Why don't you take a short break from the hustle and bustle of the city, and dive into a new Internet?"
|
about: "Thank you for finding Misskey. Misskey is a <b>decentralized microblogging platform</b> born on Earth. Since it exists within the Fediverse (a universe where various social media platforms are organized), it is mutually linked with other social media platforms. Why don't you take a short break from the hustle and bustle of the city, and dive into a new Internet?"
|
||||||
|
adblock:
|
||||||
|
detected: "Please disable ad blocker."
|
||||||
|
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."
|
||||||
|
close: "Close"
|
||||||
|
do-not-copy-paste: "ここにコードを入力したり張り付けたりしないでください。アカウントが不正利用される可能性があります。"
|
||||||
|
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."
|
||||||
@ -13,7 +20,14 @@ common:
|
|||||||
paragraph3: "To delete a widget, <strong>drag and drop the widget onto the area labeled \"Trash\"</strong> in the header."
|
paragraph3: "To delete a widget, <strong>drag and drop the widget onto the area labeled \"Trash\"</strong> in the header."
|
||||||
paragraph4: "To finish the customization, click \"Finish\" in the upper right."
|
paragraph4: "To finish the customization, click \"Finish\" in the upper right."
|
||||||
gotit: "Got it!"
|
gotit: "Got it!"
|
||||||
name: "Misskey"
|
notification:
|
||||||
|
file-uploaded: "File uploaded!"
|
||||||
|
message-from: "Message from {}:"
|
||||||
|
reversi-invited: "Invited to a game"
|
||||||
|
reversi-invited-by: "Invited by {}:"
|
||||||
|
notified-by: "Notified by {}:"
|
||||||
|
reply-from: "Reply from {}:"
|
||||||
|
quoted-by: "Quoted by {}:"
|
||||||
time:
|
time:
|
||||||
unknown: "unknown"
|
unknown: "unknown"
|
||||||
future: "future"
|
future: "future"
|
||||||
@ -25,6 +39,7 @@ common:
|
|||||||
weeks_ago: "{}week(s) ago"
|
weeks_ago: "{}week(s) ago"
|
||||||
months_ago: "{}month(s) ago"
|
months_ago: "{}month(s) ago"
|
||||||
years_ago: "{}year(s) ago"
|
years_ago: "{}year(s) ago"
|
||||||
|
month-and-day: "{month}/{day}"
|
||||||
trash: "Trash"
|
trash: "Trash"
|
||||||
weekday-short:
|
weekday-short:
|
||||||
sunday: "S"
|
sunday: "S"
|
||||||
@ -69,6 +84,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"
|
||||||
@ -121,14 +137,45 @@ common:
|
|||||||
rename: "Rename"
|
rename: "Rename"
|
||||||
stack-left: "Stack to the left"
|
stack-left: "Stack to the left"
|
||||||
pop-right: "Dock on the right"
|
pop-right: "Dock on the right"
|
||||||
|
auth/views/form.vue:
|
||||||
|
share-access: "Would you <b>allow</b> <i>{{ app.name }}</i> to access your account?"
|
||||||
|
permission-ask: "This application requires the following permissions:"
|
||||||
|
account-read: "Viewing account information:"
|
||||||
|
account-write: "Modify account informations:"
|
||||||
|
note-write: "Post."
|
||||||
|
like-write: "To react to posts."
|
||||||
|
following-write: "Follow or unfollow."
|
||||||
|
drive-read: "Read your drive."
|
||||||
|
drive-write: "Upload/delete files in your drive."
|
||||||
|
notification-read: "Read your notifications."
|
||||||
|
notification-write: "Manage your notifications."
|
||||||
|
cancel: "Cancel"
|
||||||
|
accept: "Grant access."
|
||||||
|
auth/views/index.vue:
|
||||||
|
loading: "Loading"
|
||||||
|
denied: "Application authorization denied."
|
||||||
|
denied-paragraph: "This application will not access your account."
|
||||||
|
already-authorized: "This application has already been authorized."
|
||||||
|
allowed: "Application authorizations allowed.+"
|
||||||
|
callback-url: "Going back to the application."
|
||||||
|
please-go-back: "Please go back to the application."
|
||||||
|
error: "Session does not exist."
|
||||||
|
sign-in: "Please sign in."
|
||||||
common/views/components/games/reversi/reversi.vue:
|
common/views/components/games/reversi/reversi.vue:
|
||||||
|
matching:
|
||||||
|
waiting-for: "Waiting for {}"
|
||||||
|
cancel: "Cancel"
|
||||||
|
common/views/components/games/reversi/reversi.game.vue:
|
||||||
|
surrender: "Surrender"
|
||||||
|
surrendered: "By surrender"
|
||||||
|
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!"
|
||||||
invite: "Invite"
|
invite: "Invite"
|
||||||
rule: "How to play"
|
rule: "How to play"
|
||||||
rule-desc: "Reversi is a strategy board game for two players, played on an 8×8 uncheckered board. There are sixty-four identical game pieces called disks (often spelled \"discs\"), which are light on one side and dark on the other. Players take turns placing disks on the board with their assigned color facing up. During a play, any disks of the opponent's color that are in a straight line and bounded by the disk just placed and another disk of the current player's color are turned over to the current player's color. The object of the game is to have the majority of disks turned to display your color when the last playable empty square is filled."
|
rule-desc: "Reversi is a strategy board game for two players, played on an 8×8 uncheckered board. There are sixty-four identical game pieces called disks (often spelled \"discs\"), which are light on one side and dark on the other. Players take turns placing disks on the board with their assigned color facing up. During a play, any disks of the opponent's color that are in a straight line and bounded by the disk just placed and another disk of the current player's color are turned over to the current player's color. The object of the game is to have the majority of disks turned to display your color when the last playable empty square is filled."
|
||||||
mode-invite: "Invite"
|
mode-invite: "Invite"
|
||||||
mode-invite-desc: "Invite to the game a user"
|
mode-invite-desc: "Invite to the game a user."
|
||||||
invitations: "You received invitation!"
|
invitations: "You received invitation!"
|
||||||
my-games: "My games"
|
my-games: "My games"
|
||||||
all-games: "All games"
|
all-games: "All games"
|
||||||
@ -136,9 +183,6 @@ common/views/components/games/reversi/reversi.vue:
|
|||||||
game-state:
|
game-state:
|
||||||
ended: "Ended"
|
ended: "Ended"
|
||||||
playing: "In Progress"
|
playing: "In Progress"
|
||||||
matching:
|
|
||||||
waiting-for: "Waiting for {}"
|
|
||||||
cacnel: "Cancel"
|
|
||||||
common/views/components/games/reversi/reversi.room.vue:
|
common/views/components/games/reversi/reversi.room.vue:
|
||||||
settings-of-the-game: "Game settings"
|
settings-of-the-game: "Game settings"
|
||||||
choose-map: "Choose a map"
|
choose-map: "Choose a map"
|
||||||
@ -150,7 +194,7 @@ common/views/components/games/reversi/reversi.room.vue:
|
|||||||
looped-map: "Looped map"
|
looped-map: "Looped map"
|
||||||
can-put-everywhere: "Can put everywhere"
|
can-put-everywhere: "Can put everywhere"
|
||||||
settings-of-the-bot: "Bot settings"
|
settings-of-the-bot: "Bot settings"
|
||||||
this-gane-is-started-soon: "This game will start soon"
|
this-game-is-started-soon: "The game will begin soon"
|
||||||
waiting-for-other: "Waiting for the other party's preparation"
|
waiting-for-other: "Waiting for the other party's preparation"
|
||||||
waiting-for-me: "Waiting for the your preparation"
|
waiting-for-me: "Waiting for the your preparation"
|
||||||
waiting-for-both: "Waiting for yours"
|
waiting-for-both: "Waiting for yours"
|
||||||
@ -159,7 +203,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:
|
||||||
@ -191,11 +235,13 @@ common/views/components/messaging-room.vue:
|
|||||||
no-history: "There is no further history"
|
no-history: "There is no further history"
|
||||||
resize-form: "Drag to resize"
|
resize-form: "Drag to resize"
|
||||||
new-message: "New message"
|
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: "Enter message here"
|
input-message-here: "Enter message here"
|
||||||
send: "Send"
|
send: "Send"
|
||||||
attach-from-local: "Attach files from your device"
|
attach-from-local: "Attach files from your device"
|
||||||
attach-from-drive: "Attach files from your Drive"
|
attach-from-drive: "Attach files from your Drive"
|
||||||
|
only-one-file-attached: "メッセージに添付できるのはひとつのファイルのみです"
|
||||||
common/views/components/messaging-room.message.vue:
|
common/views/components/messaging-room.message.vue:
|
||||||
is-read: "Read"
|
is-read: "Read"
|
||||||
deleted: "This message has been deleted"
|
deleted: "This message has been deleted"
|
||||||
@ -235,6 +281,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..."
|
||||||
@ -344,6 +392,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"
|
||||||
@ -478,6 +537,8 @@ desktop/views/components/notes.note.vue:
|
|||||||
detail: "Show details"
|
detail: "Show details"
|
||||||
private: "This post is private"
|
private: "This post is private"
|
||||||
deleted: "The post has been deleted"
|
deleted: "The post has been deleted"
|
||||||
|
hide: "Hide"
|
||||||
|
see-more: "See more"
|
||||||
desktop/views/components/notes.vue:
|
desktop/views/components/notes.vue:
|
||||||
error: "Loading failed."
|
error: "Loading failed."
|
||||||
retry: "Retry"
|
retry: "Retry"
|
||||||
@ -513,6 +574,7 @@ desktop/views/components/post-form.vue:
|
|||||||
geolocation-alert: "Your device does not support geolocalization."
|
geolocation-alert: "Your device does not support geolocalization."
|
||||||
error: "Error"
|
error: "Error"
|
||||||
enter-username: "Please enter a username..."
|
enter-username: "Please enter a username..."
|
||||||
|
annotations: "内容への注釈 (オプション)"
|
||||||
desktop/views/components/post-form-window.vue:
|
desktop/views/components/post-form-window.vue:
|
||||||
note: "New note"
|
note: "New note"
|
||||||
reply: "Reply"
|
reply: "Reply"
|
||||||
@ -674,6 +736,7 @@ desktop/views/components/timeline.vue:
|
|||||||
list: "Lists"
|
list: "Lists"
|
||||||
desktop/views/components/ui.header.vue:
|
desktop/views/components/ui.header.vue:
|
||||||
welcome-back: "Welcome back,"
|
welcome-back: "Welcome back,"
|
||||||
|
adjective: "さん"
|
||||||
desktop/views/components/ui.header.account.vue:
|
desktop/views/components/ui.header.account.vue:
|
||||||
profile: "Your profile"
|
profile: "Your profile"
|
||||||
drive: "Media storage"
|
drive: "Media storage"
|
||||||
@ -702,6 +765,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"
|
||||||
@ -748,13 +812,12 @@ desktop/views/pages/selectdrive.vue:
|
|||||||
cancel: "Cancel"
|
cancel: "Cancel"
|
||||||
upload: "Upload files from your device"
|
upload: "Upload files from your device"
|
||||||
desktop/views/pages/search.vue:
|
desktop/views/pages/search.vue:
|
||||||
not-available: "The search function can not be used."
|
not-available: "The search feature is not available."
|
||||||
not-found: "No posts were found for '{}'"
|
not-found: "No posts were found for '{}'"
|
||||||
desktop/views/pages/share.vue:
|
desktop/views/pages/share.vue:
|
||||||
share-with: "Share with Misskey"
|
share-with: "Share with {}."
|
||||||
close: "Close"
|
|
||||||
desktop/views/pages/tag.vue:
|
desktop/views/pages/tag.vue:
|
||||||
no-posts-found: "ハッシュタグ「{}」が付けられた投稿は見つかりませんでした。"
|
no-posts-found: "No posts \"{}\" found."
|
||||||
desktop/views/pages/user-list.users.vue:
|
desktop/views/pages/user-list.users.vue:
|
||||||
users: "User"
|
users: "User"
|
||||||
add-user: "Add a user"
|
add-user: "Add a user"
|
||||||
@ -785,6 +848,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"
|
||||||
@ -912,6 +977,7 @@ mobile/views/components/timeline.vue:
|
|||||||
load-more: "More"
|
load-more: "More"
|
||||||
mobile/views/components/ui.header.vue:
|
mobile/views/components/ui.header.vue:
|
||||||
welcome-back: "Welcome back, "
|
welcome-back: "Welcome back, "
|
||||||
|
adjective: "さん"
|
||||||
mobile/views/components/ui.nav.vue:
|
mobile/views/components/ui.nav.vue:
|
||||||
timeline: "Timeline"
|
timeline: "Timeline"
|
||||||
notifications: "Notifications"
|
notifications: "Notifications"
|
||||||
@ -954,13 +1020,18 @@ mobile/views/pages/home.vue:
|
|||||||
hybrid: "Social"
|
hybrid: "Social"
|
||||||
global: "Global"
|
global: "Global"
|
||||||
mobile/views/pages/tag.vue:
|
mobile/views/pages/tag.vue:
|
||||||
no-posts-found: "ハッシュタグ「{}」が付けられた投稿は見つかりませんでした。"
|
no-posts-found: "No posts \"{}\" found."
|
||||||
mobile/views/pages/welcome.vue:
|
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: "You can add/delete/rearrange widgets. To move the widget, drag \"三\". Tap \"x\" to delete the widget. Some widgets can change display by tapping."
|
||||||
|
add-widget: "Add"
|
||||||
|
customization-tips: "Customization tips"
|
||||||
mobile/views/pages/widgets/activity.vue:
|
mobile/views/pages/widgets/activity.vue:
|
||||||
activity: "Activity"
|
activity: "Activity"
|
||||||
|
mobile/views/pages/share.vue:
|
||||||
|
share-with: "Share with {}."
|
||||||
mobile/views/pages/messaging.vue:
|
mobile/views/pages/messaging.vue:
|
||||||
messaging: "Messaging"
|
messaging: "Messaging"
|
||||||
mobile/views/pages/messaging-room.vue:
|
mobile/views/pages/messaging-room.vue:
|
||||||
@ -976,7 +1047,7 @@ mobile/views/pages/note.vue:
|
|||||||
mobile/views/pages/notifications.vue:
|
mobile/views/pages/notifications.vue:
|
||||||
notifications: "Notifications"
|
notifications: "Notifications"
|
||||||
read-all: "Do you wish to mark all notifications as read?"
|
read-all: "Do you wish to mark all notifications as read?"
|
||||||
mobile/views/pages/reversi.vue:
|
mobile/views/pages/games/reversi.vue:
|
||||||
reversi: "Reversi"
|
reversi: "Reversi"
|
||||||
mobile/views/pages/settings/settings.profile.vue:
|
mobile/views/pages/settings/settings.profile.vue:
|
||||||
title: "Profile"
|
title: "Profile"
|
||||||
@ -995,6 +1066,7 @@ mobile/views/pages/settings/settings.profile.vue:
|
|||||||
mobile/views/pages/search.vue:
|
mobile/views/pages/search.vue:
|
||||||
search: "Search"
|
search: "Search"
|
||||||
empty: "No posts were found for '{}'"
|
empty: "No posts were found for '{}'"
|
||||||
|
not-found: "「{}」に関する投稿は見つかりませんでした。"
|
||||||
mobile/views/pages/selectdrive.vue:
|
mobile/views/pages/selectdrive.vue:
|
||||||
select-file: "Choose files"
|
select-file: "Choose files"
|
||||||
mobile/views/pages/settings.vue:
|
mobile/views/pages/settings.vue:
|
||||||
@ -1089,3 +1161,5 @@ docs:
|
|||||||
name: "Name"
|
name: "Name"
|
||||||
type: "Type"
|
type: "Type"
|
||||||
description: "Description"
|
description: "Description"
|
||||||
|
dev/views/index.vue:
|
||||||
|
manage-apps: "Manage apps"
|
||||||
|
426
locales/es.yml
426
locales/es.yml
@ -6,14 +6,28 @@ common:
|
|||||||
misskey: "Una ⭐️ del fediverso"
|
misskey: "Una ⭐️ del fediverso"
|
||||||
about-title: "Una ⭐️ del fediverso"
|
about-title: "Una ⭐️ del fediverso"
|
||||||
about: "Gracias por encontrae Misskey. Misskey es una <b>plataforma descentralizada de microblogging</b> nacida en la Tierra. Gracias a existir dentro del Fediverso (un universo donde se organizan varias plataformas sociales) se encuentra enlazada mutuamente con otras plataformas sociales. ¿Por què no te tomas un respiro del caos de la ciudad y te sumerges es una nueva manera de entender Internet?"
|
about: "Gracias por encontrae Misskey. Misskey es una <b>plataforma descentralizada de microblogging</b> nacida en la Tierra. Gracias a existir dentro del Fediverso (un universo donde se organizan varias plataformas sociales) se encuentra enlazada mutuamente con otras plataformas sociales. ¿Por què no te tomas un respiro del caos de la ciudad y te sumerges es una nueva manera de entender Internet?"
|
||||||
|
adblock:
|
||||||
|
detected: "Por favor, desactive el bloqueador de publicidad."
|
||||||
|
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."
|
||||||
|
close: "Cerrar"
|
||||||
|
do-not-copy-paste: "ここにコードを入力したり張り付けたりしないでください。アカウントが不正利用される可能性があります。"
|
||||||
|
got-it: "¡Listo!"
|
||||||
customization-tips:
|
customization-tips:
|
||||||
title: "カスタマイズのヒント"
|
title: "Consejos de personalización"
|
||||||
paragraph1: "ホームのカスタマイズでは、ウィジェットを追加/削除したり、ドラッグ&ドロップして並べ替えたりすることができます。"
|
paragraph1: "Customización de inicio le permite agregar, borrar, o reorganizar los accesorios."
|
||||||
paragraph2: "一部のウィジェットは、<strong><strong>右</strong>クリック</strong>することで表示を変更することができます。"
|
paragraph2: "Puede cambiar la visualización de algunos accesorios haciendo <strong> click derecho.</strong>"
|
||||||
paragraph3: "ウィジェットを削除するには、ヘッダーの<strong>「ゴミ箱」</strong>と書かれたエリアにウィジェットをドラッグ&ドロップします。"
|
paragraph3: "Para borrar un widget, <strong> desplace el accesorio hasta el área etiquetada \"Papelera\"</strong> en el encabezado."
|
||||||
paragraph4: "カスタマイズを終了するには、右上の「完了」をクリックします。"
|
paragraph4: "Para finalizar la personalización, cliquee \"Finalizar\" en la parte de arriba a la derecha."
|
||||||
gotit: "Got it!"
|
gotit: "¡Comprendido!"
|
||||||
name: "Misskey"
|
notification:
|
||||||
|
file-uploaded: "Archivo cargado."
|
||||||
|
message-from: "Mensaje de {}:"
|
||||||
|
reversi-invited: "Invitado a un juego"
|
||||||
|
reversi-invited-by: "Invitado por {}:"
|
||||||
|
notified-by: "Notificado por {}:"
|
||||||
|
reply-from: "Respuesta de {}:"
|
||||||
|
quoted-by: "Citado por {}:"
|
||||||
time:
|
time:
|
||||||
unknown: "Desconocido"
|
unknown: "Desconocido"
|
||||||
future: "Futuro"
|
future: "Futuro"
|
||||||
@ -25,7 +39,8 @@ common:
|
|||||||
weeks_ago: "Hace {} semana(s)"
|
weeks_ago: "Hace {} semana(s)"
|
||||||
months_ago: "Hace {} mes(es)"
|
months_ago: "Hace {} mes(es)"
|
||||||
years_ago: "Hace {} año(s)"
|
years_ago: "Hace {} año(s)"
|
||||||
trash: "ゴミ箱"
|
month-and-day: "{month}月 {day}日"
|
||||||
|
trash: "Papelera"
|
||||||
weekday-short:
|
weekday-short:
|
||||||
sunday: "domingo"
|
sunday: "domingo"
|
||||||
monday: "lunes"
|
monday: "lunes"
|
||||||
@ -35,13 +50,13 @@ common:
|
|||||||
friday: "viernes"
|
friday: "viernes"
|
||||||
saturday: "sábado"
|
saturday: "sábado"
|
||||||
weekday:
|
weekday:
|
||||||
sunday: "日曜日"
|
sunday: "Domingo"
|
||||||
monday: "月曜日"
|
monday: "Lunes"
|
||||||
tuesday: "火曜日"
|
tuesday: "Martes"
|
||||||
wednesday: "水曜日"
|
wednesday: "Miércoles"
|
||||||
thursday: "木曜日"
|
thursday: "Jueves"
|
||||||
friday: "金曜日"
|
friday: "Viernes"
|
||||||
saturday: "土曜日"
|
saturday: "Sábado"
|
||||||
reactions:
|
reactions:
|
||||||
like: "me gusta"
|
like: "me gusta"
|
||||||
love: "amor"
|
love: "amor"
|
||||||
@ -59,27 +74,28 @@ common:
|
|||||||
d: "¿Quieres decir algo?"
|
d: "¿Quieres decir algo?"
|
||||||
e: "¡Escribe aquí!"
|
e: "¡Escribe aquí!"
|
||||||
f: "Esperando a que escribas algo..."
|
f: "Esperando a que escribas algo..."
|
||||||
search: "検索"
|
search: "Buscar"
|
||||||
delete: "eliminar"
|
delete: "eliminar"
|
||||||
loading: "cargando"
|
loading: "cargando"
|
||||||
ok: "OK"
|
ok: "OK"
|
||||||
update-available-title: "更新があります"
|
update-available-title: "Actualización disponible"
|
||||||
update-available: "Hay disponible una nueva versión de Misskey ({newer}, la versión actual es {current}). Refresca la página para aplicar las actualizaciones."
|
update-available: "Hay disponible una nueva versión de Misskey ({newer}, la versión actual es {current}). Refresca la página para aplicar las actualizaciones."
|
||||||
my-token-regenerated: "Tu token se ha regenerado vas a ser desconectado."
|
my-token-regenerated: "Tu token se ha regenerado vas a ser desconectado."
|
||||||
i-like-sushi: "私は(プリンよりむしろ)寿司が好き"
|
i-like-sushi: "Prefiero sushi a pudín"
|
||||||
show-reversi-board-labels: "リバーシのボードの行と列のラベルを表示"
|
show-reversi-board-labels: "Mostrar etiquetas de filas y columnas en Reversi"
|
||||||
verified-user: "認証済みのユーザー"
|
verified-user: "Usuario verificado"
|
||||||
|
disable-animated-mfm: "Desactivar texto animado en una publicación"
|
||||||
reversi:
|
reversi:
|
||||||
drawn: "引き分け"
|
drawn: "Empatado"
|
||||||
my-turn: "あなたのターンです"
|
my-turn: "Mi turno"
|
||||||
opponent-turn: "相手のターンです"
|
opponent-turn: "Turno del oponente"
|
||||||
turn-of: "{}のターンです"
|
turn-of: "Es turno de {}"
|
||||||
past-turn-of: "{}のターン"
|
past-turn-of: "Turno de {}"
|
||||||
won: "{}の勝ち"
|
won: "{} ha ganado"
|
||||||
black: "黒"
|
black: "Negro"
|
||||||
white: "白"
|
white: "Blanco"
|
||||||
total: "合計"
|
total: "Total"
|
||||||
this-turn: "{}ターン目"
|
this-turn: "Turno de {}"
|
||||||
widgets:
|
widgets:
|
||||||
analog-clock: "Reloj analógico"
|
analog-clock: "Reloj analógico"
|
||||||
profile: "Perfil"
|
profile: "Perfil"
|
||||||
@ -108,7 +124,7 @@ common:
|
|||||||
widgets: "Accesorios"
|
widgets: "Accesorios"
|
||||||
home: "Inicio"
|
home: "Inicio"
|
||||||
local: "Local"
|
local: "Local"
|
||||||
hybrid: "ソーシャル"
|
hybrid: "Social"
|
||||||
global: "Global"
|
global: "Global"
|
||||||
notifications: "Notificaciones"
|
notifications: "Notificaciones"
|
||||||
list: "Listado"
|
list: "Listado"
|
||||||
@ -121,42 +137,70 @@ common:
|
|||||||
rename: "Renombrar"
|
rename: "Renombrar"
|
||||||
stack-left: "A la izqda."
|
stack-left: "A la izqda."
|
||||||
pop-right: "A la dcha."
|
pop-right: "A la dcha."
|
||||||
|
auth/views/form.vue:
|
||||||
|
share-access: "¿Deseas <b>permitir</b> a <i>{{ app.name }}</i> acceder a tu cuenta?"
|
||||||
|
permission-ask: "La aplicación requiere los siguientes permisos:"
|
||||||
|
account-read: "Viendo información de la cuenta:"
|
||||||
|
account-write: "Modificar información de la cuenta:"
|
||||||
|
note-write: "Publicación."
|
||||||
|
like-write: "Para reaccionar a las publicaciones."
|
||||||
|
following-write: "Seguir o dejar de seguir"
|
||||||
|
drive-read: "Leer tu unidad."
|
||||||
|
drive-write: "Cargar o borrar archivos de tu unidad."
|
||||||
|
notification-read: "Leer tus notificaciones."
|
||||||
|
notification-write: "Administrar tus notificaciones."
|
||||||
|
cancel: "Cancelar"
|
||||||
|
accept: "Garantizar acceso."
|
||||||
|
auth/views/index.vue:
|
||||||
|
loading: "Cargando"
|
||||||
|
denied: "Acceso de aplicación denegado."
|
||||||
|
denied-paragraph: "Esta aplicación no tendrá acceso a tu cuenta."
|
||||||
|
already-authorized: "Esta aplicación ha sido previamente autorizada."
|
||||||
|
allowed: "Accesos de aplicaciones autorizados."
|
||||||
|
callback-url: "Volviendo a la aplicación."
|
||||||
|
please-go-back: "Por favor, vuelve a la aplicación."
|
||||||
|
error: "Esta sesión no existe."
|
||||||
|
sign-in: "Por favor inicia sesión."
|
||||||
common/views/components/games/reversi/reversi.vue:
|
common/views/components/games/reversi/reversi.vue:
|
||||||
title: "Misskey Reversi"
|
|
||||||
sub-title: "他のMisskeyユーザーとリバーシで対戦しよう"
|
|
||||||
invite: "招待"
|
|
||||||
rule: "遊び方"
|
|
||||||
rule-desc: "リバーシは、相手と交互に石をボードに置いて、相手の石を挟んで自分の色に変えてゆき、最終的に残った石が多い方が勝ちというボードゲームです。"
|
|
||||||
mode-invite: "招待"
|
|
||||||
mode-invite-desc: "指定したユーザーと対戦するモードです。"
|
|
||||||
invitations: "対局の招待があります!"
|
|
||||||
my-games: "自分の対局"
|
|
||||||
all-games: "みんなの対局"
|
|
||||||
enter-username: "ユーザー名を入力してください"
|
|
||||||
game-state:
|
|
||||||
ended: "終了"
|
|
||||||
playing: "進行中"
|
|
||||||
matching:
|
matching:
|
||||||
waiting-for: "{}を待っています"
|
waiting-for: "Esperando por {}"
|
||||||
cacnel: "キャンセル"
|
cancel: "Cancelar"
|
||||||
|
common/views/components/games/reversi/reversi.game.vue:
|
||||||
|
surrender: "Rendirse"
|
||||||
|
surrendered: "Por rendirse"
|
||||||
|
common/views/components/games/reversi/reversi.index.vue:
|
||||||
|
title: "Misskey Reversi"
|
||||||
|
sub-title: "¡Juega Reversi con tus amigos!"
|
||||||
|
invite: "Invitar"
|
||||||
|
rule: "Cómo jugar"
|
||||||
|
rule-desc: "リバーシは、相手と交互に石をボードに置いて、相手の石を挟んで自分の色に変えてゆき、最終的に残った石が多い方が勝ちというボードゲームです。"
|
||||||
|
mode-invite: "Invitar"
|
||||||
|
mode-invite-desc: "Invitar un usuario al juego."
|
||||||
|
invitations: "¡Has recibido una invitación!"
|
||||||
|
my-games: "Mis juegos"
|
||||||
|
all-games: "Todos los juegos"
|
||||||
|
enter-username: "Ingresar nombre de usuario"
|
||||||
|
game-state:
|
||||||
|
ended: "Finalizado"
|
||||||
|
playing: "En progreso"
|
||||||
common/views/components/games/reversi/reversi.room.vue:
|
common/views/components/games/reversi/reversi.room.vue:
|
||||||
settings-of-the-game: "ゲームの設定"
|
settings-of-the-game: "Configuración de juego"
|
||||||
choose-map: "マップを選択"
|
choose-map: "Elije un mapa"
|
||||||
random: "ランダム"
|
random: "Aleatorio"
|
||||||
black-or-white: "先手/後手"
|
black-or-white: "Negro/Blanco"
|
||||||
black-is: "{}が黒"
|
black-is: "Negro es {}"
|
||||||
rules: "ルール"
|
rules: "Reglas"
|
||||||
is-llotheo: "石の少ない方が勝ち(ロセオ)"
|
is-llotheo: "El que tenga menos gana"
|
||||||
looped-map: "ループマップ"
|
looped-map: "Mapa en bucle"
|
||||||
can-put-everywhere: "どこでも置けるモード"
|
can-put-everywhere: "Puedes colocar donde quieras"
|
||||||
settings-of-the-bot: "Botの設定"
|
settings-of-the-bot: "Configuración de bot"
|
||||||
this-gane-is-started-soon: "ゲームは数秒後に開始されます"
|
this-game-is-started-soon: "El juego comenzará pronto"
|
||||||
waiting-for-other: "相手の準備が完了するのを待っています"
|
waiting-for-other: "Esperando a que se prepare el adversario"
|
||||||
waiting-for-me: "あなたの準備が完了するのを待っています"
|
waiting-for-me: "Esperando por la preparación"
|
||||||
waiting-for-both: "準備中"
|
waiting-for-both: "Esperando por ti"
|
||||||
cancel: "キャンセル"
|
cancel: "Cancelar"
|
||||||
ready: "準備完了"
|
ready: "Listo"
|
||||||
cancel-ready: "準備続行"
|
cancel-ready: "Cancelar \"Listo\""
|
||||||
common/views/components/connect-failed.vue:
|
common/views/components/connect-failed.vue:
|
||||||
title: "Imposible conectar al servidor"
|
title: "Imposible conectar al servidor"
|
||||||
description: "Hay un problema en tu conexió o puede que el servidor esté caido o en mantenimiento. Por favor {try again} más tarde."
|
description: "Hay un problema en tu conexió o puede que el servidor esté caido o en mantenimiento. Por favor {try again} más tarde."
|
||||||
@ -191,11 +235,13 @@ common/views/components/messaging-room.vue:
|
|||||||
no-history: "El historial se ha acabado"
|
no-history: "El historial se ha acabado"
|
||||||
resize-form: "Arrastra para redimensionar"
|
resize-form: "Arrastra para redimensionar"
|
||||||
new-message: "Nuevo mensaje"
|
new-message: "Nuevo mensaje"
|
||||||
|
only-one-file-attached: "メッセージに添付できるのはひとつのファイルのみです"
|
||||||
common/views/components/messaging-room.form.vue:
|
common/views/components/messaging-room.form.vue:
|
||||||
input-message-here: "Escribe el mensaje aquí"
|
input-message-here: "Escribe el mensaje aquí"
|
||||||
send: "Enviar"
|
send: "Enviar"
|
||||||
attach-from-local: "Adjunta ficheros desde tu PC"
|
attach-from-local: "Adjunta ficheros desde tu PC"
|
||||||
attach-from-drive: "Adjunta ficheros desde tu disco"
|
attach-from-drive: "Adjunta ficheros desde tu disco"
|
||||||
|
only-one-file-attached: "メッセージに添付できるのはひとつのファイルのみです"
|
||||||
common/views/components/messaging-room.message.vue:
|
common/views/components/messaging-room.message.vue:
|
||||||
is-read: "Leer"
|
is-read: "Leer"
|
||||||
deleted: "El mensaje se ha borrado"
|
deleted: "El mensaje se ha borrado"
|
||||||
@ -235,6 +281,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..."
|
||||||
@ -287,49 +335,49 @@ common/views/widgets/broadcast.vue:
|
|||||||
have-a-nice-day: "¡Buenos dias!"
|
have-a-nice-day: "¡Buenos dias!"
|
||||||
next: "Siguiente"
|
next: "Siguiente"
|
||||||
common/views/widgets/calendar.vue:
|
common/views/widgets/calendar.vue:
|
||||||
year: "{}年"
|
year: "Año {}"
|
||||||
month: "{}月"
|
month: "Mes {}"
|
||||||
day: "{}日"
|
day: "Día {}"
|
||||||
today: "今日:"
|
today: "Hoy:"
|
||||||
this-month: "今月:"
|
this-month: "Este mes:"
|
||||||
this-year: "今年:"
|
this-year: "Este año:"
|
||||||
common/views/widgets/donation.vue:
|
common/views/widgets/donation.vue:
|
||||||
title: "Donaciones"
|
title: "Donaciones"
|
||||||
text: "Misskeyの運営にはドメイン、サーバー等のコストが掛かります。Misskeyは広告を掲載したりしないため、収入を皆様からの寄付に頼っています。もしご興味があれば、{}までご連絡ください。ご協力ありがとうございます。"
|
text: "Para mantener Misskey funcionando tenemos que pagar por el dominio, los costos de hospedaje y otros costos. Como no recibimos dinero de publicidad, contamos con el apoyo de todos ustedes. Si estás interesado en ayudar, contacta a {}. ¡Muchas gracias por tu contribución!"
|
||||||
common/views/widgets/photo-stream.vue:
|
common/views/widgets/photo-stream.vue:
|
||||||
title: "フォトストリーム"
|
title: "Galería de fotos"
|
||||||
no-photos: "写真はありません"
|
no-photos: "No hay fotos."
|
||||||
common/views/widgets/posts-monitor.vue:
|
common/views/widgets/posts-monitor.vue:
|
||||||
title: "投稿チャート"
|
title: "Tabla de publicaciones"
|
||||||
toggle: "表示を切り替え"
|
toggle: "Alternar vistas"
|
||||||
common/views/widgets/hashtags.vue:
|
common/views/widgets/hashtags.vue:
|
||||||
title: "ハッシュタグ"
|
title: "Etiquetas"
|
||||||
count: "{}人が投稿"
|
count: "{} usuarios mencionados"
|
||||||
empty: "トレンドなし"
|
empty: "Ninguna tendencia popular ahora"
|
||||||
common/views/widgets/server.vue:
|
common/views/widgets/server.vue:
|
||||||
title: "サーバー情報"
|
title: "Información del servidor"
|
||||||
toggle: "表示を切り替え"
|
toggle: "Alternar vistas"
|
||||||
common/views/widgets/memo.vue:
|
common/views/widgets/memo.vue:
|
||||||
title: "付箋"
|
title: "Notas"
|
||||||
memo: "ここに書いて!"
|
memo: "¡Escribe aquí!"
|
||||||
save: "保存"
|
save: "Guardar"
|
||||||
common/views/widgets/slideshow.vue:
|
common/views/widgets/slideshow.vue:
|
||||||
folder-customize-mode: "フォルダを指定するには、カスタマイズモードを終了してください"
|
folder-customize-mode: "Para especificar una carpeta, por favor sal de modo de personalización"
|
||||||
folder: "クリックしてフォルダを指定してください"
|
folder: "Por favor, cliquea y especifica una carpeta"
|
||||||
no-image: "このフォルダには画像がありません"
|
no-image: "No hay imágenes en esta carpeta"
|
||||||
common/views/widgets/tips.vue:
|
common/views/widgets/tips.vue:
|
||||||
tips-line1: "<kbd>t</kbd>でタイムラインにフォーカスできます"
|
tips-line1: "Puedes enfocarte en las publicaciones con <kbd>t</kbd>"
|
||||||
tips-line2: "<kbd>p</kbd>または<kbd>n</kbd>で投稿フォームを開きます"
|
tips-line2: "Abrir formulario de publicación con <kbd>p</kbd> or <kbd>n</kbd>"
|
||||||
tips-line3: "投稿フォームにはファイルをドラッグ&ドロップできます"
|
tips-line3: "Puedes arrastrar y soltar archivos en el formulario de publicación"
|
||||||
tips-line4: "投稿フォームにクリップボードにある画像データをペーストできます"
|
tips-line4: "Puedes pegar una imagen del portapapeles en el formulario de publicación"
|
||||||
tips-line5: "ドライブにファイルをドラッグ&ドロップしてアップロードできます"
|
tips-line5: "Puedes cargar archivos con sólo arrastrarlos y soltarlos en Drive"
|
||||||
tips-line6: "ドライブでファイルをドラッグしてフォルダ移動できます"
|
tips-line6: "Puedes mover una carpeta arrastrándola hacia el Drive"
|
||||||
tips-line7: "ドライブでフォルダをドラッグしてフォルダ移動できます"
|
tips-line7: "Puedes mover una carpeta arrastrándola hacia el Drive"
|
||||||
tips-line8: "ホームは設定からカスタマイズできます"
|
tips-line8: "Inicio se puede personalizar desde la configuración"
|
||||||
tips-line9: "MisskeyはAGPLv3です"
|
tips-line9: "Misskey está hecho bajo licencia AGPLv3"
|
||||||
tips-line10: "タイムマシンウィジェットを利用すると、簡単に過去のタイムラインに遡れます"
|
tips-line10: "Usando el accesorio de Máquina del Tiempo puedes encontrar publicaciones antiguas"
|
||||||
tips-line11: "投稿の ... をクリックして、投稿をユーザーページにピン留めできます"
|
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: "いくつかのウィンドウはブラウザの外に切り離すことができます"
|
||||||
@ -344,6 +392,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"
|
||||||
@ -453,66 +512,69 @@ desktop/views/components/game-window.vue:
|
|||||||
game: "リバーシ"
|
game: "リバーシ"
|
||||||
desktop/views/components/home.vue:
|
desktop/views/components/home.vue:
|
||||||
done: "完了"
|
done: "完了"
|
||||||
add-widget: "ウィジェットを追加:"
|
add-widget: "Agregar accesorio:"
|
||||||
add: "追加"
|
add: "Agregar"
|
||||||
desktop/views/input-dialog.vue:
|
desktop/views/input-dialog.vue:
|
||||||
cancel: "キャンセル"
|
cancel: "Cancelar"
|
||||||
ok: "決定"
|
ok: "OK"
|
||||||
desktop/views/components/messaging-room-window.vue:
|
desktop/views/components/messaging-room-window.vue:
|
||||||
title: "メッセージ:"
|
title: "Mensajes:"
|
||||||
desktop/views/components/messaging-window.vue:
|
desktop/views/components/messaging-window.vue:
|
||||||
title: "メッセージ"
|
title: "Mensajes"
|
||||||
desktop/views/components/note-detail.vue:
|
desktop/views/components/note-detail.vue:
|
||||||
more: "会話をもっと読み込む"
|
more: "Cargar más conversaciones"
|
||||||
private: "この投稿は非公開です"
|
private: "Esta publicación es privada"
|
||||||
deleted: "この投稿は削除されました"
|
deleted: "Esta publicación ha sido removida"
|
||||||
reposted-by: "{}がRenote"
|
reposted-by: "Republicado por {}"
|
||||||
location: "位置情報"
|
location: "Localización"
|
||||||
renote: "Renote"
|
renote: "Republicar"
|
||||||
add-reaction: "リアクション"
|
add-reaction: "Agregar una reacción"
|
||||||
desktop/views/components/notes.note.vue:
|
desktop/views/components/notes.note.vue:
|
||||||
reposted-by: "{}がRenote"
|
reposted-by: "Republicado por {}"
|
||||||
reply: "返信"
|
reply: "Responder"
|
||||||
renote: "Renote"
|
renote: "Republicar"
|
||||||
add-reaction: "リアクション"
|
add-reaction: "Agregar una reacción"
|
||||||
detail: "詳細"
|
detail: "Mostrar detalles"
|
||||||
private: "この投稿は非公開です"
|
private: "Esta publicación es privada"
|
||||||
deleted: "この投稿は削除されました"
|
deleted: "Esta publicación ha sido borrada"
|
||||||
|
hide: "隠す"
|
||||||
|
see-more: "もっと見る"
|
||||||
desktop/views/components/notes.vue:
|
desktop/views/components/notes.vue:
|
||||||
error: "読み込みに失敗しました。"
|
error: "Error al cargar."
|
||||||
retry: "リトライ"
|
retry: "Reintentar"
|
||||||
load-more: "もっと読み込む"
|
load-more: "Leer más"
|
||||||
desktop/views/components/notifications.vue:
|
desktop/views/components/notifications.vue:
|
||||||
more: "もっと見る"
|
more: "Más"
|
||||||
empty: "ありません!"
|
empty: "No hay notificaciones"
|
||||||
desktop/views/components/post-form.vue:
|
desktop/views/components/post-form.vue:
|
||||||
add-visible-user: "+ユーザーを追加"
|
add-visible-user: "+Agregar usuario"
|
||||||
attach-location-information: "位置情報を添付する"
|
attach-location-information: "Agregar localización"
|
||||||
hide-contents: "内容を隠す"
|
hide-contents: "Esconder contenidos"
|
||||||
reply-placeholder: "この投稿への返信..."
|
reply-placeholder: "Responder a esta nota..."
|
||||||
quote-placeholder: "この投稿を引用..."
|
quote-placeholder: "Citar esta nota..."
|
||||||
submit: "投稿"
|
submit: "Publicar"
|
||||||
reply: "返信"
|
reply: "Responder"
|
||||||
renote: "Renote"
|
renote: "Republicar"
|
||||||
posted: "投稿しました!"
|
posted: "¡Publicado!"
|
||||||
replied: "返信しました!"
|
replied: "¡Respondido!"
|
||||||
reposted: "Renoteしました!"
|
reposted: "¡Republicado!"
|
||||||
note-failed: "投稿に失敗しました"
|
note-failed: "Error al publicar nota"
|
||||||
reply-failed: "返信に失敗しました"
|
reply-failed: "Error al responder"
|
||||||
renote-failed: "Renoteに失敗しました"
|
renote-failed: "Error al republicar"
|
||||||
posting: "投稿中"
|
posting: "Publicando"
|
||||||
attach-media-from-local: "PCからメディアを添付"
|
attach-media-from-local: "Agregar medios de tu dispositivo"
|
||||||
attach-media-from-drive: "Adjunta multimedia desde tu Disco"
|
attach-media-from-drive: "Adjunta multimedia desde tu Disco"
|
||||||
attach-cancel: "Quitar el archivo adjunto"
|
attach-cancel: "Quitar el archivo adjunto"
|
||||||
insert-a-kao: "v('ω')v"
|
insert-a-kao: "v('ω')v"
|
||||||
create-poll: "Crea una encuesta"
|
create-poll: "Crea una encuesta"
|
||||||
text-remain: "quedan {} caracteres"
|
text-remain: "quedan {} caracteres"
|
||||||
recent-tags: "最近"
|
recent-tags: "Reciente"
|
||||||
click-to-tagging: "クリックでタグ付け"
|
click-to-tagging: "Click para etiquetar"
|
||||||
visibility: "公開範囲"
|
visibility: "Visibilidad"
|
||||||
geolocation-alert: "お使いの端末は位置情報に対応していません"
|
geolocation-alert: "Tu dispositivo no tiene soporte de geolocalización."
|
||||||
error: "エラー"
|
error: "Error"
|
||||||
enter-username: "ユーザー名を入力してください"
|
enter-username: "Por favor escribe un nombre de usuario..."
|
||||||
|
annotations: "内容への注釈 (オプション)"
|
||||||
desktop/views/components/post-form-window.vue:
|
desktop/views/components/post-form-window.vue:
|
||||||
note: "Nota nueva"
|
note: "Nota nueva"
|
||||||
reply: "Responder"
|
reply: "Responder"
|
||||||
@ -553,8 +615,8 @@ desktop/views/components/settings.vue:
|
|||||||
api-via-stream-desc: "Las peticiones de las API se realizan por conexiones WebSocket en lugar de las tradicionales (para una mejora en el rendimiento). Esta función depende del navegador."
|
api-via-stream-desc: "Las peticiones de las API se realizan por conexiones WebSocket en lugar de las tradicionales (para una mejora en el rendimiento). Esta función depende del navegador."
|
||||||
display: "Diseño y pantalla"
|
display: "Diseño y pantalla"
|
||||||
customize: "Personaliza la página principal"
|
customize: "Personaliza la página principal"
|
||||||
choose-wallpaper: "壁紙を選択"
|
choose-wallpaper: "Elije un fondo"
|
||||||
delete-wallpaper: "壁紙を削除"
|
delete-wallpaper: "Suprimir fondo"
|
||||||
dark-mode: "Modo Nocturno"
|
dark-mode: "Modo Nocturno"
|
||||||
circle-icons: "Usar iconos circulares"
|
circle-icons: "Usar iconos circulares"
|
||||||
gradient-window-header: "Usar degradados en las cabeceras de las páginas"
|
gradient-window-header: "Usar degradados en las cabeceras de las páginas"
|
||||||
@ -610,38 +672,38 @@ desktop/views/components/settings.2fa.vue:
|
|||||||
intro: "二段階認証を設定すると、サインイン時にパスワードだけでなく、予め登録しておいた物理的なデバイス(例えばあなたのスマートフォンなど)も必要になり、よりセキュリティが向上します。"
|
intro: "二段階認証を設定すると、サインイン時にパスワードだけでなく、予め登録しておいた物理的なデバイス(例えばあなたのスマートフォンなど)も必要になり、よりセキュリティが向上します。"
|
||||||
detail: "詳細..."
|
detail: "詳細..."
|
||||||
url: "https://www.google.co.jp/intl/ja/landing/2step/"
|
url: "https://www.google.co.jp/intl/ja/landing/2step/"
|
||||||
caution: "登録したデバイスを紛失するなどした場合、Misskeyにサインインできなくなりますのでご注意ください。"
|
caution: "Si pierdes acceso al dispositivo, no podrás conectarte a Misskey."
|
||||||
register: "デバイスを登録する"
|
register: "Registrar un dispositivo"
|
||||||
already-registered: "既に設定は完了しています。"
|
already-registered: "Un dispositivo ya fue registrado"
|
||||||
unregister: "設定を解除"
|
unregister: "Inhabilitado"
|
||||||
unregistered: "二段階認証が無効になりました。"
|
unregistered: "Autenticación de dos pasos fue deshabilitada."
|
||||||
enter-password: "パスワードを入力してください"
|
enter-password: "Escribe una contraseña"
|
||||||
authenticator: "まず、Google Authenticatorをお使いのデバイスにインストールします:"
|
authenticator: "Primero, necesitas instalar Google Authenticator en tu dispositivo:"
|
||||||
howtoinstall: "インストール方法はこちら"
|
howtoinstall: "Cómo instalar"
|
||||||
scan: "次に、表示されているQRコードをスキャンします:"
|
scan: "Luego, escanea el código QR:"
|
||||||
done: "お使いのデバイスに表示されているトークンを入力して完了します:"
|
done: "Por favor ingresa el token mostrado en tu dispositivo:"
|
||||||
submit: "完了"
|
submit: "Enviar"
|
||||||
success: "設定が完了しました!"
|
success: "¡Configuraciones guardadas!"
|
||||||
failed: "設定に失敗しました。トークンに誤りがないかご確認ください。"
|
failed: "Error al configurar. Por favor asegúrate de que el token es correcto."
|
||||||
info: "次回サインインからは、同様にパスワードに加えてデバイスに表示されているトークンを入力します。"
|
info: "Desde ahora, ingresa el token que se muestra en tu dispositivo adicionalmente a tu contraseña cuando inicies sesión en Misskey"
|
||||||
desktop/views/components/settings.api.vue:
|
desktop/views/components/settings.api.vue:
|
||||||
intro: "APIを利用するには、上記のトークンを「i」というキーでパラメータに付加してリクエストします。"
|
intro: "Para acceder al API, configura este token como la letra \"i\" de los parámetros requeridos."
|
||||||
caution: "アカウントを不正利用される可能性があるため、このトークンは第三者に教えないでください(アプリなどにも入力しないでください)。"
|
caution: "Por favor no muestres este token a otros (no lo ingreses en otro lugar que no sea aquí). De otra forma, tu cuenta puede llegar a ser comprometida."
|
||||||
regeneration-of-token: "万が一このトークンが漏れたりその可能性がある場合はトークンを再生成できます。"
|
regeneration-of-token: "En el caso no deseado de que este token lo tenga otra persona, puedes regenerarlo."
|
||||||
regenerate-token: "トークンを再生成"
|
regenerate-token: "Regenerar el token"
|
||||||
token: "Token:"
|
token: "Token:"
|
||||||
enter-password: "パスワードを入力してください"
|
enter-password: "Por favor ingresa tu contraseña"
|
||||||
desktop/views/components/settings.apps.vue:
|
desktop/views/components/settings.apps.vue:
|
||||||
no-apps: "連携しているアプリケーションはありません"
|
no-apps: "No hay aplicaciones asociadas"
|
||||||
desktop/views/components/settings.drive.vue:
|
desktop/views/components/settings.drive.vue:
|
||||||
max: "中"
|
max: "Max"
|
||||||
in-use: "使用中"
|
in-use: "en uso."
|
||||||
desktop/views/components/settings.mute.vue:
|
desktop/views/components/settings.mute.vue:
|
||||||
no-users: "ミュートしているユーザーはいません"
|
no-users: "No hay usuarios silenciados"
|
||||||
desktop/views/components/settings.password.vue:
|
desktop/views/components/settings.password.vue:
|
||||||
reset: "パスワードを変更する"
|
reset: "Cambiar contraseña"
|
||||||
enter-current-password: "現在のパスワードを入力してください"
|
enter-current-password: "Ingresar contraseña actual"
|
||||||
enter-new-password: "新しいパスワードを入力してください"
|
enter-new-password: "Ingresar nueva contraseña"
|
||||||
enter-new-password-again: "もう一度新しいパスワードを入力してください"
|
enter-new-password-again: "もう一度新しいパスワードを入力してください"
|
||||||
not-match: "新しいパスワードが一致しません"
|
not-match: "新しいパスワードが一致しません"
|
||||||
changed: "パスワードを変更しました"
|
changed: "パスワードを変更しました"
|
||||||
@ -674,6 +736,7 @@ desktop/views/components/timeline.vue:
|
|||||||
list: "リスト"
|
list: "リスト"
|
||||||
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: "プロフィール"
|
||||||
drive: "ドライブ"
|
drive: "ドライブ"
|
||||||
@ -702,6 +765,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: "フォロー"
|
||||||
@ -751,8 +815,7 @@ desktop/views/pages/search.vue:
|
|||||||
not-available: "検索機能を利用することができません。"
|
not-available: "検索機能を利用することができません。"
|
||||||
not-found: "「{}」に関する投稿は見つかりませんでした。"
|
not-found: "「{}」に関する投稿は見つかりませんでした。"
|
||||||
desktop/views/pages/share.vue:
|
desktop/views/pages/share.vue:
|
||||||
share-with: "Misskeyで共有"
|
share-with: "{}で共有"
|
||||||
close: "閉じる"
|
|
||||||
desktop/views/pages/tag.vue:
|
desktop/views/pages/tag.vue:
|
||||||
no-posts-found: "ハッシュタグ「{}」が付けられた投稿は見つかりませんでした。"
|
no-posts-found: "ハッシュタグ「{}」が付けられた投稿は見つかりませんでした。"
|
||||||
desktop/views/pages/user-list.users.vue:
|
desktop/views/pages/user-list.users.vue:
|
||||||
@ -785,6 +848,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: "フォロー"
|
||||||
@ -912,6 +977,7 @@ mobile/views/components/timeline.vue:
|
|||||||
load-more: "もっと"
|
load-more: "もっと"
|
||||||
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: "タイムライン"
|
||||||
notifications: "通知"
|
notifications: "通知"
|
||||||
@ -959,8 +1025,13 @@ mobile/views/pages/welcome.vue:
|
|||||||
signup: "新規登録"
|
signup: "新規登録"
|
||||||
mobile/views/pages/widgets.vue:
|
mobile/views/pages/widgets.vue:
|
||||||
dashboard: "ダッシュボード"
|
dashboard: "ダッシュボード"
|
||||||
|
widgets-hints: "ウィジェットを追加/削除したり並べ替えたりできます。ウィジェットを移動するには「三」をドラッグします。ウィジェットを削除するには「x」をタップします。いくつかのウィジェットはタップすることで表示を変更できます。"
|
||||||
|
add-widget: "追加"
|
||||||
|
customization-tips: "カスタマイズのヒント"
|
||||||
mobile/views/pages/widgets/activity.vue:
|
mobile/views/pages/widgets/activity.vue:
|
||||||
activity: "アクティビティ"
|
activity: "アクティビティ"
|
||||||
|
mobile/views/pages/share.vue:
|
||||||
|
share-with: "{}で共有"
|
||||||
mobile/views/pages/messaging.vue:
|
mobile/views/pages/messaging.vue:
|
||||||
messaging: "メッセージ"
|
messaging: "メッセージ"
|
||||||
mobile/views/pages/messaging-room.vue:
|
mobile/views/pages/messaging-room.vue:
|
||||||
@ -976,7 +1047,7 @@ mobile/views/pages/note.vue:
|
|||||||
mobile/views/pages/notifications.vue:
|
mobile/views/pages/notifications.vue:
|
||||||
notifications: "通知"
|
notifications: "通知"
|
||||||
read-all: "すべての通知を既読にしますか?"
|
read-all: "すべての通知を既読にしますか?"
|
||||||
mobile/views/pages/reversi.vue:
|
mobile/views/pages/games/reversi.vue:
|
||||||
reversi: "リバーシ"
|
reversi: "リバーシ"
|
||||||
mobile/views/pages/settings/settings.profile.vue:
|
mobile/views/pages/settings/settings.profile.vue:
|
||||||
title: "プロフィール"
|
title: "プロフィール"
|
||||||
@ -995,6 +1066,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: "ファイルを選択"
|
||||||
mobile/views/pages/settings.vue:
|
mobile/views/pages/settings.vue:
|
||||||
@ -1089,3 +1161,5 @@ docs:
|
|||||||
name: "名前"
|
name: "名前"
|
||||||
type: "型"
|
type: "型"
|
||||||
description: "説明"
|
description: "説明"
|
||||||
|
dev/views/index.vue:
|
||||||
|
manage-apps: "アプリの管理"
|
||||||
|
296
locales/fr.yml
296
locales/fr.yml
@ -6,6 +6,13 @@ common:
|
|||||||
misskey: "Une ⭐ du fédiverse"
|
misskey: "Une ⭐ du fédiverse"
|
||||||
about-title: "Une ⭐ du fédiverse."
|
about-title: "Une ⭐ du fédiverse."
|
||||||
about: "Merci d'avoir découvert Misskey. Misskey est une <b>plateforme de micro-blogging distribuée</b> née sur Terre. Parce qu'il fait partie du Fédiverse (un univers composé de diverses plateformes de réseaux sociaux organisées), il est mutuellement connecté avec d'autres plateformes de réseaux sociaux. Désirez-vous prendre une pause, pendant un instant, loin de l'agitation de la ville et plonger dans un nouvel Internet ?"
|
about: "Merci d'avoir découvert Misskey. Misskey est une <b>plateforme de micro-blogging distribuée</b> née sur Terre. Parce qu'il fait partie du Fédiverse (un univers composé de diverses plateformes de réseaux sociaux organisées), il est mutuellement connecté avec d'autres plateformes de réseaux sociaux. Désirez-vous prendre une pause, pendant un instant, loin de l'agitation de la ville et plonger dans un nouvel Internet ?"
|
||||||
|
adblock:
|
||||||
|
detected: "Veuillez désactiver le bloqueur de publicités"
|
||||||
|
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"
|
||||||
|
close: "Fermer"
|
||||||
|
do-not-copy-paste: "ここにコードを入力したり張り付けたりしないでください。アカウントが不正利用される可能性があります。"
|
||||||
|
got-it: "J'ai compris !"
|
||||||
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."
|
||||||
@ -13,7 +20,14 @@ common:
|
|||||||
paragraph3: "Pour supprimer un widget, <strong>glissez et déposez le widget sur la zone étiquetée \"Corbeille\"</strong> dans l'en-tête."
|
paragraph3: "Pour supprimer un widget, <strong>glissez et déposez le widget sur la zone étiquetée \"Corbeille\"</strong> dans l'en-tête."
|
||||||
paragraph4: "Pour terminer la personnalisation, cliquez sur \"Terminer\" dans le coin supérieur droit."
|
paragraph4: "Pour terminer la personnalisation, cliquez sur \"Terminer\" dans le coin supérieur droit."
|
||||||
gotit: "Compris!"
|
gotit: "Compris!"
|
||||||
name: "Misskey"
|
notification:
|
||||||
|
file-uploaded: "Le fichier a été téléversé !"
|
||||||
|
message-from: "Message de {} :"
|
||||||
|
reversi-invited: "Invité à jouer"
|
||||||
|
reversi-invited-by: "Invité par {} :"
|
||||||
|
notified-by: "Notifié par {} :"
|
||||||
|
reply-from: "Réponse de {} :"
|
||||||
|
quoted-by: "Cité·e par {} :"
|
||||||
time:
|
time:
|
||||||
unknown: "inconnu"
|
unknown: "inconnu"
|
||||||
future: "future"
|
future: "future"
|
||||||
@ -25,6 +39,7 @@ common:
|
|||||||
weeks_ago: "Il y a {} semaines·s"
|
weeks_ago: "Il y a {} semaines·s"
|
||||||
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"
|
||||||
|
month-and-day: "{month}/{day}"
|
||||||
trash: "Corbeille"
|
trash: "Corbeille"
|
||||||
weekday-short:
|
weekday-short:
|
||||||
sunday: "D"
|
sunday: "D"
|
||||||
@ -35,13 +50,13 @@ common:
|
|||||||
friday: "V"
|
friday: "V"
|
||||||
saturday: "S"
|
saturday: "S"
|
||||||
weekday:
|
weekday:
|
||||||
sunday: "日曜日"
|
sunday: "Dimanche"
|
||||||
monday: "月曜日"
|
monday: "Lundi"
|
||||||
tuesday: "火曜日"
|
tuesday: "Mardi"
|
||||||
wednesday: "水曜日"
|
wednesday: "Mercredi"
|
||||||
thursday: "木曜日"
|
thursday: "Jeudi"
|
||||||
friday: "金曜日"
|
friday: "Vendredi"
|
||||||
saturday: "土曜日"
|
saturday: "Samedi"
|
||||||
reactions:
|
reactions:
|
||||||
like: "Aime"
|
like: "Aime"
|
||||||
love: "Adore"
|
love: "Adore"
|
||||||
@ -69,6 +84,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"
|
||||||
@ -76,10 +92,10 @@ common:
|
|||||||
turn-of: "C’est le tour de {}"
|
turn-of: "C’est le tour de {}"
|
||||||
past-turn-of: "C'est au tour de {}"
|
past-turn-of: "C'est au tour de {}"
|
||||||
won: "{} a gagné"
|
won: "{} a gagné"
|
||||||
black: "黒"
|
black: "Noirs"
|
||||||
white: "白"
|
white: "Blancs"
|
||||||
total: "合計"
|
total: "Total"
|
||||||
this-turn: "{}ターン目"
|
this-turn: "Tour {}"
|
||||||
widgets:
|
widgets:
|
||||||
analog-clock: "Horloge analogique"
|
analog-clock: "Horloge analogique"
|
||||||
profile: "Profil"
|
profile: "Profil"
|
||||||
@ -97,7 +113,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"
|
||||||
@ -121,44 +137,72 @@ common:
|
|||||||
rename: "Renommer"
|
rename: "Renommer"
|
||||||
stack-left: "Vers la gauche"
|
stack-left: "Vers la gauche"
|
||||||
pop-right: "Vers la droite"
|
pop-right: "Vers la droite"
|
||||||
|
auth/views/form.vue:
|
||||||
|
share-access: "Désirez-vous <b>autoriser</b> <i>{{ app.name }}</i> à avoir accès à votre compte ?"
|
||||||
|
permission-ask: "Cette application nécessite les autorisations suivantes :"
|
||||||
|
account-read: "Afficher les informations du compte :"
|
||||||
|
account-write: "Modifications des informations du compte :"
|
||||||
|
note-write: "Publier."
|
||||||
|
like-write: "Réagir aux publications."
|
||||||
|
following-write: "S'abonner et se désabonner."
|
||||||
|
drive-read: "Lire votre Drive"
|
||||||
|
drive-write: "Téléverser/supprimer des fichiers dans votre Drive."
|
||||||
|
notification-read: "Lire vos notifications."
|
||||||
|
notification-write: "Gérer vos notifications."
|
||||||
|
cancel: "Annuler"
|
||||||
|
accept: "Autoriser l’accès"
|
||||||
|
auth/views/index.vue:
|
||||||
|
loading: "Chargement en cours"
|
||||||
|
denied: "L'autorisation de l'application a été refusée."
|
||||||
|
denied-paragraph: "Cette application ne va pas accéder à votre compte."
|
||||||
|
already-authorized: "Cette application est déjà autorisée"
|
||||||
|
allowed: "アプリケーションの連携を許可しました"
|
||||||
|
callback-url: "Retour vers l'application"
|
||||||
|
please-go-back: "Veillez retourner à l'application."
|
||||||
|
error: "La session n'existe pas."
|
||||||
|
sign-in: "Veuillez vous connecter"
|
||||||
common/views/components/games/reversi/reversi.vue:
|
common/views/components/games/reversi/reversi.vue:
|
||||||
title: "Misskey Reversi"
|
|
||||||
sub-title: "他のMisskeyユーザーとリバーシで対戦しよう"
|
|
||||||
invite: "招待"
|
|
||||||
rule: "遊び方"
|
|
||||||
rule-desc: "リバーシは、相手と交互に石をボードに置いて、相手の石を挟んで自分の色に変えてゆき、最終的に残った石が多い方が勝ちというボードゲームです。"
|
|
||||||
mode-invite: "招待"
|
|
||||||
mode-invite-desc: "指定したユーザーと対戦するモードです。"
|
|
||||||
invitations: "対局の招待があります!"
|
|
||||||
my-games: "自分の対局"
|
|
||||||
all-games: "みんなの対局"
|
|
||||||
enter-username: "ユーザー名を入力してください"
|
|
||||||
game-state:
|
|
||||||
ended: "終了"
|
|
||||||
playing: "進行中"
|
|
||||||
matching:
|
matching:
|
||||||
waiting-for: "{}を待っています"
|
waiting-for: "En attente de {}"
|
||||||
cacnel: "キャンセル"
|
cancel: "Annuler"
|
||||||
|
common/views/components/games/reversi/reversi.game.vue:
|
||||||
|
surrender: "Se rendre"
|
||||||
|
surrendered: "Par abandon"
|
||||||
|
common/views/components/games/reversi/reversi.index.vue:
|
||||||
|
title: "Misskey Reversi"
|
||||||
|
sub-title: "Jouer à Reversi avec vos amis·es !"
|
||||||
|
invite: "Inviter"
|
||||||
|
rule: "Comment Jouer ?"
|
||||||
|
rule-desc: "リバーシは、相手と交互に石をボードに置いて、相手の石を挟んで自分の色に変えてゆき、最終的に残った石が多い方が勝ちというボードゲームです。"
|
||||||
|
mode-invite: "Inviter"
|
||||||
|
mode-invite-desc: "Inviter un joueur."
|
||||||
|
invitations: "Vous avez reçu une invitation !"
|
||||||
|
my-games: "Mes jeux"
|
||||||
|
all-games: "Tous les jeux"
|
||||||
|
enter-username: "Saisir un nom d'utilisateur"
|
||||||
|
game-state:
|
||||||
|
ended: "Terminée"
|
||||||
|
playing: "En cours"
|
||||||
common/views/components/games/reversi/reversi.room.vue:
|
common/views/components/games/reversi/reversi.room.vue:
|
||||||
settings-of-the-game: "ゲームの設定"
|
settings-of-the-game: "Paramètres du jeu"
|
||||||
choose-map: "マップを選択"
|
choose-map: "Sélectionnez une carte"
|
||||||
random: "ランダム"
|
random: "Aléatoire"
|
||||||
black-or-white: "先手/後手"
|
black-or-white: "Noirs/Blancs"
|
||||||
black-is: "{}が黒"
|
black-is: "{} Noirs"
|
||||||
rules: "ルール"
|
rules: "Règles"
|
||||||
is-llotheo: "石の少ない方が勝ち(ロセオ)"
|
is-llotheo: "石の少ない方が勝ち(ロセオ)"
|
||||||
looped-map: "ループマップ"
|
looped-map: "Carte en boucle"
|
||||||
can-put-everywhere: "どこでも置けるモード"
|
can-put-everywhere: "どこでも置けるモード"
|
||||||
settings-of-the-bot: "Botの設定"
|
settings-of-the-bot: "Configuration du bot"
|
||||||
this-gane-is-started-soon: "ゲームは数秒後に開始されます"
|
this-game-is-started-soon: "La partie commencera dans quelques instants"
|
||||||
waiting-for-other: "相手の準備が完了するのを待っています"
|
waiting-for-other: "En attente que l'adversaire soit prêt"
|
||||||
waiting-for-me: "あなたの準備が完了するのを待っています"
|
waiting-for-me: "En attente que vous soyez prêt"
|
||||||
waiting-for-both: "準備中"
|
waiting-for-both: "En attente que vous soyez prêt"
|
||||||
cancel: "キャンセル"
|
cancel: "Annuler"
|
||||||
ready: "準備完了"
|
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: "Échec de connexion au serveur"
|
||||||
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."
|
||||||
thanks: "On vous remercie d'utiliser Misskey."
|
thanks: "On vous remercie d'utiliser Misskey."
|
||||||
troubleshoot: "dépanner"
|
troubleshoot: "dépanner"
|
||||||
@ -168,7 +212,7 @@ common/views/components/connect-failed.troubleshooter.vue:
|
|||||||
checking-network: "Vérification de la connexion au réseau"
|
checking-network: "Vérification de la connexion au réseau"
|
||||||
internet: "Connexion Internet"
|
internet: "Connexion Internet"
|
||||||
checking-internet: "Vérification de la connexion internet"
|
checking-internet: "Vérification de la connexion internet"
|
||||||
server: "Connexion au server"
|
server: "Connexion au serveur"
|
||||||
checking-server: "Vérification de la connexion au serveur"
|
checking-server: "Vérification de la connexion au serveur"
|
||||||
finding: "Recherche d'un problème"
|
finding: "Recherche d'un problème"
|
||||||
no-network: "Aucune connexion au réseau"
|
no-network: "Aucune connexion au réseau"
|
||||||
@ -176,9 +220,9 @@ common/views/components/connect-failed.troubleshooter.vue:
|
|||||||
no-internet: "Aucune connexion internet."
|
no-internet: "Aucune connexion internet."
|
||||||
no-internet-desc: "Veuillez vérifier que vous êtes bien connecté à internet."
|
no-internet-desc: "Veuillez vérifier que vous êtes bien connecté à internet."
|
||||||
no-server: "Impossible de se connecter au serveur"
|
no-server: "Impossible de se connecter au serveur"
|
||||||
no-server-desc: "Votre connexion est OK, mais il a été impossible de vous connecter au serveur de Misskey. Il y a des chances que le serveur soit hors-ligne ou en maintenance, veuillez ressayer plus tard."
|
no-server-desc: "Votre connexion semble correcte, mais il a été impossible de vous connecter au serveur de Misskey. Il se peut que le serveur soit hors-ligne ou en maintenance, veuillez ressayer plus tard."
|
||||||
success: "Connexion au serveur de Misskey reussie!"
|
success: "Connexion au serveur de Misskey réussie !"
|
||||||
success-desc: "La connexion au serveur a été reussie. Veuillez recharger la page."
|
success-desc: "Succès de la connexion au serveur de Misskey. Veuillez recharger la page."
|
||||||
flush: "Vider le cache"
|
flush: "Vider le cache"
|
||||||
set-version: "Choisissez une version"
|
set-version: "Choisissez une version"
|
||||||
common/views/components/messaging.vue:
|
common/views/components/messaging.vue:
|
||||||
@ -191,11 +235,13 @@ common/views/components/messaging-room.vue:
|
|||||||
no-history: "Il n'y a pas plus d'historique"
|
no-history: "Il n'y a pas plus d'historique"
|
||||||
resize-form: "Faites glisser pour redimensionner"
|
resize-form: "Faites glisser pour redimensionner"
|
||||||
new-message: "Nouveau message"
|
new-message: "Nouveau message"
|
||||||
|
only-one-file-attached: "Un seul fichier uniquement peut être joint au message"
|
||||||
common/views/components/messaging-room.form.vue:
|
common/views/components/messaging-room.form.vue:
|
||||||
input-message-here: "Tapez ici votre message"
|
input-message-here: "Tapez ici votre message"
|
||||||
send: "Envoyer"
|
send: "Envoyer"
|
||||||
attach-from-local: "Joindre un fichier depuis votre PC"
|
attach-from-local: "Joindre un fichier depuis votre PC"
|
||||||
attach-from-drive: "Joindre un fichier depuis votre Drive"
|
attach-from-drive: "Joindre un fichier depuis votre Drive"
|
||||||
|
only-one-file-attached: "Un seul fichier uniquement peut être joint au message"
|
||||||
common/views/components/messaging-room.message.vue:
|
common/views/components/messaging-room.message.vue:
|
||||||
is-read: "Lu"
|
is-read: "Lu"
|
||||||
deleted: "Ce message a été supprimé"
|
deleted: "Ce message a été supprimé"
|
||||||
@ -235,6 +281,8 @@ common/views/components/signin.vue:
|
|||||||
token: "Token"
|
token: "Token"
|
||||||
signing-in: "Connexion...."
|
signing-in: "Connexion...."
|
||||||
signin: "Se connecter"
|
signin: "Se connecter"
|
||||||
|
or: "Ou"
|
||||||
|
signin-with-twitter: "Se connecter via 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"
|
||||||
@ -242,10 +290,10 @@ common/views/components/signup.vue:
|
|||||||
unavailable: "Non disponible"
|
unavailable: "Non disponible"
|
||||||
error: "Erreur de réseau"
|
error: "Erreur de réseau"
|
||||||
invalid-format: "Utilisez seulement des lettres, nombres et/ou -."
|
invalid-format: "Utilisez seulement des lettres, nombres et/ou -."
|
||||||
too-short: "Veuillez taper au moins un charactère!"
|
too-short: "Veuillez saisir au moins un caractère !"
|
||||||
too-long: "Veuillez entrer au maximum 20 charactères."
|
too-long: "Veuillez entrer au maximum 20 caractères."
|
||||||
password: "Mot de Passe"
|
password: "Mot de Passe"
|
||||||
password-placeholder: "Nous recommendons au moins 8 charactères."
|
password-placeholder: "Nous recommendons au moins 8 caractères."
|
||||||
weak-password: "Faible"
|
weak-password: "Faible"
|
||||||
normal-password: "Moyen"
|
normal-password: "Moyen"
|
||||||
strong-password: "Fort"
|
strong-password: "Fort"
|
||||||
@ -255,21 +303,21 @@ common/views/components/signup.vue:
|
|||||||
password-not-matched: "Les mots de passes ne correspondent pas."
|
password-not-matched: "Les mots de passes ne correspondent pas."
|
||||||
recaptcha: "Vérifier"
|
recaptcha: "Vérifier"
|
||||||
create: "Créer un compte"
|
create: "Créer un compte"
|
||||||
some-error: "La création de compte a échoué. Veuillez ressayer."
|
some-error: "La création du compte a échoué. Veuillez réessayer."
|
||||||
common/views/components/special-message.vue:
|
common/views/components/special-message.vue:
|
||||||
new-year: "Bonne année !"
|
new-year: "Bonne année !"
|
||||||
christmas: "Joyeux Noël !"
|
christmas: "Joyeux Noël !"
|
||||||
common/views/components/stream-indicator.vue:
|
common/views/components/stream-indicator.vue:
|
||||||
connecting: "Connexion en cours"
|
connecting: "Connexion en cours"
|
||||||
reconnecting: "Re-connexion en cours"
|
reconnecting: "Reconnexion en cours"
|
||||||
connected: "Connecté"
|
connected: "Connecté"
|
||||||
common/views/components/twitter-setting.vue:
|
common/views/components/twitter-setting.vue:
|
||||||
description: "Si vous liez votre compte Twitter à votre compte Misskey, vous verrez ensuite votre compte Twitter s'afficher sur votre profile, vous aurez aussi la possibilité de vous connecter à Misskey en utilisant votre compte Twitter."
|
description: "Si vous liez votre compte Twitter à votre compte Misskey, vous verrez ensuite votre compte Twitter s'afficher sur votre profile, vous aurez aussi la possibilité de vous connecter à Misskey en utilisant votre compte Twitter."
|
||||||
connected-to: "Vous êtes connecté à ce compte"
|
connected-to: "Vous êtes connecté à ce compte Twitter"
|
||||||
detail: "Detail..."
|
detail: "Détails …"
|
||||||
reconnect: "Reconnecter"
|
reconnect: "Reconnecter"
|
||||||
connect: "Lier votre compte Twitter"
|
connect: "Lier votre compte Twitter"
|
||||||
disconnect: "Deconnecter"
|
disconnect: "Déconnecter"
|
||||||
common/views/components/uploader.vue:
|
common/views/components/uploader.vue:
|
||||||
waiting: "En attente"
|
waiting: "En attente"
|
||||||
common/views/components/visibility-chooser.vue:
|
common/views/components/visibility-chooser.vue:
|
||||||
@ -279,29 +327,29 @@ common/views/components/visibility-chooser.vue:
|
|||||||
followers: "Abonné·e·s"
|
followers: "Abonné·e·s"
|
||||||
followers-desc: "Publier à vos abonné·e·s uniquement"
|
followers-desc: "Publier à vos abonné·e·s uniquement"
|
||||||
specified: "Direct"
|
specified: "Direct"
|
||||||
specified-desc: "Publier aux utilisateurs mentionnés"
|
specified-desc: "Publier aux utilisateurs·trices mentionné·es"
|
||||||
private: "Privé"
|
private: "Privé"
|
||||||
common/views/widgets/broadcast.vue:
|
common/views/widgets/broadcast.vue:
|
||||||
fetching: "Récuperation"
|
fetching: "Récuperation"
|
||||||
no-broadcasts: "No broadcasts"
|
no-broadcasts: "Aucune annonce"
|
||||||
have-a-nice-day: "Passez une bonne journée !"
|
have-a-nice-day: "Passez une bonne journée !"
|
||||||
next: "Suivant"
|
next: "Suivant"
|
||||||
common/views/widgets/calendar.vue:
|
common/views/widgets/calendar.vue:
|
||||||
year: "{}年"
|
year: "{} année"
|
||||||
month: "{}月"
|
month: "{} mois"
|
||||||
day: "{}日"
|
day: "{} jour"
|
||||||
today: "今日:"
|
today: "Aujourd'hui :"
|
||||||
this-month: "今月:"
|
this-month: "Ce mois-ci :"
|
||||||
this-year: "今年:"
|
this-year: "Cette année :"
|
||||||
common/views/widgets/donation.vue:
|
common/views/widgets/donation.vue:
|
||||||
title: "Dons"
|
title: "Dons"
|
||||||
text: "Toutes les depences pour couvrir les frais de Misskey sortent directement de notre poche. Nous ne recevons pas d'argent, si vous pouvez nous faire dons d'argent, on vous serait eternellement reconnaissant. Si vous êtes intéressés veuilles contacter {}. Merci pour votre contribution!"
|
text: "Les frais pour faire fonctionner Misskey sortent directement de notre poche. Nous ne recevons pas d'argent issu de la publicité, si vous pouvez nous faire des dons, on vous serait éternellement reconnaissants. Si vous êtes intéressé·es veuillez contacter {}. Merci pour votre contribution !"
|
||||||
common/views/widgets/photo-stream.vue:
|
common/views/widgets/photo-stream.vue:
|
||||||
title: "Flux de photo"
|
title: "Flux de photo"
|
||||||
no-photos: "Pas de photos"
|
no-photos: "Pas de photos"
|
||||||
common/views/widgets/posts-monitor.vue:
|
common/views/widgets/posts-monitor.vue:
|
||||||
title: "Graph des publications"
|
title: "Graph des publications"
|
||||||
toggle: "Basculer les vues"
|
toggle: "Basculer entre les vues"
|
||||||
common/views/widgets/hashtags.vue:
|
common/views/widgets/hashtags.vue:
|
||||||
title: "Étiquettes"
|
title: "Étiquettes"
|
||||||
count: "{} utilisateurs mentionnés"
|
count: "{} utilisateurs mentionnés"
|
||||||
@ -314,38 +362,49 @@ common/views/widgets/memo.vue:
|
|||||||
memo: "Écrivez ici !"
|
memo: "Écrivez ici !"
|
||||||
save: "Enregistrer"
|
save: "Enregistrer"
|
||||||
common/views/widgets/slideshow.vue:
|
common/views/widgets/slideshow.vue:
|
||||||
folder-customize-mode: "フォルダを指定するには、カスタマイズモードを終了してください"
|
folder-customize-mode: "Veuillez quitter le mode personnalisé pour pouvour spécifier un dossier"
|
||||||
folder: "クリックしてフォルダを指定してください"
|
folder: "Veuillez cliquer pour spécifier le dossier"
|
||||||
no-image: "このフォルダには画像がありません"
|
no-image: "Il n'y a aucune image dans ce dossier"
|
||||||
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: "Vous pouvez téléverser des fichiers sur le Drive en faisant un glisser/déplacer"
|
||||||
tips-line6: "ドライブでファイルをドラッグしてフォルダ移動できます"
|
tips-line6: "ドライブでファイルをドラッグしてフォルダ移動できます"
|
||||||
tips-line7: "ドライブでフォルダをドラッグしてフォルダ移動できます"
|
tips-line7: "ドライブでフォルダをドラッグしてフォルダ移動できます"
|
||||||
tips-line8: "ホームは設定からカスタマイズできます"
|
tips-line8: "Vous pouvez personnaliser l'Accueil via les paramètres"
|
||||||
tips-line9: "Misskeyは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: "投稿に添付したファイルは全てドライブに保存されます"
|
tips-line13: "Tous les fichiers attachés à cette publication sont sauvegardés dans le Drive"
|
||||||
tips-line14: "ホームのカスタマイズ中、ウィジェットを右クリックしてデザインを変更できます"
|
tips-line14: "ホームのカスタマイズ中、ウィジェットを右クリックしてデザインを変更できます"
|
||||||
tips-line17: "「**」でテキストを囲むと**強調表示**されます"
|
tips-line17: "Vous pouvez mettre un texte en surbrillance en le mettant entre ** **"
|
||||||
tips-line19: "いくつかのウィンドウはブラウザの外に切り離すことができます"
|
tips-line19: "いくつかのウィンドウはブラウザの外に切り離すことができます"
|
||||||
tips-line20: "カレンダーウィジェットのパーセンテージは、経過の割合を示しています"
|
tips-line20: "カレンダーウィジェットのパーセンテージは、経過の割合を示しています"
|
||||||
tips-line21: "APIを利用してbotの開発なども行えます"
|
tips-line21: "Vous pouvez aussi utiliser l'API pour développer des Bots."
|
||||||
tips-line23: "まゆかわいいよまゆ"
|
tips-line23: "まゆかわいいよまゆ"
|
||||||
tips-line24: "Misskeyは2014年にサービスを開始しました"
|
tips-line24: "Misskey a vu le jour en 2014"
|
||||||
tips-line25: "対応ブラウザではMisskeyを開いていなくても通知を受け取れます"
|
tips-line25: "対応ブラウザではMisskeyを開いていなくても通知を受け取れます"
|
||||||
common/views/pages/follow.vue:
|
common/views/pages/follow.vue:
|
||||||
signed-in-as: "Connecté en tant que {}"
|
signed-in-as: "Connecté·é en tant que {}"
|
||||||
following: "Suit"
|
following: "Suit"
|
||||||
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: "Découpez la partie qui apparaîtra comme une bannière"
|
||||||
|
banner: "Bannière"
|
||||||
|
uploading-banner: "Téléversement d'une nouvelle bannière"
|
||||||
|
banner-updated: "La bannière est mise à jour"
|
||||||
|
choose-banner: "Choisir une bannière"
|
||||||
|
avatar-crop-title: "Découpez la partie qui apparaîtra dans l'avatar"
|
||||||
|
avatar: "Avatar"
|
||||||
|
uploading-avatar: "Téléversement du nouvel avatar"
|
||||||
|
avatar-updated: "L'avatar est mis à jour"
|
||||||
|
choose-avatar: "Choisir un avatar"
|
||||||
desktop/views/components/activity.chart.vue:
|
desktop/views/components/activity.chart.vue:
|
||||||
total: "Noir ... Total"
|
total: "Noirs ... Total"
|
||||||
notes: "Bleu ... Notes"
|
notes: "Bleu ... Notes"
|
||||||
replies: "Rouge ... Réponses"
|
replies: "Rouge ... Réponses"
|
||||||
renotes: "Vert ... Partages"
|
renotes: "Vert ... Partages"
|
||||||
@ -478,6 +537,8 @@ desktop/views/components/notes.note.vue:
|
|||||||
detail: "Afficher les détails"
|
detail: "Afficher les détails"
|
||||||
private: "cette publication est privée"
|
private: "cette publication est privée"
|
||||||
deleted: "cette publication a été supprimée"
|
deleted: "cette publication a été supprimée"
|
||||||
|
hide: "Masquer"
|
||||||
|
see-more: "Voir plus"
|
||||||
desktop/views/components/notes.vue:
|
desktop/views/components/notes.vue:
|
||||||
error: "Échec du chargement."
|
error: "Échec du chargement."
|
||||||
retry: "Réessayer"
|
retry: "Réessayer"
|
||||||
@ -486,9 +547,9 @@ desktop/views/components/notifications.vue:
|
|||||||
more: "Plus"
|
more: "Plus"
|
||||||
empty: "Pas de notifications"
|
empty: "Pas de notifications"
|
||||||
desktop/views/components/post-form.vue:
|
desktop/views/components/post-form.vue:
|
||||||
add-visible-user: "+ユーザーを追加"
|
add-visible-user: "+Ajouter un utilisateur"
|
||||||
attach-location-information: "位置情報を添付する"
|
attach-location-information: "Attacher des informations de localisation"
|
||||||
hide-contents: "内容を隠す"
|
hide-contents: "Masquer les contenus"
|
||||||
reply-placeholder: "Répondre à cette note"
|
reply-placeholder: "Répondre à cette note"
|
||||||
quote-placeholder: "Citer cette note"
|
quote-placeholder: "Citer cette note"
|
||||||
submit: "Poster"
|
submit: "Poster"
|
||||||
@ -508,11 +569,12 @@ desktop/views/components/post-form.vue:
|
|||||||
create-poll: "Créer un sondage"
|
create-poll: "Créer un sondage"
|
||||||
text-remain: "{} charactères restants"
|
text-remain: "{} charactères restants"
|
||||||
recent-tags: "Récent"
|
recent-tags: "Récent"
|
||||||
click-to-tagging: "クリックでタグ付け"
|
click-to-tagging: "Cliquer pour tagguer"
|
||||||
visibility: "公開範囲"
|
visibility: "Visibilité"
|
||||||
geolocation-alert: "お使いの端末は位置情報に対応していません"
|
geolocation-alert: "Votre appareil ne prend pas en charge les services de localisation"
|
||||||
error: "エラー"
|
error: "Erreur"
|
||||||
enter-username: "ユーザー名を入力してください"
|
enter-username: "Saisir un nom d'utilisateur …"
|
||||||
|
annotations: "内容への注釈 (オプション)"
|
||||||
desktop/views/components/post-form-window.vue:
|
desktop/views/components/post-form-window.vue:
|
||||||
note: "Nouvelle note"
|
note: "Nouvelle note"
|
||||||
reply: "Répondre"
|
reply: "Répondre"
|
||||||
@ -559,7 +621,7 @@ desktop/views/components/settings.vue:
|
|||||||
circle-icons: "Utiliser des icônes circulaires"
|
circle-icons: "Utiliser des icônes circulaires"
|
||||||
gradient-window-header: "Utiliser les dégradés sur la barre de titre de la fenêtre"
|
gradient-window-header: "Utiliser les dégradés sur la barre de titre de la fenêtre"
|
||||||
post-form-on-timeline: "タイムライン上部に投稿フォームを表示する"
|
post-form-on-timeline: "タイムライン上部に投稿フォームを表示する"
|
||||||
show-reply-target: "リプライ先を表示する"
|
show-reply-target: "Afficher les réponses"
|
||||||
show-my-renotes: "Afficher mes republications dans le fil"
|
show-my-renotes: "Afficher mes republications dans le fil"
|
||||||
show-renoted-my-notes: "Renoteされた自分の投稿をタイムラインに表示する"
|
show-renoted-my-notes: "Renoteされた自分の投稿をタイムラインに表示する"
|
||||||
show-maps: "Afficher la carte"
|
show-maps: "Afficher la carte"
|
||||||
@ -634,8 +696,8 @@ desktop/views/components/settings.api.vue:
|
|||||||
desktop/views/components/settings.apps.vue:
|
desktop/views/components/settings.apps.vue:
|
||||||
no-apps: "Aucune application autorisée"
|
no-apps: "Aucune application autorisée"
|
||||||
desktop/views/components/settings.drive.vue:
|
desktop/views/components/settings.drive.vue:
|
||||||
max: "中"
|
max: "Maximum"
|
||||||
in-use: "使用中"
|
in-use: "en cours d’utilisation"
|
||||||
desktop/views/components/settings.mute.vue:
|
desktop/views/components/settings.mute.vue:
|
||||||
no-users: "Aucun utilisateurs mis en sourdine"
|
no-users: "Aucun utilisateurs mis en sourdine"
|
||||||
desktop/views/components/settings.password.vue:
|
desktop/views/components/settings.password.vue:
|
||||||
@ -658,7 +720,7 @@ desktop/views/components/settings.profile.vue:
|
|||||||
other: "Autre"
|
other: "Autre"
|
||||||
is-bot: "Ce compte est un Bot"
|
is-bot: "Ce compte est un Bot"
|
||||||
is-cat: "Ce compte est un Chat"
|
is-cat: "Ce compte est un Chat"
|
||||||
profile-updated: "プロフィールを更新しました"
|
profile-updated: "Profil mis à jour"
|
||||||
desktop/views/components/sub-note-content.vue:
|
desktop/views/components/sub-note-content.vue:
|
||||||
private: "cette publication est privée"
|
private: "cette publication est privée"
|
||||||
deleted: "cette publication a été supprimée"
|
deleted: "cette publication a été supprimée"
|
||||||
@ -673,7 +735,8 @@ 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 !"
|
||||||
|
adjective: "さん"
|
||||||
desktop/views/components/ui.header.account.vue:
|
desktop/views/components/ui.header.account.vue:
|
||||||
profile: "Votre profil"
|
profile: "Votre profil"
|
||||||
drive: "Drive"
|
drive: "Drive"
|
||||||
@ -702,6 +765,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: "Nom de la liste"
|
||||||
desktop/views/components/user-preview.vue:
|
desktop/views/components/user-preview.vue:
|
||||||
notes: "Publications"
|
notes: "Publications"
|
||||||
following: "Abonné à"
|
following: "Abonné à"
|
||||||
@ -732,7 +796,7 @@ desktop/views/pages/welcome.vue:
|
|||||||
signin-button: "Se connecter"
|
signin-button: "Se connecter"
|
||||||
signup-button: "S'inscrire"
|
signup-button: "S'inscrire"
|
||||||
timeline: "Fil d'actualité"
|
timeline: "Fil d'actualité"
|
||||||
powered-by-misskey: "Powered by <b>Misskey</b>."
|
powered-by-misskey: "Propulsé par <b>Misskey</b>."
|
||||||
desktop/views/pages/drive.vue:
|
desktop/views/pages/drive.vue:
|
||||||
title: "Lecteur de Misskey"
|
title: "Lecteur de Misskey"
|
||||||
desktop/views/pages/favorites.vue:
|
desktop/views/pages/favorites.vue:
|
||||||
@ -748,11 +812,10 @@ desktop/views/pages/selectdrive.vue:
|
|||||||
cancel: "Annuler"
|
cancel: "Annuler"
|
||||||
upload: "Uploader un ou plusieurs fichier(s) depuis votre PC"
|
upload: "Uploader un ou plusieurs fichier(s) depuis votre PC"
|
||||||
desktop/views/pages/search.vue:
|
desktop/views/pages/search.vue:
|
||||||
not-available: "検索機能を利用することができません。"
|
not-available: "Vous ne pouvez pas utiliser la fonctionnalité de recherche."
|
||||||
not-found: "「{}」に関する投稿は見つかりませんでした。"
|
not-found: "Aucun message trouvé pour '{}'"
|
||||||
desktop/views/pages/share.vue:
|
desktop/views/pages/share.vue:
|
||||||
share-with: "Misskeyで共有"
|
share-with: "Partager avec {}"
|
||||||
close: "閉じる"
|
|
||||||
desktop/views/pages/tag.vue:
|
desktop/views/pages/tag.vue:
|
||||||
no-posts-found: "ハッシュタグ「{}」が付けられた投稿は見つかりませんでした。"
|
no-posts-found: "ハッシュタグ「{}」が付けられた投稿は見つかりませんでした。"
|
||||||
desktop/views/pages/user-list.users.vue:
|
desktop/views/pages/user-list.users.vue:
|
||||||
@ -785,6 +848,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: "Ajouter à la liste"
|
||||||
|
list-pushed: "Vous avez ajouté {user} à la liste {list}."
|
||||||
desktop/views/pages/user/user.header.vue:
|
desktop/views/pages/user/user.header.vue:
|
||||||
posts: "Notes"
|
posts: "Notes"
|
||||||
following: "Suit"
|
following: "Suit"
|
||||||
@ -898,7 +963,7 @@ mobile/views/components/post-form.vue:
|
|||||||
renote: "Republier"
|
renote: "Republier"
|
||||||
quote-placeholder: "Citer ce billet ... (Facultatif)"
|
quote-placeholder: "Citer ce billet ... (Facultatif)"
|
||||||
reply-placeholder: "Répondre à cette note"
|
reply-placeholder: "Répondre à cette note"
|
||||||
cw-placeholder: "内容への注釈 (オプション)"
|
cw-placeholder: "Commenter le contenu (optionnel)"
|
||||||
location-alert: "Votre appareil ne prend pas en charge les services de localisation"
|
location-alert: "Votre appareil ne prend pas en charge les services de localisation"
|
||||||
error: "Erreur"
|
error: "Erreur"
|
||||||
username-prompt: "Saisir un nom d'utilisateur"
|
username-prompt: "Saisir un nom d'utilisateur"
|
||||||
@ -911,7 +976,8 @@ mobile/views/components/timeline.vue:
|
|||||||
empty: "Pas de notes"
|
empty: "Pas de notes"
|
||||||
load-more: "Afficher plus"
|
load-more: "Afficher plus"
|
||||||
mobile/views/components/ui.header.vue:
|
mobile/views/components/ui.header.vue:
|
||||||
welcome-back: "おかえりなさい、"
|
welcome-back: "Bon retour parmi nous !"
|
||||||
|
adjective: "さん"
|
||||||
mobile/views/components/ui.nav.vue:
|
mobile/views/components/ui.nav.vue:
|
||||||
timeline: "Fil d'actualité"
|
timeline: "Fil d'actualité"
|
||||||
notifications: "Notifications"
|
notifications: "Notifications"
|
||||||
@ -943,7 +1009,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:
|
||||||
@ -956,11 +1022,16 @@ mobile/views/pages/home.vue:
|
|||||||
mobile/views/pages/tag.vue:
|
mobile/views/pages/tag.vue:
|
||||||
no-posts-found: "ハッシュタグ「{}」が付けられた投稿は見つかりませんでした。"
|
no-posts-found: "ハッシュタグ「{}」が付けられた投稿は見つかりませんでした。"
|
||||||
mobile/views/pages/welcome.vue:
|
mobile/views/pages/welcome.vue:
|
||||||
signup: "新規登録"
|
signup: "S'enregistrer"
|
||||||
mobile/views/pages/widgets.vue:
|
mobile/views/pages/widgets.vue:
|
||||||
dashboard: "ダッシュボード"
|
dashboard: "Tableau de bord"
|
||||||
|
widgets-hints: "ウィジェットを追加/削除したり並べ替えたりできます。ウィジェットを移動するには「三」をドラッグします。ウィジェットを削除するには「x」をタップします。いくつかのウィジェットはタップすることで表示を変更できます。"
|
||||||
|
add-widget: "Ajouter"
|
||||||
|
customization-tips: "Conseils de personnalisation"
|
||||||
mobile/views/pages/widgets/activity.vue:
|
mobile/views/pages/widgets/activity.vue:
|
||||||
activity: "アクティビティ"
|
activity: "Activité"
|
||||||
|
mobile/views/pages/share.vue:
|
||||||
|
share-with: "Partager avec {}"
|
||||||
mobile/views/pages/messaging.vue:
|
mobile/views/pages/messaging.vue:
|
||||||
messaging: "Messagerie"
|
messaging: "Messagerie"
|
||||||
mobile/views/pages/messaging-room.vue:
|
mobile/views/pages/messaging-room.vue:
|
||||||
@ -976,8 +1047,8 @@ mobile/views/pages/note.vue:
|
|||||||
mobile/views/pages/notifications.vue:
|
mobile/views/pages/notifications.vue:
|
||||||
notifications: "Notifications"
|
notifications: "Notifications"
|
||||||
read-all: "Êtes vous sûr de vouloir marqués toutes les notifications non-lus en tant que lus?"
|
read-all: "Êtes vous sûr de vouloir marqués toutes les notifications non-lus en tant que lus?"
|
||||||
mobile/views/pages/reversi.vue:
|
mobile/views/pages/games/reversi.vue:
|
||||||
reversi: "リバーシ"
|
reversi: "Reversi"
|
||||||
mobile/views/pages/settings/settings.profile.vue:
|
mobile/views/pages/settings/settings.profile.vue:
|
||||||
title: "Profil"
|
title: "Profil"
|
||||||
name: "Nom"
|
name: "Nom"
|
||||||
@ -995,10 +1066,11 @@ mobile/views/pages/settings/settings.profile.vue:
|
|||||||
mobile/views/pages/search.vue:
|
mobile/views/pages/search.vue:
|
||||||
search: "Chercher"
|
search: "Chercher"
|
||||||
empty: "Aucun message trouvé pour '{}' "
|
empty: "Aucun message trouvé pour '{}' "
|
||||||
|
not-found: "「{}」に関する投稿は見つかりませんでした。"
|
||||||
mobile/views/pages/selectdrive.vue:
|
mobile/views/pages/selectdrive.vue:
|
||||||
select-file: "Choisissez un fichier"
|
select-file: "Choisissez un fichier"
|
||||||
mobile/views/pages/settings.vue:
|
mobile/views/pages/settings.vue:
|
||||||
signed-in-as: "Connecté en tant que {}"
|
signed-in-as: "Connecté·e en tant que {}"
|
||||||
lang: "Langue"
|
lang: "Langue"
|
||||||
lang-tip: "Le rechargement de la page est requis afin d'appliquer les modifications."
|
lang-tip: "Le rechargement de la page est requis afin d'appliquer les modifications."
|
||||||
recommended: "Recommandé"
|
recommended: "Recommandé"
|
||||||
@ -1009,9 +1081,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"
|
||||||
@ -1089,3 +1161,5 @@ docs:
|
|||||||
name: "Nom"
|
name: "Nom"
|
||||||
type: "Type"
|
type: "Type"
|
||||||
description: "Description"
|
description: "Description"
|
||||||
|
dev/views/index.vue:
|
||||||
|
manage-apps: "Gestion des applications"
|
||||||
|
@ -6,6 +6,13 @@ 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:
|
||||||
|
detected: "広告ブロッカーを無効にしてください"
|
||||||
|
warning: "<strong>Misskeyは広告を掲載していません</strong>が、広告をブロックする機能が有効だと一部の機能が利用できなかったり、不具合が発生する場合があります。"
|
||||||
|
application-authorization: "アプリの連携"
|
||||||
|
close: "閉じる"
|
||||||
|
do-not-copy-paste: "ここにコードを入力したり張り付けたりしないでください。アカウントが不正利用される可能性があります。"
|
||||||
|
got-it: "わかった"
|
||||||
customization-tips:
|
customization-tips:
|
||||||
title: "カスタマイズのヒント"
|
title: "カスタマイズのヒント"
|
||||||
paragraph1: "ホームのカスタマイズでは、ウィジェットを追加/削除したり、ドラッグ&ドロップして並べ替えたりすることができます。"
|
paragraph1: "ホームのカスタマイズでは、ウィジェットを追加/削除したり、ドラッグ&ドロップして並べ替えたりすることができます。"
|
||||||
@ -13,7 +20,14 @@ common:
|
|||||||
paragraph3: "ウィジェットを削除するには、ヘッダーの<strong>「ゴミ箱」</strong>と書かれたエリアにウィジェットをドラッグ&ドロップします。"
|
paragraph3: "ウィジェットを削除するには、ヘッダーの<strong>「ゴミ箱」</strong>と書かれたエリアにウィジェットをドラッグ&ドロップします。"
|
||||||
paragraph4: "カスタマイズを終了するには、右上の「完了」をクリックします。"
|
paragraph4: "カスタマイズを終了するには、右上の「完了」をクリックします。"
|
||||||
gotit: "Got it!"
|
gotit: "Got it!"
|
||||||
name: "Misskey"
|
notification:
|
||||||
|
file-uploaded: "ファイルがアップロードされました"
|
||||||
|
message-from: "{}さんからメッセージ:"
|
||||||
|
reversi-invited: "対局への招待があります"
|
||||||
|
reversi-invited-by: "{}さんから"
|
||||||
|
notified-by: "{}さんから"
|
||||||
|
reply-from: "{}さんから返信:"
|
||||||
|
quoted-by: "{}さんが引用:"
|
||||||
time:
|
time:
|
||||||
unknown: "なぞのじかん"
|
unknown: "なぞのじかん"
|
||||||
future: "未来"
|
future: "未来"
|
||||||
@ -25,6 +39,7 @@ common:
|
|||||||
weeks_ago: "{}週間前"
|
weeks_ago: "{}週間前"
|
||||||
months_ago: "{}ヶ月前"
|
months_ago: "{}ヶ月前"
|
||||||
years_ago: "{}年前"
|
years_ago: "{}年前"
|
||||||
|
month-and-day: "{month}月 {day}日"
|
||||||
trash: "ゴミ箱"
|
trash: "ゴミ箱"
|
||||||
weekday-short:
|
weekday-short:
|
||||||
sunday: "日"
|
sunday: "日"
|
||||||
@ -69,6 +84,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: "あなたのターンです"
|
||||||
@ -121,7 +137,38 @@ common:
|
|||||||
rename: "名前を変更"
|
rename: "名前を変更"
|
||||||
stack-left: "左に重ねる"
|
stack-left: "左に重ねる"
|
||||||
pop-right: "右に出す"
|
pop-right: "右に出す"
|
||||||
|
auth/views/form.vue:
|
||||||
|
share-access: "<i>{{ app.name }}</i>があなたのアカウントにアクセスすることを<b>許可</b>しますか?"
|
||||||
|
permission-ask: "このアプリは次の権限を要求しています:"
|
||||||
|
account-read: "アカウントの情報を見る。"
|
||||||
|
account-write: "アカウントの情報を操作する。"
|
||||||
|
note-write: "投稿する。"
|
||||||
|
like-write: "いいねしたりいいね解除する。"
|
||||||
|
following-write: "フォローしたりフォロー解除する。"
|
||||||
|
drive-read: "ドライブを見る。"
|
||||||
|
drive-write: "ドライブを操作する。"
|
||||||
|
notification-read: "通知を見る。"
|
||||||
|
notification-write: "通知を操作する。"
|
||||||
|
cancel: "キャンセル"
|
||||||
|
accept: "アクセスを許可"
|
||||||
|
auth/views/index.vue:
|
||||||
|
loading: "読み込み中"
|
||||||
|
denied: "アプリケーションの連携をキャンセルしました。"
|
||||||
|
denied-paragraph: "このアプリがあなたのアカウントにアクセスすることはありません。"
|
||||||
|
already-authorized: "このアプリは既に連携済みです"
|
||||||
|
allowed: "アプリケーションの連携を許可しました"
|
||||||
|
callback-url: "アプリケーションに戻っています"
|
||||||
|
please-go-back: "アプリケーションに戻って、やっていってください。"
|
||||||
|
error: "セッションが存在しません。"
|
||||||
|
sign-in: "サインインしてください"
|
||||||
common/views/components/games/reversi/reversi.vue:
|
common/views/components/games/reversi/reversi.vue:
|
||||||
|
matching:
|
||||||
|
waiting-for: "{}を待っています"
|
||||||
|
cancel: "キャンセル"
|
||||||
|
common/views/components/games/reversi/reversi.game.vue:
|
||||||
|
surrender: "投了"
|
||||||
|
surrendered: "投了により"
|
||||||
|
common/views/components/games/reversi/reversi.index.vue:
|
||||||
title: "Misskey Reversi"
|
title: "Misskey Reversi"
|
||||||
sub-title: "他のMisskeyユーザーとリバーシで対戦しよう"
|
sub-title: "他のMisskeyユーザーとリバーシで対戦しよう"
|
||||||
invite: "招待"
|
invite: "招待"
|
||||||
@ -136,9 +183,6 @@ common/views/components/games/reversi/reversi.vue:
|
|||||||
game-state:
|
game-state:
|
||||||
ended: "終了"
|
ended: "終了"
|
||||||
playing: "進行中"
|
playing: "進行中"
|
||||||
matching:
|
|
||||||
waiting-for: "{}を待っています"
|
|
||||||
cacnel: "キャンセル"
|
|
||||||
common/views/components/games/reversi/reversi.room.vue:
|
common/views/components/games/reversi/reversi.room.vue:
|
||||||
settings-of-the-game: "ゲームの設定"
|
settings-of-the-game: "ゲームの設定"
|
||||||
choose-map: "マップを選択"
|
choose-map: "マップを選択"
|
||||||
@ -150,7 +194,7 @@ common/views/components/games/reversi/reversi.room.vue:
|
|||||||
looped-map: "ループマップ"
|
looped-map: "ループマップ"
|
||||||
can-put-everywhere: "どこでも置けるモード"
|
can-put-everywhere: "どこでも置けるモード"
|
||||||
settings-of-the-bot: "Botの設定"
|
settings-of-the-bot: "Botの設定"
|
||||||
this-gane-is-started-soon: "ゲームは数秒後に開始されます"
|
this-game-is-started-soon: "ゲームは数秒後に開始されます"
|
||||||
waiting-for-other: "相手の準備が完了するのを待っています"
|
waiting-for-other: "相手の準備が完了するのを待っています"
|
||||||
waiting-for-me: "あなたの準備が完了するのを待っています"
|
waiting-for-me: "あなたの準備が完了するのを待っています"
|
||||||
waiting-for-both: "準備中"
|
waiting-for-both: "準備中"
|
||||||
@ -191,11 +235,13 @@ 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: "既読"
|
||||||
deleted: "このメッセージは削除されました"
|
deleted: "このメッセージは削除されました"
|
||||||
@ -235,6 +281,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: "確認しています..."
|
||||||
@ -344,6 +392,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"
|
||||||
@ -478,6 +537,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: "読み込みに失敗しました。"
|
||||||
retry: "リトライ"
|
retry: "リトライ"
|
||||||
@ -513,6 +574,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: "新規投稿"
|
||||||
reply: "返信"
|
reply: "返信"
|
||||||
@ -674,6 +736,7 @@ desktop/views/components/timeline.vue:
|
|||||||
list: "リスト"
|
list: "リスト"
|
||||||
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: "プロフィール"
|
||||||
drive: "ドライブ"
|
drive: "ドライブ"
|
||||||
@ -702,6 +765,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: "フォロー"
|
||||||
@ -751,8 +815,7 @@ desktop/views/pages/search.vue:
|
|||||||
not-available: "検索機能を利用することができません。"
|
not-available: "検索機能を利用することができません。"
|
||||||
not-found: "「{}」に関する投稿は見つかりませんでした。"
|
not-found: "「{}」に関する投稿は見つかりませんでした。"
|
||||||
desktop/views/pages/share.vue:
|
desktop/views/pages/share.vue:
|
||||||
share-with: "Misskeyで共有"
|
share-with: "{}で共有"
|
||||||
close: "閉じる"
|
|
||||||
desktop/views/pages/tag.vue:
|
desktop/views/pages/tag.vue:
|
||||||
no-posts-found: "ハッシュタグ「{}」が付けられた投稿は見つかりませんでした。"
|
no-posts-found: "ハッシュタグ「{}」が付けられた投稿は見つかりませんでした。"
|
||||||
desktop/views/pages/user-list.users.vue:
|
desktop/views/pages/user-list.users.vue:
|
||||||
@ -785,6 +848,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: "フォロー"
|
||||||
@ -912,6 +977,7 @@ mobile/views/components/timeline.vue:
|
|||||||
load-more: "もっと"
|
load-more: "もっと"
|
||||||
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: "タイムライン"
|
||||||
notifications: "通知"
|
notifications: "通知"
|
||||||
@ -959,8 +1025,13 @@ mobile/views/pages/welcome.vue:
|
|||||||
signup: "新規登録"
|
signup: "新規登録"
|
||||||
mobile/views/pages/widgets.vue:
|
mobile/views/pages/widgets.vue:
|
||||||
dashboard: "ダッシュボード"
|
dashboard: "ダッシュボード"
|
||||||
|
widgets-hints: "ウィジェットを追加/削除したり並べ替えたりできます。ウィジェットを移動するには「三」をドラッグします。ウィジェットを削除するには「x」をタップします。いくつかのウィジェットはタップすることで表示を変更できます。"
|
||||||
|
add-widget: "追加"
|
||||||
|
customization-tips: "カスタマイズのヒント"
|
||||||
mobile/views/pages/widgets/activity.vue:
|
mobile/views/pages/widgets/activity.vue:
|
||||||
activity: "アクティビティ"
|
activity: "アクティビティ"
|
||||||
|
mobile/views/pages/share.vue:
|
||||||
|
share-with: "{}で共有"
|
||||||
mobile/views/pages/messaging.vue:
|
mobile/views/pages/messaging.vue:
|
||||||
messaging: "メッセージ"
|
messaging: "メッセージ"
|
||||||
mobile/views/pages/messaging-room.vue:
|
mobile/views/pages/messaging-room.vue:
|
||||||
@ -976,7 +1047,7 @@ mobile/views/pages/note.vue:
|
|||||||
mobile/views/pages/notifications.vue:
|
mobile/views/pages/notifications.vue:
|
||||||
notifications: "通知"
|
notifications: "通知"
|
||||||
read-all: "すべての通知を既読にしますか?"
|
read-all: "すべての通知を既読にしますか?"
|
||||||
mobile/views/pages/reversi.vue:
|
mobile/views/pages/games/reversi.vue:
|
||||||
reversi: "リバーシ"
|
reversi: "リバーシ"
|
||||||
mobile/views/pages/settings/settings.profile.vue:
|
mobile/views/pages/settings/settings.profile.vue:
|
||||||
title: "プロフィール"
|
title: "プロフィール"
|
||||||
@ -995,6 +1066,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: "ファイルを選択"
|
||||||
mobile/views/pages/settings.vue:
|
mobile/views/pages/settings.vue:
|
||||||
@ -1089,3 +1161,5 @@ docs:
|
|||||||
name: "名前"
|
name: "名前"
|
||||||
type: "型"
|
type: "型"
|
||||||
description: "説明"
|
description: "説明"
|
||||||
|
dev/views/index.vue:
|
||||||
|
manage-apps: "アプリの管理"
|
||||||
|
100
locales/ja.yml
100
locales/ja.yml
@ -6,6 +6,13 @@ 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:
|
||||||
|
detected: "広告ブロッカーを無効にしてください"
|
||||||
|
warning: "<strong>Misskeyは広告を掲載していません</strong>が、広告をブロックする機能が有効だと一部の機能が利用できなかったり、不具合が発生する場合があります。"
|
||||||
|
application-authorization: "アプリの連携"
|
||||||
|
close: "閉じる"
|
||||||
|
do-not-copy-paste: "ここにコードを入力したり張り付けたりしないでください。アカウントが不正利用される可能性があります。"
|
||||||
|
got-it: "わかった"
|
||||||
customization-tips:
|
customization-tips:
|
||||||
title: "カスタマイズのヒント"
|
title: "カスタマイズのヒント"
|
||||||
paragraph1: "ホームのカスタマイズでは、ウィジェットを追加/削除したり、ドラッグ&ドロップして並べ替えたりすることができます。"
|
paragraph1: "ホームのカスタマイズでは、ウィジェットを追加/削除したり、ドラッグ&ドロップして並べ替えたりすることができます。"
|
||||||
@ -13,7 +20,14 @@ common:
|
|||||||
paragraph3: "ウィジェットを削除するには、ヘッダーの<strong>「ゴミ箱」</strong>と書かれたエリアにウィジェットをドラッグ&ドロップします。"
|
paragraph3: "ウィジェットを削除するには、ヘッダーの<strong>「ゴミ箱」</strong>と書かれたエリアにウィジェットをドラッグ&ドロップします。"
|
||||||
paragraph4: "カスタマイズを終了するには、右上の「完了」をクリックします。"
|
paragraph4: "カスタマイズを終了するには、右上の「完了」をクリックします。"
|
||||||
gotit: "Got it!"
|
gotit: "Got it!"
|
||||||
name: "Misskey"
|
notification:
|
||||||
|
file-uploaded: "ファイルがアップロードされました"
|
||||||
|
message-from: "{}さんからメッセージ:"
|
||||||
|
reversi-invited: "対局への招待があります"
|
||||||
|
reversi-invited-by: "{}さんから"
|
||||||
|
notified-by: "{}さんから"
|
||||||
|
reply-from: "{}さんから返信:"
|
||||||
|
quoted-by: "{}さんが引用:"
|
||||||
time:
|
time:
|
||||||
unknown: "なぞのじかん"
|
unknown: "なぞのじかん"
|
||||||
future: "未来"
|
future: "未来"
|
||||||
@ -25,6 +39,7 @@ common:
|
|||||||
weeks_ago: "{}週間前"
|
weeks_ago: "{}週間前"
|
||||||
months_ago: "{}ヶ月前"
|
months_ago: "{}ヶ月前"
|
||||||
years_ago: "{}年前"
|
years_ago: "{}年前"
|
||||||
|
month-and-day: "{month}月 {day}日"
|
||||||
|
|
||||||
trash: "ゴミ箱"
|
trash: "ゴミ箱"
|
||||||
|
|
||||||
@ -75,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: "引き分け"
|
||||||
@ -131,7 +147,42 @@ common:
|
|||||||
stack-left: "左に重ねる"
|
stack-left: "左に重ねる"
|
||||||
pop-right: "右に出す"
|
pop-right: "右に出す"
|
||||||
|
|
||||||
|
auth/views/form.vue:
|
||||||
|
share-access: "<i>{{ app.name }}</i>があなたのアカウントにアクセスすることを<b>許可</b>しますか?"
|
||||||
|
permission-ask: "このアプリは次の権限を要求しています:"
|
||||||
|
account-read: "アカウントの情報を見る。"
|
||||||
|
account-write: "アカウントの情報を操作する。"
|
||||||
|
note-write: "投稿する。"
|
||||||
|
like-write: "いいねしたりいいね解除する。"
|
||||||
|
following-write: "フォローしたりフォロー解除する。"
|
||||||
|
drive-read: "ドライブを見る。"
|
||||||
|
drive-write: "ドライブを操作する。"
|
||||||
|
notification-read: "通知を見る。"
|
||||||
|
notification-write: "通知を操作する。"
|
||||||
|
cancel: "キャンセル"
|
||||||
|
accept: "アクセスを許可"
|
||||||
|
|
||||||
|
auth/views/index.vue:
|
||||||
|
loading: "読み込み中"
|
||||||
|
denied: "アプリケーションの連携をキャンセルしました。"
|
||||||
|
denied-paragraph: "このアプリがあなたのアカウントにアクセスすることはありません。"
|
||||||
|
already-authorized: "このアプリは既に連携済みです"
|
||||||
|
allowed: "アプリケーションの連携を許可しました"
|
||||||
|
callback-url: "アプリケーションに戻っています"
|
||||||
|
please-go-back: "アプリケーションに戻って、やっていってください。"
|
||||||
|
error: "セッションが存在しません。"
|
||||||
|
sign-in: "サインインしてください"
|
||||||
|
|
||||||
common/views/components/games/reversi/reversi.vue:
|
common/views/components/games/reversi/reversi.vue:
|
||||||
|
matching:
|
||||||
|
waiting-for: "{}を待っています"
|
||||||
|
cancel: "キャンセル"
|
||||||
|
|
||||||
|
common/views/components/games/reversi/reversi.game.vue:
|
||||||
|
surrender: "投了"
|
||||||
|
surrendered: "投了により"
|
||||||
|
|
||||||
|
common/views/components/games/reversi/reversi.index.vue:
|
||||||
title: "Misskey Reversi"
|
title: "Misskey Reversi"
|
||||||
sub-title: "他のMisskeyユーザーとリバーシで対戦しよう"
|
sub-title: "他のMisskeyユーザーとリバーシで対戦しよう"
|
||||||
invite: "招待"
|
invite: "招待"
|
||||||
@ -146,9 +197,6 @@ common/views/components/games/reversi/reversi.vue:
|
|||||||
game-state:
|
game-state:
|
||||||
ended: "終了"
|
ended: "終了"
|
||||||
playing: "進行中"
|
playing: "進行中"
|
||||||
matching:
|
|
||||||
waiting-for: "{}を待っています"
|
|
||||||
cacnel: "キャンセル"
|
|
||||||
|
|
||||||
common/views/components/games/reversi/reversi.room.vue:
|
common/views/components/games/reversi/reversi.room.vue:
|
||||||
settings-of-the-game: "ゲームの設定"
|
settings-of-the-game: "ゲームの設定"
|
||||||
@ -161,7 +209,7 @@ common/views/components/games/reversi/reversi.room.vue:
|
|||||||
looped-map: "ループマップ"
|
looped-map: "ループマップ"
|
||||||
can-put-everywhere: "どこでも置けるモード"
|
can-put-everywhere: "どこでも置けるモード"
|
||||||
settings-of-the-bot: "Botの設定"
|
settings-of-the-bot: "Botの設定"
|
||||||
this-gane-is-started-soon: "ゲームは数秒後に開始されます"
|
this-game-is-started-soon: "ゲームは数秒後に開始されます"
|
||||||
waiting-for-other: "相手の準備が完了するのを待っています"
|
waiting-for-other: "相手の準備が完了するのを待っています"
|
||||||
waiting-for-me: "あなたの準備が完了するのを待っています"
|
waiting-for-me: "あなたの準備が完了するのを待っています"
|
||||||
waiting-for-both: "準備中"
|
waiting-for-both: "準備中"
|
||||||
@ -206,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: "既読"
|
||||||
@ -258,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: "ユーザー名"
|
||||||
@ -385,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"
|
||||||
@ -544,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: "読み込みに失敗しました。"
|
||||||
@ -582,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: "新規投稿"
|
||||||
@ -770,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: "プロフィール"
|
||||||
@ -802,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: "投稿"
|
||||||
@ -870,8 +937,7 @@ desktop/views/pages/search.vue:
|
|||||||
not-found: "「{}」に関する投稿は見つかりませんでした。"
|
not-found: "「{}」に関する投稿は見つかりませんでした。"
|
||||||
|
|
||||||
desktop/views/pages/share.vue:
|
desktop/views/pages/share.vue:
|
||||||
share-with: "Misskeyで共有"
|
share-with: "{}で共有"
|
||||||
close: "閉じる"
|
|
||||||
|
|
||||||
desktop/views/pages/tag.vue:
|
desktop/views/pages/tag.vue:
|
||||||
no-posts-found: "ハッシュタグ「{}」が付けられた投稿は見つかりませんでした。"
|
no-posts-found: "ハッシュタグ「{}」が付けられた投稿は見つかりませんでした。"
|
||||||
@ -912,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: "投稿"
|
||||||
@ -1067,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: "タイムライン"
|
||||||
@ -1127,10 +1196,16 @@ mobile/views/pages/welcome.vue:
|
|||||||
|
|
||||||
mobile/views/pages/widgets.vue:
|
mobile/views/pages/widgets.vue:
|
||||||
dashboard: "ダッシュボード"
|
dashboard: "ダッシュボード"
|
||||||
|
widgets-hints: "ウィジェットを追加/削除したり並べ替えたりできます。ウィジェットを移動するには「三」をドラッグします。ウィジェットを削除するには「x」をタップします。いくつかのウィジェットはタップすることで表示を変更できます。"
|
||||||
|
add-widget: "追加"
|
||||||
|
customization-tips: "カスタマイズのヒント"
|
||||||
|
|
||||||
mobile/views/pages/widgets/activity.vue:
|
mobile/views/pages/widgets/activity.vue:
|
||||||
activity: "アクティビティ"
|
activity: "アクティビティ"
|
||||||
|
|
||||||
|
mobile/views/pages/share.vue:
|
||||||
|
share-with: "{}で共有"
|
||||||
|
|
||||||
mobile/views/pages/messaging.vue:
|
mobile/views/pages/messaging.vue:
|
||||||
messaging: "メッセージ"
|
messaging: "メッセージ"
|
||||||
|
|
||||||
@ -1151,7 +1226,7 @@ mobile/views/pages/notifications.vue:
|
|||||||
notifications: "通知"
|
notifications: "通知"
|
||||||
read-all: "すべての通知を既読にしますか?"
|
read-all: "すべての通知を既読にしますか?"
|
||||||
|
|
||||||
mobile/views/pages/reversi.vue:
|
mobile/views/pages/games/reversi.vue:
|
||||||
reversi: "リバーシ"
|
reversi: "リバーシ"
|
||||||
|
|
||||||
mobile/views/pages/settings/settings.profile.vue:
|
mobile/views/pages/settings/settings.profile.vue:
|
||||||
@ -1172,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: "ファイルを選択"
|
||||||
@ -1276,3 +1352,7 @@ docs:
|
|||||||
name: "名前"
|
name: "名前"
|
||||||
type: "型"
|
type: "型"
|
||||||
description: "説明"
|
description: "説明"
|
||||||
|
|
||||||
|
|
||||||
|
dev/views/index.vue:
|
||||||
|
manage-apps: "アプリの管理"
|
||||||
|
268
locales/ko.yml
268
locales/ko.yml
@ -1,109 +1,125 @@
|
|||||||
---
|
---
|
||||||
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:
|
||||||
|
detected: "광고 차단기를 해제하십시오"
|
||||||
|
warning: "<strong>Misskey는 광고를 게재하지 않습니다</strong> 그러나 광고를 차단하는 기능 기능을 사용할 경우 일부 기능을 사용할 수 없게 될 가능성이나 결함이 발생하는 경우가 있습니다."
|
||||||
|
application-authorization: "앱의 연계"
|
||||||
|
close: "닫기"
|
||||||
|
do-not-copy-paste: "ここにコードを入力したり張り付けたりしないでください。アカウントが不正利用される可能性があります。"
|
||||||
|
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!"
|
||||||
name: "Misskey"
|
notification:
|
||||||
|
file-uploaded: "파일이 업로드되었습니다"
|
||||||
|
message-from: "{}씨로부터 메시지:"
|
||||||
|
reversi-invited: "대결에 초대되어 있습니다"
|
||||||
|
reversi-invited-by: "{}님"
|
||||||
|
notified-by: "{}님"
|
||||||
|
reply-from: "{}님으로부터 답글:"
|
||||||
|
quoted-by: "{}씨가 인용:"
|
||||||
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: "ゴミ箱"
|
month-and-day: "{month}月 {day}日"
|
||||||
|
trash: "휴지통"
|
||||||
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: "ホーム"
|
||||||
@ -121,7 +137,38 @@ common:
|
|||||||
rename: "名前を変更"
|
rename: "名前を変更"
|
||||||
stack-left: "左に重ねる"
|
stack-left: "左に重ねる"
|
||||||
pop-right: "右に出す"
|
pop-right: "右に出す"
|
||||||
|
auth/views/form.vue:
|
||||||
|
share-access: "<i>{{ app.name }}</i>があなたのアカウントにアクセスすることを<b>許可</b>しますか?"
|
||||||
|
permission-ask: "このアプリは次の権限を要求しています:"
|
||||||
|
account-read: "アカウントの情報を見る。"
|
||||||
|
account-write: "アカウントの情報を操作する。"
|
||||||
|
note-write: "投稿する。"
|
||||||
|
like-write: "いいねしたりいいね解除する。"
|
||||||
|
following-write: "フォローしたりフォロー解除する。"
|
||||||
|
drive-read: "ドライブを見る。"
|
||||||
|
drive-write: "ドライブを操作する。"
|
||||||
|
notification-read: "通知を見る。"
|
||||||
|
notification-write: "通知を操作する。"
|
||||||
|
cancel: "キャンセル"
|
||||||
|
accept: "アクセスを許可"
|
||||||
|
auth/views/index.vue:
|
||||||
|
loading: "読み込み中"
|
||||||
|
denied: "アプリケーションの連携をキャンセルしました。"
|
||||||
|
denied-paragraph: "このアプリがあなたのアカウントにアクセスすることはありません。"
|
||||||
|
already-authorized: "このアプリは既に連携済みです"
|
||||||
|
allowed: "アプリケーションの連携を許可しました"
|
||||||
|
callback-url: "アプリケーションに戻っています"
|
||||||
|
please-go-back: "アプリケーションに戻って、やっていってください。"
|
||||||
|
error: "セッションが存在しません。"
|
||||||
|
sign-in: "サインインしてください"
|
||||||
common/views/components/games/reversi/reversi.vue:
|
common/views/components/games/reversi/reversi.vue:
|
||||||
|
matching:
|
||||||
|
waiting-for: "{}を待っています"
|
||||||
|
cancel: "キャンセル"
|
||||||
|
common/views/components/games/reversi/reversi.game.vue:
|
||||||
|
surrender: "投了"
|
||||||
|
surrendered: "投了により"
|
||||||
|
common/views/components/games/reversi/reversi.index.vue:
|
||||||
title: "Misskey Reversi"
|
title: "Misskey Reversi"
|
||||||
sub-title: "他のMisskeyユーザーとリバーシで対戦しよう"
|
sub-title: "他のMisskeyユーザーとリバーシで対戦しよう"
|
||||||
invite: "招待"
|
invite: "招待"
|
||||||
@ -136,9 +183,6 @@ common/views/components/games/reversi/reversi.vue:
|
|||||||
game-state:
|
game-state:
|
||||||
ended: "終了"
|
ended: "終了"
|
||||||
playing: "進行中"
|
playing: "進行中"
|
||||||
matching:
|
|
||||||
waiting-for: "{}を待っています"
|
|
||||||
cacnel: "キャンセル"
|
|
||||||
common/views/components/games/reversi/reversi.room.vue:
|
common/views/components/games/reversi/reversi.room.vue:
|
||||||
settings-of-the-game: "ゲームの設定"
|
settings-of-the-game: "ゲームの設定"
|
||||||
choose-map: "マップを選択"
|
choose-map: "マップを選択"
|
||||||
@ -150,7 +194,7 @@ common/views/components/games/reversi/reversi.room.vue:
|
|||||||
looped-map: "ループマップ"
|
looped-map: "ループマップ"
|
||||||
can-put-everywhere: "どこでも置けるモード"
|
can-put-everywhere: "どこでも置けるモード"
|
||||||
settings-of-the-bot: "Botの設定"
|
settings-of-the-bot: "Botの設定"
|
||||||
this-gane-is-started-soon: "ゲームは数秒後に開始されます"
|
this-game-is-started-soon: "ゲームは数秒後に開始されます"
|
||||||
waiting-for-other: "相手の準備が完了するのを待っています"
|
waiting-for-other: "相手の準備が完了するのを待っています"
|
||||||
waiting-for-me: "あなたの準備が完了するのを待っています"
|
waiting-for-me: "あなたの準備が完了するのを待っています"
|
||||||
waiting-for-both: "準備中"
|
waiting-for-both: "準備中"
|
||||||
@ -191,11 +235,13 @@ 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: "既読"
|
||||||
deleted: "このメッセージは削除されました"
|
deleted: "このメッセージは削除されました"
|
||||||
@ -235,6 +281,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: "確認しています..."
|
||||||
@ -344,6 +392,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"
|
||||||
@ -478,6 +537,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: "読み込みに失敗しました。"
|
||||||
retry: "リトライ"
|
retry: "リトライ"
|
||||||
@ -513,6 +574,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: "新規投稿"
|
||||||
reply: "返信"
|
reply: "返信"
|
||||||
@ -674,6 +736,7 @@ desktop/views/components/timeline.vue:
|
|||||||
list: "リスト"
|
list: "リスト"
|
||||||
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: "プロフィール"
|
||||||
drive: "ドライブ"
|
drive: "ドライブ"
|
||||||
@ -702,6 +765,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: "フォロー"
|
||||||
@ -751,8 +815,7 @@ desktop/views/pages/search.vue:
|
|||||||
not-available: "検索機能を利用することができません。"
|
not-available: "検索機能を利用することができません。"
|
||||||
not-found: "「{}」に関する投稿は見つかりませんでした。"
|
not-found: "「{}」に関する投稿は見つかりませんでした。"
|
||||||
desktop/views/pages/share.vue:
|
desktop/views/pages/share.vue:
|
||||||
share-with: "Misskeyで共有"
|
share-with: "{}で共有"
|
||||||
close: "閉じる"
|
|
||||||
desktop/views/pages/tag.vue:
|
desktop/views/pages/tag.vue:
|
||||||
no-posts-found: "ハッシュタグ「{}」が付けられた投稿は見つかりませんでした。"
|
no-posts-found: "ハッシュタグ「{}」が付けられた投稿は見つかりませんでした。"
|
||||||
desktop/views/pages/user-list.users.vue:
|
desktop/views/pages/user-list.users.vue:
|
||||||
@ -785,6 +848,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: "フォロー"
|
||||||
@ -912,6 +977,7 @@ mobile/views/components/timeline.vue:
|
|||||||
load-more: "もっと"
|
load-more: "もっと"
|
||||||
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: "タイムライン"
|
||||||
notifications: "通知"
|
notifications: "通知"
|
||||||
@ -959,8 +1025,13 @@ mobile/views/pages/welcome.vue:
|
|||||||
signup: "新規登録"
|
signup: "新規登録"
|
||||||
mobile/views/pages/widgets.vue:
|
mobile/views/pages/widgets.vue:
|
||||||
dashboard: "ダッシュボード"
|
dashboard: "ダッシュボード"
|
||||||
|
widgets-hints: "ウィジェットを追加/削除したり並べ替えたりできます。ウィジェットを移動するには「三」をドラッグします。ウィジェットを削除するには「x」をタップします。いくつかのウィジェットはタップすることで表示を変更できます。"
|
||||||
|
add-widget: "追加"
|
||||||
|
customization-tips: "カスタマイズのヒント"
|
||||||
mobile/views/pages/widgets/activity.vue:
|
mobile/views/pages/widgets/activity.vue:
|
||||||
activity: "アクティビティ"
|
activity: "アクティビティ"
|
||||||
|
mobile/views/pages/share.vue:
|
||||||
|
share-with: "{}で共有"
|
||||||
mobile/views/pages/messaging.vue:
|
mobile/views/pages/messaging.vue:
|
||||||
messaging: "メッセージ"
|
messaging: "メッセージ"
|
||||||
mobile/views/pages/messaging-room.vue:
|
mobile/views/pages/messaging-room.vue:
|
||||||
@ -976,7 +1047,7 @@ mobile/views/pages/note.vue:
|
|||||||
mobile/views/pages/notifications.vue:
|
mobile/views/pages/notifications.vue:
|
||||||
notifications: "通知"
|
notifications: "通知"
|
||||||
read-all: "すべての通知を既読にしますか?"
|
read-all: "すべての通知を既読にしますか?"
|
||||||
mobile/views/pages/reversi.vue:
|
mobile/views/pages/games/reversi.vue:
|
||||||
reversi: "リバーシ"
|
reversi: "リバーシ"
|
||||||
mobile/views/pages/settings/settings.profile.vue:
|
mobile/views/pages/settings/settings.profile.vue:
|
||||||
title: "プロフィール"
|
title: "プロフィール"
|
||||||
@ -995,6 +1066,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: "ファイルを選択"
|
||||||
mobile/views/pages/settings.vue:
|
mobile/views/pages/settings.vue:
|
||||||
@ -1089,3 +1161,5 @@ docs:
|
|||||||
name: "名前"
|
name: "名前"
|
||||||
type: "型"
|
type: "型"
|
||||||
description: "説明"
|
description: "説明"
|
||||||
|
dev/views/index.vue:
|
||||||
|
manage-apps: "アプリの管理"
|
||||||
|
258
locales/pl.yml
258
locales/pl.yml
@ -6,14 +6,28 @@ common:
|
|||||||
misskey: "⭐ Fediwersum"
|
misskey: "⭐ Fediwersum"
|
||||||
about-title: "⭐ Fediwersum"
|
about-title: "⭐ Fediwersum"
|
||||||
about: "Dziękujemy za znalezienie Misskey. Misskey jest <b>zdecentralizowaną platformą mikroblogową</b> powstałą na Ziemi. Ponieważ działa ona w Fediwersum (uniwersum, w którego skład wchodzi wiele sieci społecznościowych), jest ona połączona z innymi platformami społecznościowymi. Spróbujesz odpocząć od zatłoczoneo miasta i zanurzyć się w nowym Internecie?"
|
about: "Dziękujemy za znalezienie Misskey. Misskey jest <b>zdecentralizowaną platformą mikroblogową</b> powstałą na Ziemi. Ponieważ działa ona w Fediwersum (uniwersum, w którego skład wchodzi wiele sieci społecznościowych), jest ona połączona z innymi platformami społecznościowymi. Spróbujesz odpocząć od zatłoczoneo miasta i zanurzyć się w nowym Internecie?"
|
||||||
|
adblock:
|
||||||
|
detected: "Spróbuj wyłączyć blokadę 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: "アプリの連携"
|
||||||
|
close: "Zamknij"
|
||||||
|
do-not-copy-paste: "ここにコードを入力したり張り付けたりしないでください。アカウントが不正利用される可能性があります。"
|
||||||
|
got-it: "Rozumiem!"
|
||||||
customization-tips:
|
customization-tips:
|
||||||
title: "カスタマイズのヒント"
|
title: "Wskazówki o dostosowywaniu"
|
||||||
paragraph1: "ホームのカスタマイズでは、ウィジェットを追加/削除したり、ドラッグ&ドロップして並べ替えたりすることができます。"
|
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: "Got it!"
|
gotit: "Rozumiem!"
|
||||||
name: "Misskey"
|
notification:
|
||||||
|
file-uploaded: "Wysłano plik!"
|
||||||
|
message-from: "Wiadomość od {}:"
|
||||||
|
reversi-invited: "Zaproszono do gry"
|
||||||
|
reversi-invited-by: "Zaproszono przez {}:"
|
||||||
|
notified-by: "Powiadomiono przez {}:"
|
||||||
|
reply-from: "Odpowiedź od {}:"
|
||||||
|
quoted-by: "Zacytowano przez {}:"
|
||||||
time:
|
time:
|
||||||
unknown: "nieznany"
|
unknown: "nieznany"
|
||||||
future: "w przyszłości"
|
future: "w przyszłości"
|
||||||
@ -25,7 +39,8 @@ common:
|
|||||||
weeks_ago: "{} tyg. temu"
|
weeks_ago: "{} tyg. temu"
|
||||||
months_ago: "{} mies. temu"
|
months_ago: "{} mies. temu"
|
||||||
years_ago: "{} lat temu"
|
years_ago: "{} lat temu"
|
||||||
trash: "ゴミ箱"
|
month-and-day: "{month}月 {day}日"
|
||||||
|
trash: "Kosz"
|
||||||
weekday-short:
|
weekday-short:
|
||||||
sunday: "N"
|
sunday: "N"
|
||||||
monday: "Pn"
|
monday: "Pn"
|
||||||
@ -35,13 +50,13 @@ common:
|
|||||||
friday: "P"
|
friday: "P"
|
||||||
saturday: "S"
|
saturday: "S"
|
||||||
weekday:
|
weekday:
|
||||||
sunday: "日曜日"
|
sunday: "Niedziela"
|
||||||
monday: "月曜日"
|
monday: "Poniedziałek"
|
||||||
tuesday: "火曜日"
|
tuesday: "Wtorek"
|
||||||
wednesday: "水曜日"
|
wednesday: "Środa"
|
||||||
thursday: "木曜日"
|
thursday: "Czwartek"
|
||||||
friday: "金曜日"
|
friday: "Piątek"
|
||||||
saturday: "土曜日"
|
saturday: "Sobota"
|
||||||
reactions:
|
reactions:
|
||||||
like: "Lubię"
|
like: "Lubię"
|
||||||
love: "Kocham"
|
love: "Kocham"
|
||||||
@ -69,6 +84,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"
|
||||||
@ -76,10 +92,10 @@ common:
|
|||||||
turn-of: "Kolej na {}"
|
turn-of: "Kolej na {}"
|
||||||
past-turn-of: "Kolej {}"
|
past-turn-of: "Kolej {}"
|
||||||
won: "{}の勝ち"
|
won: "{}の勝ち"
|
||||||
black: "黒"
|
black: "Czarny"
|
||||||
white: "白"
|
white: "Biały"
|
||||||
total: "合計"
|
total: "Łącznie"
|
||||||
this-turn: "{}ターン目"
|
this-turn: "Ruch {}"
|
||||||
widgets:
|
widgets:
|
||||||
analog-clock: "Zegar analogowy"
|
analog-clock: "Zegar analogowy"
|
||||||
profile: "Profil"
|
profile: "Profil"
|
||||||
@ -121,42 +137,70 @@ common:
|
|||||||
rename: "Zmień nazwę"
|
rename: "Zmień nazwę"
|
||||||
stack-left: "Przypnij do lewej"
|
stack-left: "Przypnij do lewej"
|
||||||
pop-right: "Odepnij w prawo"
|
pop-right: "Odepnij w prawo"
|
||||||
|
auth/views/form.vue:
|
||||||
|
share-access: "Czy chcesz <b>zezwolić</b> <i>{{ app.name }}</i> na dostęp do Twojego konta?"
|
||||||
|
permission-ask: "Ta aplikacja wymaga następujących uprawnień:"
|
||||||
|
account-read: "Wyświetlanie informacji o koncie:"
|
||||||
|
account-write: "Modyfikowanie informacji o koncie:"
|
||||||
|
note-write: "Publikacja."
|
||||||
|
like-write: "Reagowanie na wpisy."
|
||||||
|
following-write: "Śledzenie i cofanie śledzenia."
|
||||||
|
drive-read: "Odczytywanie Twojego dysku."
|
||||||
|
drive-write: "Wysyłanie i usuwanie plików na Twoim dysku."
|
||||||
|
notification-read: "Odczytywanie Twoich powiadomień."
|
||||||
|
notification-write: "Zarządzanie Twoimi powiadomieniami."
|
||||||
|
cancel: "Anuluj"
|
||||||
|
accept: "Przyznaj dostęp."
|
||||||
|
auth/views/index.vue:
|
||||||
|
loading: "Ładowanie"
|
||||||
|
denied: "Odrzucono uwierzytelnianie aplikacji."
|
||||||
|
denied-paragraph: "Ta aplikacja nie uzyska dostępu do Twojego konta."
|
||||||
|
already-authorized: "Ta aplikacja została już uwierzytelniona."
|
||||||
|
allowed: "アプリケーションの連携を許可しました"
|
||||||
|
callback-url: "Powracam do aplikacji."
|
||||||
|
please-go-back: "Wróć do aplikacji."
|
||||||
|
error: "Sesja nie istnieje."
|
||||||
|
sign-in: "Proszę zalogować się."
|
||||||
common/views/components/games/reversi/reversi.vue:
|
common/views/components/games/reversi/reversi.vue:
|
||||||
title: "Misskey Reversi"
|
|
||||||
sub-title: "他のMisskeyユーザーとリバーシで対戦しよう"
|
|
||||||
invite: "招待"
|
|
||||||
rule: "遊び方"
|
|
||||||
rule-desc: "リバーシは、相手と交互に石をボードに置いて、相手の石を挟んで自分の色に変えてゆき、最終的に残った石が多い方が勝ちというボードゲームです。"
|
|
||||||
mode-invite: "招待"
|
|
||||||
mode-invite-desc: "指定したユーザーと対戦するモードです。"
|
|
||||||
invitations: "対局の招待があります!"
|
|
||||||
my-games: "自分の対局"
|
|
||||||
all-games: "みんなの対局"
|
|
||||||
enter-username: "ユーザー名を入力してください"
|
|
||||||
game-state:
|
|
||||||
ended: "終了"
|
|
||||||
playing: "進行中"
|
|
||||||
matching:
|
matching:
|
||||||
waiting-for: "{}を待っています"
|
waiting-for: "Oczekiwanie na {}"
|
||||||
cacnel: "キャンセル"
|
cancel: "Anuluj"
|
||||||
|
common/views/components/games/reversi/reversi.game.vue:
|
||||||
|
surrender: "投了"
|
||||||
|
surrendered: "投了により"
|
||||||
|
common/views/components/games/reversi/reversi.index.vue:
|
||||||
|
title: "Misskey Reversi"
|
||||||
|
sub-title: "Zagraj w Reversi ze znajomymi!"
|
||||||
|
invite: "Zaproś"
|
||||||
|
rule: "Jak grać"
|
||||||
|
rule-desc: "リバーシは、相手と交互に石をボードに置いて、相手の石を挟んで自分の色に変えてゆき、最終的に残った石が多い方が勝ちというボードゲームです。"
|
||||||
|
mode-invite: "Zaproś"
|
||||||
|
mode-invite-desc: "Zaproś użytkownika do gry."
|
||||||
|
invitations: "Otrzymałeś(-aś) zaproszenie!"
|
||||||
|
my-games: "Moje gry"
|
||||||
|
all-games: "Wszystkie gry"
|
||||||
|
enter-username: "Wprowadź nazwę użytkownika"
|
||||||
|
game-state:
|
||||||
|
ended: "Zakończono"
|
||||||
|
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: "どこでも置けるモード"
|
||||||
settings-of-the-bot: "Botの設定"
|
settings-of-the-bot: "Ustawienia bota"
|
||||||
this-gane-is-started-soon: "ゲームは数秒後に開始されます"
|
this-game-is-started-soon: "Gra rozpocznie się wkrótce"
|
||||||
waiting-for-other: "相手の準備が完了するのを待っています"
|
waiting-for-other: "相手の準備が完了するのを待っています"
|
||||||
waiting-for-me: "あなたの準備が完了するのを待っています"
|
waiting-for-me: "あなたの準備が完了するのを待っています"
|
||||||
waiting-for-both: "準備中"
|
waiting-for-both: "Oczekiwanie na Ciebie"
|
||||||
cancel: "キャンセル"
|
cancel: "Anuluj"
|
||||||
ready: "準備完了"
|
ready: "Gotowy"
|
||||||
cancel-ready: "準備続行"
|
cancel-ready: "Cofnij „gotowy”"
|
||||||
common/views/components/connect-failed.vue:
|
common/views/components/connect-failed.vue:
|
||||||
title: "Nie udało się połączyć z serwerem"
|
title: "Nie udało się połączyć z serwerem"
|
||||||
description: "Wystąpił problem z Twoim połączeniem z Internetem, lub z serwerem. {Spróbuj ponownie} wkrótce."
|
description: "Wystąpił problem z Twoim połączeniem z Internetem, lub z serwerem. {Spróbuj ponownie} wkrótce."
|
||||||
@ -191,11 +235,13 @@ common/views/components/messaging-room.vue:
|
|||||||
no-history: "Brak dalszej historii"
|
no-history: "Brak dalszej historii"
|
||||||
resize-form: "Przeciągnij aby zmienić rozmiar"
|
resize-form: "Przeciągnij aby zmienić rozmiar"
|
||||||
new-message: "Nowa wiadomość"
|
new-message: "Nowa wiadomość"
|
||||||
|
only-one-file-attached: "メッセージに添付できるのはひとつのファイルのみです"
|
||||||
common/views/components/messaging-room.form.vue:
|
common/views/components/messaging-room.form.vue:
|
||||||
input-message-here: "Wprowadź wiadomość tutaj"
|
input-message-here: "Wprowadź wiadomość tutaj"
|
||||||
send: "Wyślij"
|
send: "Wyślij"
|
||||||
attach-from-local: "Załącz pliki z komputera"
|
attach-from-local: "Załącz pliki z komputera"
|
||||||
attach-from-drive: "Załącz pliki z dysku"
|
attach-from-drive: "Załącz pliki z dysku"
|
||||||
|
only-one-file-attached: "メッセージに添付できるのはひとつのファイルのみです"
|
||||||
common/views/components/messaging-room.message.vue:
|
common/views/components/messaging-room.message.vue:
|
||||||
is-read: "Przeczytano"
|
is-read: "Przeczytano"
|
||||||
deleted: "Wiadomość została usunięta"
|
deleted: "Wiadomość została usunięta"
|
||||||
@ -235,6 +281,8 @@ common/views/components/signin.vue:
|
|||||||
token: "Token"
|
token: "Token"
|
||||||
signing-in: "Logowanie…"
|
signing-in: "Logowanie…"
|
||||||
signin: "Zaloguj"
|
signin: "Zaloguj"
|
||||||
|
or: "または"
|
||||||
|
signin-with-twitter: "Zaloguj się za pomocą Twittera"
|
||||||
common/views/components/signup.vue:
|
common/views/components/signup.vue:
|
||||||
username: "Nazwa użytkownika"
|
username: "Nazwa użytkownika"
|
||||||
checking: "Sprawdzanie…"
|
checking: "Sprawdzanie…"
|
||||||
@ -287,12 +335,12 @@ common/views/widgets/broadcast.vue:
|
|||||||
have-a-nice-day: "Miłego dnia!"
|
have-a-nice-day: "Miłego dnia!"
|
||||||
next: "Dalej"
|
next: "Dalej"
|
||||||
common/views/widgets/calendar.vue:
|
common/views/widgets/calendar.vue:
|
||||||
year: "{}年"
|
year: "Rok {}"
|
||||||
month: "{}月"
|
month: "Miesiąc {}"
|
||||||
day: "{}日"
|
day: "Dzień {}"
|
||||||
today: "今日:"
|
today: "Dzisiaj:"
|
||||||
this-month: "今月:"
|
this-month: "Ten miesiąc:"
|
||||||
this-year: "今年:"
|
this-year: "Ten rok:"
|
||||||
common/views/widgets/donation.vue:
|
common/views/widgets/donation.vue:
|
||||||
title: "Dotacje"
|
title: "Dotacje"
|
||||||
text: "Aby utrzymywać Misskey, płacimy za domenę, serwery i nie tylko… Nie zarabiamy na tym, więc byłoby nam miło, gdybyśmy uzyskali od Ciebie dotację. Jeżeli jesteś zainteresowany, skontaktuj się z {}. Dziękujemy za wsparcie!"
|
text: "Aby utrzymywać Misskey, płacimy za domenę, serwery i nie tylko… Nie zarabiamy na tym, więc byłoby nam miło, gdybyśmy uzyskali od Ciebie dotację. Jeżeli jesteś zainteresowany, skontaktuj się z {}. Dziękujemy za wsparcie!"
|
||||||
@ -314,36 +362,47 @@ common/views/widgets/memo.vue:
|
|||||||
memo: "Napisz tutaj!"
|
memo: "Napisz tutaj!"
|
||||||
save: "Zapisz"
|
save: "Zapisz"
|
||||||
common/views/widgets/slideshow.vue:
|
common/views/widgets/slideshow.vue:
|
||||||
folder-customize-mode: "フォルダを指定するには、カスタマイズモードを終了してください"
|
folder-customize-mode: "Aby określić katalog, opuść tryb dostosowywania"
|
||||||
folder: "クリックしてフォルダを指定してください"
|
folder: "Naciśnij i wybierz folder"
|
||||||
no-image: "このフォルダには画像がありません"
|
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: "Możesz przenieść katalog przeciągając go w Dysku."
|
||||||
tips-line8: "ホームは設定からカスタマイズできます"
|
tips-line8: "Strona główna może zostać dostosowana w ustawieniach."
|
||||||
tips-line9: "Misskeyは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は2014年にサービスを開始しました"
|
tips-line24: "Misskey zaczął działać w 2014."
|
||||||
tips-line25: "対応ブラウザではMisskeyを開いていなくても通知を受け取れます"
|
tips-line25: "Możesz otrzymywać powiadomienia nawet jeżeli Misskey nie jest otwarty w obsługiwanej przeglądarce."
|
||||||
common/views/pages/follow.vue:
|
common/views/pages/follow.vue:
|
||||||
signed-in-as: "Zalogowany jako {}"
|
signed-in-as: "Zalogowany jako {}"
|
||||||
following: "Śledzisz"
|
following: "Śledzisz"
|
||||||
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"
|
||||||
@ -478,6 +537,8 @@ desktop/views/components/notes.note.vue:
|
|||||||
detail: "Pokaż szczegóły"
|
detail: "Pokaż szczegóły"
|
||||||
private: "ten wpis jest prywatny"
|
private: "ten wpis jest prywatny"
|
||||||
deleted: "ten wpis został usunięty"
|
deleted: "ten wpis został usunięty"
|
||||||
|
hide: "Zwiń"
|
||||||
|
see-more: "Więcej"
|
||||||
desktop/views/components/notes.vue:
|
desktop/views/components/notes.vue:
|
||||||
error: "Ładowanie nie powiodło się."
|
error: "Ładowanie nie powiodło się."
|
||||||
retry: "Spróbuj ponownie"
|
retry: "Spróbuj ponownie"
|
||||||
@ -486,9 +547,9 @@ desktop/views/components/notifications.vue:
|
|||||||
more: "Więcej"
|
more: "Więcej"
|
||||||
empty: "Brak powiadomień"
|
empty: "Brak powiadomień"
|
||||||
desktop/views/components/post-form.vue:
|
desktop/views/components/post-form.vue:
|
||||||
add-visible-user: "+ユーザーを追加"
|
add-visible-user: "+Dodaj użytkownika"
|
||||||
attach-location-information: "位置情報を添付する"
|
attach-location-information: "Załącz informacje o lokalizacji"
|
||||||
hide-contents: "内容を隠す"
|
hide-contents: "Ukryj zawartość"
|
||||||
reply-placeholder: "Odpowiedz na ten wpis…"
|
reply-placeholder: "Odpowiedz na ten wpis…"
|
||||||
quote-placeholder: "Zacytuj ten wpis…"
|
quote-placeholder: "Zacytuj ten wpis…"
|
||||||
submit: "Wyślij"
|
submit: "Wyślij"
|
||||||
@ -509,10 +570,11 @@ desktop/views/components/post-form.vue:
|
|||||||
text-remain: "pozostałe znaki: {}"
|
text-remain: "pozostałe znaki: {}"
|
||||||
recent-tags: "Ostatnie"
|
recent-tags: "Ostatnie"
|
||||||
click-to-tagging: "Naciśnij aby oznaczyć"
|
click-to-tagging: "Naciśnij aby oznaczyć"
|
||||||
visibility: "公開範囲"
|
visibility: "Widoczność"
|
||||||
geolocation-alert: "お使いの端末は位置情報に対応していません"
|
geolocation-alert: "Twoje urządzenie nie obsługuje geolokalizacji."
|
||||||
error: "エラー"
|
error: "Bład"
|
||||||
enter-username: "ユーザー名を入力してください"
|
enter-username: "Wprowadź nazwę użytkownika…"
|
||||||
|
annotations: "Treść ostrzeżenia (opcjonalnie)"
|
||||||
desktop/views/components/post-form-window.vue:
|
desktop/views/components/post-form-window.vue:
|
||||||
note: "Nowy wpis"
|
note: "Nowy wpis"
|
||||||
reply: "Odpowiedz"
|
reply: "Odpowiedz"
|
||||||
@ -634,8 +696,8 @@ desktop/views/components/settings.api.vue:
|
|||||||
desktop/views/components/settings.apps.vue:
|
desktop/views/components/settings.apps.vue:
|
||||||
no-apps: "Brak zautoryzowanych aplikacji"
|
no-apps: "Brak zautoryzowanych aplikacji"
|
||||||
desktop/views/components/settings.drive.vue:
|
desktop/views/components/settings.drive.vue:
|
||||||
max: "中"
|
max: "Maksymalnie"
|
||||||
in-use: "使用中"
|
in-use: " w użyciu."
|
||||||
desktop/views/components/settings.mute.vue:
|
desktop/views/components/settings.mute.vue:
|
||||||
no-users: "Brak wyciszonych użytkowników"
|
no-users: "Brak wyciszonych użytkowników"
|
||||||
desktop/views/components/settings.password.vue:
|
desktop/views/components/settings.password.vue:
|
||||||
@ -658,7 +720,7 @@ desktop/views/components/settings.profile.vue:
|
|||||||
other: "Inne"
|
other: "Inne"
|
||||||
is-bot: "To konto jest prowadzone przez bota"
|
is-bot: "To konto jest prowadzone przez bota"
|
||||||
is-cat: "To konto jest prowadzone przez kota"
|
is-cat: "To konto jest prowadzone przez kota"
|
||||||
profile-updated: "プロフィールを更新しました"
|
profile-updated: "Zaktualizowano profil"
|
||||||
desktop/views/components/sub-note-content.vue:
|
desktop/views/components/sub-note-content.vue:
|
||||||
private: "ten wpis jest prywatny"
|
private: "ten wpis jest prywatny"
|
||||||
deleted: "ten wpis został usunięty"
|
deleted: "ten wpis został usunięty"
|
||||||
@ -674,6 +736,7 @@ desktop/views/components/timeline.vue:
|
|||||||
list: "Listy"
|
list: "Listy"
|
||||||
desktop/views/components/ui.header.vue:
|
desktop/views/components/ui.header.vue:
|
||||||
welcome-back: "Witaj ponownie,"
|
welcome-back: "Witaj ponownie,"
|
||||||
|
adjective: "さん"
|
||||||
desktop/views/components/ui.header.account.vue:
|
desktop/views/components/ui.header.account.vue:
|
||||||
profile: "Twój profil"
|
profile: "Twój profil"
|
||||||
drive: "Dysk"
|
drive: "Dysk"
|
||||||
@ -702,6 +765,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: "Nazwa listy"
|
||||||
desktop/views/components/user-preview.vue:
|
desktop/views/components/user-preview.vue:
|
||||||
notes: "Wpisy"
|
notes: "Wpisy"
|
||||||
following: "Śledzeni"
|
following: "Śledzeni"
|
||||||
@ -732,7 +796,7 @@ desktop/views/pages/welcome.vue:
|
|||||||
signin-button: "Zaloguj się"
|
signin-button: "Zaloguj się"
|
||||||
signup-button: "Zarejestruj się"
|
signup-button: "Zarejestruj się"
|
||||||
timeline: "Oś czasu"
|
timeline: "Oś czasu"
|
||||||
powered-by-misskey: "Powered by <b>Misskey</b>."
|
powered-by-misskey: "Oparto o <b>Misskey</b>."
|
||||||
desktop/views/pages/drive.vue:
|
desktop/views/pages/drive.vue:
|
||||||
title: "Dysk Misskey"
|
title: "Dysk Misskey"
|
||||||
desktop/views/pages/favorites.vue:
|
desktop/views/pages/favorites.vue:
|
||||||
@ -748,13 +812,12 @@ desktop/views/pages/selectdrive.vue:
|
|||||||
cancel: "Anuluj"
|
cancel: "Anuluj"
|
||||||
upload: "Wyślij pliki z Twojego komputera"
|
upload: "Wyślij pliki z Twojego komputera"
|
||||||
desktop/views/pages/search.vue:
|
desktop/views/pages/search.vue:
|
||||||
not-available: "検索機能を利用することができません。"
|
not-available: "Funkcja wyszukiwania nie może zostać wykorzystywana."
|
||||||
not-found: "「{}」に関する投稿は見つかりませんでした。"
|
not-found: "Nie znaleziono wpisów zawierających „{}”"
|
||||||
desktop/views/pages/share.vue:
|
desktop/views/pages/share.vue:
|
||||||
share-with: "Misskeyで共有"
|
share-with: "Udostępnij z {}."
|
||||||
close: "閉じる"
|
|
||||||
desktop/views/pages/tag.vue:
|
desktop/views/pages/tag.vue:
|
||||||
no-posts-found: "ハッシュタグ「{}」が付けられた投稿は見つかりませんでした。"
|
no-posts-found: "Nie znaleziono wpisów zawierających „{}”."
|
||||||
desktop/views/pages/user-list.users.vue:
|
desktop/views/pages/user-list.users.vue:
|
||||||
users: "Użytkownicy"
|
users: "Użytkownicy"
|
||||||
add-user: "Dodaj użytkownika"
|
add-user: "Dodaj użytkownika"
|
||||||
@ -785,6 +848,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: "Dodaj do listy"
|
||||||
|
list-pushed: "Dodałeś(-aś) {user} do {list}."
|
||||||
desktop/views/pages/user/user.header.vue:
|
desktop/views/pages/user/user.header.vue:
|
||||||
posts: "Wpisy"
|
posts: "Wpisy"
|
||||||
following: "Śledzeni"
|
following: "Śledzeni"
|
||||||
@ -911,7 +976,8 @@ mobile/views/components/timeline.vue:
|
|||||||
empty: "Brak wpisów"
|
empty: "Brak wpisów"
|
||||||
load-more: "Więcej"
|
load-more: "Więcej"
|
||||||
mobile/views/components/ui.header.vue:
|
mobile/views/components/ui.header.vue:
|
||||||
welcome-back: "おかえりなさい、"
|
welcome-back: "Witaj ponownie, "
|
||||||
|
adjective: "さん"
|
||||||
mobile/views/components/ui.nav.vue:
|
mobile/views/components/ui.nav.vue:
|
||||||
timeline: "Oś czasu"
|
timeline: "Oś czasu"
|
||||||
notifications: "Powiadomienia"
|
notifications: "Powiadomienia"
|
||||||
@ -943,7 +1009,7 @@ mobile/views/pages/drive.vue:
|
|||||||
drive: "Dysk"
|
drive: "Dysk"
|
||||||
more: "Załaduj więcej"
|
more: "Załaduj więcej"
|
||||||
mobile/views/pages/signup.vue:
|
mobile/views/pages/signup.vue:
|
||||||
lets-start: "📦 始めましょう"
|
lets-start: "Rozpocznijmy! 📦"
|
||||||
mobile/views/pages/followers.vue:
|
mobile/views/pages/followers.vue:
|
||||||
followers-of: "Śledzący {}"
|
followers-of: "Śledzący {}"
|
||||||
mobile/views/pages/following.vue:
|
mobile/views/pages/following.vue:
|
||||||
@ -954,13 +1020,18 @@ mobile/views/pages/home.vue:
|
|||||||
hybrid: "Społeczność"
|
hybrid: "Społeczność"
|
||||||
global: "Globalne"
|
global: "Globalne"
|
||||||
mobile/views/pages/tag.vue:
|
mobile/views/pages/tag.vue:
|
||||||
no-posts-found: "ハッシュタグ「{}」が付けられた投稿は見つかりませんでした。"
|
no-posts-found: "Nie znaleziono wpisów zawierających „{}”."
|
||||||
mobile/views/pages/welcome.vue:
|
mobile/views/pages/welcome.vue:
|
||||||
signup: "新規登録"
|
signup: "Zarejestruj się"
|
||||||
mobile/views/pages/widgets.vue:
|
mobile/views/pages/widgets.vue:
|
||||||
dashboard: "ダッシュボード"
|
dashboard: "Kokpit"
|
||||||
|
widgets-hints: "ウィジェットを追加/削除したり並べ替えたりできます。ウィジェットを移動するには「三」をドラッグします。ウィジェットを削除するには「x」をタップします。いくつかのウィジェットはタップすることで表示を変更できます。"
|
||||||
|
add-widget: "Dodaj"
|
||||||
|
customization-tips: "カスタマイズのヒント"
|
||||||
mobile/views/pages/widgets/activity.vue:
|
mobile/views/pages/widgets/activity.vue:
|
||||||
activity: "アクティビティ"
|
activity: "Aktywność"
|
||||||
|
mobile/views/pages/share.vue:
|
||||||
|
share-with: "Udostępnij z {}."
|
||||||
mobile/views/pages/messaging.vue:
|
mobile/views/pages/messaging.vue:
|
||||||
messaging: "Wiadomości"
|
messaging: "Wiadomości"
|
||||||
mobile/views/pages/messaging-room.vue:
|
mobile/views/pages/messaging-room.vue:
|
||||||
@ -976,8 +1047,8 @@ mobile/views/pages/note.vue:
|
|||||||
mobile/views/pages/notifications.vue:
|
mobile/views/pages/notifications.vue:
|
||||||
notifications: "Powiadomienia"
|
notifications: "Powiadomienia"
|
||||||
read-all: "Czy na pewno chcesz oznaczyć wszystkie powiadomienia jako przeczytane?"
|
read-all: "Czy na pewno chcesz oznaczyć wszystkie powiadomienia jako przeczytane?"
|
||||||
mobile/views/pages/reversi.vue:
|
mobile/views/pages/games/reversi.vue:
|
||||||
reversi: "リバーシ"
|
reversi: "Reversi"
|
||||||
mobile/views/pages/settings/settings.profile.vue:
|
mobile/views/pages/settings/settings.profile.vue:
|
||||||
title: "Profil"
|
title: "Profil"
|
||||||
name: "Nazwa"
|
name: "Nazwa"
|
||||||
@ -995,6 +1066,7 @@ mobile/views/pages/settings/settings.profile.vue:
|
|||||||
mobile/views/pages/search.vue:
|
mobile/views/pages/search.vue:
|
||||||
search: "Szukaj"
|
search: "Szukaj"
|
||||||
empty: "Nie znaleziono wpisów zawierających '{}'"
|
empty: "Nie znaleziono wpisów zawierających '{}'"
|
||||||
|
not-found: "「{}」に関する投稿は見つかりませんでした。"
|
||||||
mobile/views/pages/selectdrive.vue:
|
mobile/views/pages/selectdrive.vue:
|
||||||
select-file: "Wybierz plik"
|
select-file: "Wybierz plik"
|
||||||
mobile/views/pages/settings.vue:
|
mobile/views/pages/settings.vue:
|
||||||
@ -1089,3 +1161,5 @@ docs:
|
|||||||
name: "Nazwa"
|
name: "Nazwa"
|
||||||
type: "Rodzaj"
|
type: "Rodzaj"
|
||||||
description: "Opis"
|
description: "Opis"
|
||||||
|
dev/views/index.vue:
|
||||||
|
manage-apps: "アプリの管理"
|
||||||
|
@ -6,6 +6,13 @@ 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:
|
||||||
|
detected: "広告ブロッカーを無効にしてください"
|
||||||
|
warning: "<strong>Misskeyは広告を掲載していません</strong>が、広告をブロックする機能が有効だと一部の機能が利用できなかったり、不具合が発生する場合があります。"
|
||||||
|
application-authorization: "アプリの連携"
|
||||||
|
close: "閉じる"
|
||||||
|
do-not-copy-paste: "ここにコードを入力したり張り付けたりしないでください。アカウントが不正利用される可能性があります。"
|
||||||
|
got-it: "わかった"
|
||||||
customization-tips:
|
customization-tips:
|
||||||
title: "カスタマイズのヒント"
|
title: "カスタマイズのヒント"
|
||||||
paragraph1: "ホームのカスタマイズでは、ウィジェットを追加/削除したり、ドラッグ&ドロップして並べ替えたりすることができます。"
|
paragraph1: "ホームのカスタマイズでは、ウィジェットを追加/削除したり、ドラッグ&ドロップして並べ替えたりすることができます。"
|
||||||
@ -13,7 +20,14 @@ common:
|
|||||||
paragraph3: "ウィジェットを削除するには、ヘッダーの<strong>「ゴミ箱」</strong>と書かれたエリアにウィジェットをドラッグ&ドロップします。"
|
paragraph3: "ウィジェットを削除するには、ヘッダーの<strong>「ゴミ箱」</strong>と書かれたエリアにウィジェットをドラッグ&ドロップします。"
|
||||||
paragraph4: "カスタマイズを終了するには、右上の「完了」をクリックします。"
|
paragraph4: "カスタマイズを終了するには、右上の「完了」をクリックします。"
|
||||||
gotit: "Got it!"
|
gotit: "Got it!"
|
||||||
name: "Misskey"
|
notification:
|
||||||
|
file-uploaded: "ファイルがアップロードされました"
|
||||||
|
message-from: "{}さんからメッセージ:"
|
||||||
|
reversi-invited: "対局への招待があります"
|
||||||
|
reversi-invited-by: "{}さんから"
|
||||||
|
notified-by: "{}さんから"
|
||||||
|
reply-from: "{}さんから返信:"
|
||||||
|
quoted-by: "{}さんが引用:"
|
||||||
time:
|
time:
|
||||||
unknown: "なぞのじかん"
|
unknown: "なぞのじかん"
|
||||||
future: "未来"
|
future: "未来"
|
||||||
@ -25,6 +39,7 @@ common:
|
|||||||
weeks_ago: "{}週間前"
|
weeks_ago: "{}週間前"
|
||||||
months_ago: "{}ヶ月前"
|
months_ago: "{}ヶ月前"
|
||||||
years_ago: "{}年前"
|
years_ago: "{}年前"
|
||||||
|
month-and-day: "{month}月 {day}日"
|
||||||
trash: "ゴミ箱"
|
trash: "ゴミ箱"
|
||||||
weekday-short:
|
weekday-short:
|
||||||
sunday: "日"
|
sunday: "日"
|
||||||
@ -69,6 +84,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: "あなたのターンです"
|
||||||
@ -121,7 +137,38 @@ common:
|
|||||||
rename: "名前を変更"
|
rename: "名前を変更"
|
||||||
stack-left: "左に重ねる"
|
stack-left: "左に重ねる"
|
||||||
pop-right: "右に出す"
|
pop-right: "右に出す"
|
||||||
|
auth/views/form.vue:
|
||||||
|
share-access: "<i>{{ app.name }}</i>があなたのアカウントにアクセスすることを<b>許可</b>しますか?"
|
||||||
|
permission-ask: "このアプリは次の権限を要求しています:"
|
||||||
|
account-read: "アカウントの情報を見る。"
|
||||||
|
account-write: "アカウントの情報を操作する。"
|
||||||
|
note-write: "投稿する。"
|
||||||
|
like-write: "いいねしたりいいね解除する。"
|
||||||
|
following-write: "フォローしたりフォロー解除する。"
|
||||||
|
drive-read: "ドライブを見る。"
|
||||||
|
drive-write: "ドライブを操作する。"
|
||||||
|
notification-read: "通知を見る。"
|
||||||
|
notification-write: "通知を操作する。"
|
||||||
|
cancel: "キャンセル"
|
||||||
|
accept: "アクセスを許可"
|
||||||
|
auth/views/index.vue:
|
||||||
|
loading: "読み込み中"
|
||||||
|
denied: "アプリケーションの連携をキャンセルしました。"
|
||||||
|
denied-paragraph: "このアプリがあなたのアカウントにアクセスすることはありません。"
|
||||||
|
already-authorized: "このアプリは既に連携済みです"
|
||||||
|
allowed: "アプリケーションの連携を許可しました"
|
||||||
|
callback-url: "アプリケーションに戻っています"
|
||||||
|
please-go-back: "アプリケーションに戻って、やっていってください。"
|
||||||
|
error: "セッションが存在しません。"
|
||||||
|
sign-in: "サインインしてください"
|
||||||
common/views/components/games/reversi/reversi.vue:
|
common/views/components/games/reversi/reversi.vue:
|
||||||
|
matching:
|
||||||
|
waiting-for: "{}を待っています"
|
||||||
|
cancel: "キャンセル"
|
||||||
|
common/views/components/games/reversi/reversi.game.vue:
|
||||||
|
surrender: "投了"
|
||||||
|
surrendered: "投了により"
|
||||||
|
common/views/components/games/reversi/reversi.index.vue:
|
||||||
title: "Misskey Reversi"
|
title: "Misskey Reversi"
|
||||||
sub-title: "他のMisskeyユーザーとリバーシで対戦しよう"
|
sub-title: "他のMisskeyユーザーとリバーシで対戦しよう"
|
||||||
invite: "招待"
|
invite: "招待"
|
||||||
@ -136,9 +183,6 @@ common/views/components/games/reversi/reversi.vue:
|
|||||||
game-state:
|
game-state:
|
||||||
ended: "終了"
|
ended: "終了"
|
||||||
playing: "進行中"
|
playing: "進行中"
|
||||||
matching:
|
|
||||||
waiting-for: "{}を待っています"
|
|
||||||
cacnel: "キャンセル"
|
|
||||||
common/views/components/games/reversi/reversi.room.vue:
|
common/views/components/games/reversi/reversi.room.vue:
|
||||||
settings-of-the-game: "ゲームの設定"
|
settings-of-the-game: "ゲームの設定"
|
||||||
choose-map: "マップを選択"
|
choose-map: "マップを選択"
|
||||||
@ -150,7 +194,7 @@ common/views/components/games/reversi/reversi.room.vue:
|
|||||||
looped-map: "ループマップ"
|
looped-map: "ループマップ"
|
||||||
can-put-everywhere: "どこでも置けるモード"
|
can-put-everywhere: "どこでも置けるモード"
|
||||||
settings-of-the-bot: "Botの設定"
|
settings-of-the-bot: "Botの設定"
|
||||||
this-gane-is-started-soon: "ゲームは数秒後に開始されます"
|
this-game-is-started-soon: "ゲームは数秒後に開始されます"
|
||||||
waiting-for-other: "相手の準備が完了するのを待っています"
|
waiting-for-other: "相手の準備が完了するのを待っています"
|
||||||
waiting-for-me: "あなたの準備が完了するのを待っています"
|
waiting-for-me: "あなたの準備が完了するのを待っています"
|
||||||
waiting-for-both: "準備中"
|
waiting-for-both: "準備中"
|
||||||
@ -191,11 +235,13 @@ 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: "既読"
|
||||||
deleted: "このメッセージは削除されました"
|
deleted: "このメッセージは削除されました"
|
||||||
@ -235,6 +281,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: "確認しています..."
|
||||||
@ -344,6 +392,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"
|
||||||
@ -478,6 +537,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: "読み込みに失敗しました。"
|
||||||
retry: "リトライ"
|
retry: "リトライ"
|
||||||
@ -513,6 +574,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: "新規投稿"
|
||||||
reply: "返信"
|
reply: "返信"
|
||||||
@ -674,6 +736,7 @@ desktop/views/components/timeline.vue:
|
|||||||
list: "リスト"
|
list: "リスト"
|
||||||
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: "プロフィール"
|
||||||
drive: "ドライブ"
|
drive: "ドライブ"
|
||||||
@ -702,6 +765,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: "フォロー"
|
||||||
@ -751,8 +815,7 @@ desktop/views/pages/search.vue:
|
|||||||
not-available: "検索機能を利用することができません。"
|
not-available: "検索機能を利用することができません。"
|
||||||
not-found: "「{}」に関する投稿は見つかりませんでした。"
|
not-found: "「{}」に関する投稿は見つかりませんでした。"
|
||||||
desktop/views/pages/share.vue:
|
desktop/views/pages/share.vue:
|
||||||
share-with: "Misskeyで共有"
|
share-with: "{}で共有"
|
||||||
close: "閉じる"
|
|
||||||
desktop/views/pages/tag.vue:
|
desktop/views/pages/tag.vue:
|
||||||
no-posts-found: "ハッシュタグ「{}」が付けられた投稿は見つかりませんでした。"
|
no-posts-found: "ハッシュタグ「{}」が付けられた投稿は見つかりませんでした。"
|
||||||
desktop/views/pages/user-list.users.vue:
|
desktop/views/pages/user-list.users.vue:
|
||||||
@ -785,6 +848,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: "フォロー"
|
||||||
@ -912,6 +977,7 @@ mobile/views/components/timeline.vue:
|
|||||||
load-more: "もっと"
|
load-more: "もっと"
|
||||||
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: "タイムライン"
|
||||||
notifications: "通知"
|
notifications: "通知"
|
||||||
@ -959,8 +1025,13 @@ mobile/views/pages/welcome.vue:
|
|||||||
signup: "新規登録"
|
signup: "新規登録"
|
||||||
mobile/views/pages/widgets.vue:
|
mobile/views/pages/widgets.vue:
|
||||||
dashboard: "ダッシュボード"
|
dashboard: "ダッシュボード"
|
||||||
|
widgets-hints: "ウィジェットを追加/削除したり並べ替えたりできます。ウィジェットを移動するには「三」をドラッグします。ウィジェットを削除するには「x」をタップします。いくつかのウィジェットはタップすることで表示を変更できます。"
|
||||||
|
add-widget: "追加"
|
||||||
|
customization-tips: "カスタマイズのヒント"
|
||||||
mobile/views/pages/widgets/activity.vue:
|
mobile/views/pages/widgets/activity.vue:
|
||||||
activity: "アクティビティ"
|
activity: "アクティビティ"
|
||||||
|
mobile/views/pages/share.vue:
|
||||||
|
share-with: "{}で共有"
|
||||||
mobile/views/pages/messaging.vue:
|
mobile/views/pages/messaging.vue:
|
||||||
messaging: "メッセージ"
|
messaging: "メッセージ"
|
||||||
mobile/views/pages/messaging-room.vue:
|
mobile/views/pages/messaging-room.vue:
|
||||||
@ -976,7 +1047,7 @@ mobile/views/pages/note.vue:
|
|||||||
mobile/views/pages/notifications.vue:
|
mobile/views/pages/notifications.vue:
|
||||||
notifications: "通知"
|
notifications: "通知"
|
||||||
read-all: "すべての通知を既読にしますか?"
|
read-all: "すべての通知を既読にしますか?"
|
||||||
mobile/views/pages/reversi.vue:
|
mobile/views/pages/games/reversi.vue:
|
||||||
reversi: "リバーシ"
|
reversi: "リバーシ"
|
||||||
mobile/views/pages/settings/settings.profile.vue:
|
mobile/views/pages/settings/settings.profile.vue:
|
||||||
title: "プロフィール"
|
title: "プロフィール"
|
||||||
@ -995,6 +1066,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: "ファイルを選択"
|
||||||
mobile/views/pages/settings.vue:
|
mobile/views/pages/settings.vue:
|
||||||
@ -1089,3 +1161,5 @@ docs:
|
|||||||
name: "名前"
|
name: "名前"
|
||||||
type: "型"
|
type: "型"
|
||||||
description: "説明"
|
description: "説明"
|
||||||
|
dev/views/index.vue:
|
||||||
|
manage-apps: "アプリの管理"
|
||||||
|
@ -6,6 +6,13 @@ 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:
|
||||||
|
detected: "広告ブロッカーを無効にしてください"
|
||||||
|
warning: "<strong>Misskeyは広告を掲載していません</strong>が、広告をブロックする機能が有効だと一部の機能が利用できなかったり、不具合が発生する場合があります。"
|
||||||
|
application-authorization: "アプリの連携"
|
||||||
|
close: "閉じる"
|
||||||
|
do-not-copy-paste: "ここにコードを入力したり張り付けたりしないでください。アカウントが不正利用される可能性があります。"
|
||||||
|
got-it: "わかった"
|
||||||
customization-tips:
|
customization-tips:
|
||||||
title: "カスタマイズのヒント"
|
title: "カスタマイズのヒント"
|
||||||
paragraph1: "ホームのカスタマイズでは、ウィジェットを追加/削除したり、ドラッグ&ドロップして並べ替えたりすることができます。"
|
paragraph1: "ホームのカスタマイズでは、ウィジェットを追加/削除したり、ドラッグ&ドロップして並べ替えたりすることができます。"
|
||||||
@ -13,7 +20,14 @@ common:
|
|||||||
paragraph3: "ウィジェットを削除するには、ヘッダーの<strong>「ゴミ箱」</strong>と書かれたエリアにウィジェットをドラッグ&ドロップします。"
|
paragraph3: "ウィジェットを削除するには、ヘッダーの<strong>「ゴミ箱」</strong>と書かれたエリアにウィジェットをドラッグ&ドロップします。"
|
||||||
paragraph4: "カスタマイズを終了するには、右上の「完了」をクリックします。"
|
paragraph4: "カスタマイズを終了するには、右上の「完了」をクリックします。"
|
||||||
gotit: "Got it!"
|
gotit: "Got it!"
|
||||||
name: "Misskey"
|
notification:
|
||||||
|
file-uploaded: "ファイルがアップロードされました"
|
||||||
|
message-from: "{}さんからメッセージ:"
|
||||||
|
reversi-invited: "対局への招待があります"
|
||||||
|
reversi-invited-by: "{}さんから"
|
||||||
|
notified-by: "{}さんから"
|
||||||
|
reply-from: "{}さんから返信:"
|
||||||
|
quoted-by: "{}さんが引用:"
|
||||||
time:
|
time:
|
||||||
unknown: "なぞのじかん"
|
unknown: "なぞのじかん"
|
||||||
future: "未来"
|
future: "未来"
|
||||||
@ -25,6 +39,7 @@ common:
|
|||||||
weeks_ago: "{}週間前"
|
weeks_ago: "{}週間前"
|
||||||
months_ago: "{}ヶ月前"
|
months_ago: "{}ヶ月前"
|
||||||
years_ago: "{}年前"
|
years_ago: "{}年前"
|
||||||
|
month-and-day: "{month}月 {day}日"
|
||||||
trash: "ゴミ箱"
|
trash: "ゴミ箱"
|
||||||
weekday-short:
|
weekday-short:
|
||||||
sunday: "日"
|
sunday: "日"
|
||||||
@ -69,6 +84,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: "あなたのターンです"
|
||||||
@ -121,7 +137,38 @@ common:
|
|||||||
rename: "名前を変更"
|
rename: "名前を変更"
|
||||||
stack-left: "左に重ねる"
|
stack-left: "左に重ねる"
|
||||||
pop-right: "右に出す"
|
pop-right: "右に出す"
|
||||||
|
auth/views/form.vue:
|
||||||
|
share-access: "<i>{{ app.name }}</i>があなたのアカウントにアクセスすることを<b>許可</b>しますか?"
|
||||||
|
permission-ask: "このアプリは次の権限を要求しています:"
|
||||||
|
account-read: "アカウントの情報を見る。"
|
||||||
|
account-write: "アカウントの情報を操作する。"
|
||||||
|
note-write: "投稿する。"
|
||||||
|
like-write: "いいねしたりいいね解除する。"
|
||||||
|
following-write: "フォローしたりフォロー解除する。"
|
||||||
|
drive-read: "ドライブを見る。"
|
||||||
|
drive-write: "ドライブを操作する。"
|
||||||
|
notification-read: "通知を見る。"
|
||||||
|
notification-write: "通知を操作する。"
|
||||||
|
cancel: "キャンセル"
|
||||||
|
accept: "アクセスを許可"
|
||||||
|
auth/views/index.vue:
|
||||||
|
loading: "読み込み中"
|
||||||
|
denied: "アプリケーションの連携をキャンセルしました。"
|
||||||
|
denied-paragraph: "このアプリがあなたのアカウントにアクセスすることはありません。"
|
||||||
|
already-authorized: "このアプリは既に連携済みです"
|
||||||
|
allowed: "アプリケーションの連携を許可しました"
|
||||||
|
callback-url: "アプリケーションに戻っています"
|
||||||
|
please-go-back: "アプリケーションに戻って、やっていってください。"
|
||||||
|
error: "セッションが存在しません。"
|
||||||
|
sign-in: "サインインしてください"
|
||||||
common/views/components/games/reversi/reversi.vue:
|
common/views/components/games/reversi/reversi.vue:
|
||||||
|
matching:
|
||||||
|
waiting-for: "{}を待っています"
|
||||||
|
cancel: "キャンセル"
|
||||||
|
common/views/components/games/reversi/reversi.game.vue:
|
||||||
|
surrender: "投了"
|
||||||
|
surrendered: "投了により"
|
||||||
|
common/views/components/games/reversi/reversi.index.vue:
|
||||||
title: "Misskey Reversi"
|
title: "Misskey Reversi"
|
||||||
sub-title: "他のMisskeyユーザーとリバーシで対戦しよう"
|
sub-title: "他のMisskeyユーザーとリバーシで対戦しよう"
|
||||||
invite: "招待"
|
invite: "招待"
|
||||||
@ -136,9 +183,6 @@ common/views/components/games/reversi/reversi.vue:
|
|||||||
game-state:
|
game-state:
|
||||||
ended: "終了"
|
ended: "終了"
|
||||||
playing: "進行中"
|
playing: "進行中"
|
||||||
matching:
|
|
||||||
waiting-for: "{}を待っています"
|
|
||||||
cacnel: "キャンセル"
|
|
||||||
common/views/components/games/reversi/reversi.room.vue:
|
common/views/components/games/reversi/reversi.room.vue:
|
||||||
settings-of-the-game: "ゲームの設定"
|
settings-of-the-game: "ゲームの設定"
|
||||||
choose-map: "マップを選択"
|
choose-map: "マップを選択"
|
||||||
@ -150,7 +194,7 @@ common/views/components/games/reversi/reversi.room.vue:
|
|||||||
looped-map: "ループマップ"
|
looped-map: "ループマップ"
|
||||||
can-put-everywhere: "どこでも置けるモード"
|
can-put-everywhere: "どこでも置けるモード"
|
||||||
settings-of-the-bot: "Botの設定"
|
settings-of-the-bot: "Botの設定"
|
||||||
this-gane-is-started-soon: "ゲームは数秒後に開始されます"
|
this-game-is-started-soon: "ゲームは数秒後に開始されます"
|
||||||
waiting-for-other: "相手の準備が完了するのを待っています"
|
waiting-for-other: "相手の準備が完了するのを待っています"
|
||||||
waiting-for-me: "あなたの準備が完了するのを待っています"
|
waiting-for-me: "あなたの準備が完了するのを待っています"
|
||||||
waiting-for-both: "準備中"
|
waiting-for-both: "準備中"
|
||||||
@ -191,11 +235,13 @@ 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: "既読"
|
||||||
deleted: "このメッセージは削除されました"
|
deleted: "このメッセージは削除されました"
|
||||||
@ -235,6 +281,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: "確認しています..."
|
||||||
@ -344,6 +392,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"
|
||||||
@ -478,6 +537,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: "読み込みに失敗しました。"
|
||||||
retry: "リトライ"
|
retry: "リトライ"
|
||||||
@ -513,6 +574,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: "新規投稿"
|
||||||
reply: "返信"
|
reply: "返信"
|
||||||
@ -674,6 +736,7 @@ desktop/views/components/timeline.vue:
|
|||||||
list: "リスト"
|
list: "リスト"
|
||||||
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: "プロフィール"
|
||||||
drive: "ドライブ"
|
drive: "ドライブ"
|
||||||
@ -702,6 +765,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: "フォロー"
|
||||||
@ -751,8 +815,7 @@ desktop/views/pages/search.vue:
|
|||||||
not-available: "検索機能を利用することができません。"
|
not-available: "検索機能を利用することができません。"
|
||||||
not-found: "「{}」に関する投稿は見つかりませんでした。"
|
not-found: "「{}」に関する投稿は見つかりませんでした。"
|
||||||
desktop/views/pages/share.vue:
|
desktop/views/pages/share.vue:
|
||||||
share-with: "Misskeyで共有"
|
share-with: "{}で共有"
|
||||||
close: "閉じる"
|
|
||||||
desktop/views/pages/tag.vue:
|
desktop/views/pages/tag.vue:
|
||||||
no-posts-found: "ハッシュタグ「{}」が付けられた投稿は見つかりませんでした。"
|
no-posts-found: "ハッシュタグ「{}」が付けられた投稿は見つかりませんでした。"
|
||||||
desktop/views/pages/user-list.users.vue:
|
desktop/views/pages/user-list.users.vue:
|
||||||
@ -785,6 +848,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: "フォロー"
|
||||||
@ -912,6 +977,7 @@ mobile/views/components/timeline.vue:
|
|||||||
load-more: "もっと"
|
load-more: "もっと"
|
||||||
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: "タイムライン"
|
||||||
notifications: "通知"
|
notifications: "通知"
|
||||||
@ -959,8 +1025,13 @@ mobile/views/pages/welcome.vue:
|
|||||||
signup: "新規登録"
|
signup: "新規登録"
|
||||||
mobile/views/pages/widgets.vue:
|
mobile/views/pages/widgets.vue:
|
||||||
dashboard: "ダッシュボード"
|
dashboard: "ダッシュボード"
|
||||||
|
widgets-hints: "ウィジェットを追加/削除したり並べ替えたりできます。ウィジェットを移動するには「三」をドラッグします。ウィジェットを削除するには「x」をタップします。いくつかのウィジェットはタップすることで表示を変更できます。"
|
||||||
|
add-widget: "追加"
|
||||||
|
customization-tips: "カスタマイズのヒント"
|
||||||
mobile/views/pages/widgets/activity.vue:
|
mobile/views/pages/widgets/activity.vue:
|
||||||
activity: "アクティビティ"
|
activity: "アクティビティ"
|
||||||
|
mobile/views/pages/share.vue:
|
||||||
|
share-with: "{}で共有"
|
||||||
mobile/views/pages/messaging.vue:
|
mobile/views/pages/messaging.vue:
|
||||||
messaging: "メッセージ"
|
messaging: "メッセージ"
|
||||||
mobile/views/pages/messaging-room.vue:
|
mobile/views/pages/messaging-room.vue:
|
||||||
@ -976,7 +1047,7 @@ mobile/views/pages/note.vue:
|
|||||||
mobile/views/pages/notifications.vue:
|
mobile/views/pages/notifications.vue:
|
||||||
notifications: "通知"
|
notifications: "通知"
|
||||||
read-all: "すべての通知を既読にしますか?"
|
read-all: "すべての通知を既読にしますか?"
|
||||||
mobile/views/pages/reversi.vue:
|
mobile/views/pages/games/reversi.vue:
|
||||||
reversi: "リバーシ"
|
reversi: "リバーシ"
|
||||||
mobile/views/pages/settings/settings.profile.vue:
|
mobile/views/pages/settings/settings.profile.vue:
|
||||||
title: "プロフィール"
|
title: "プロフィール"
|
||||||
@ -995,6 +1066,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: "ファイルを選択"
|
||||||
mobile/views/pages/settings.vue:
|
mobile/views/pages/settings.vue:
|
||||||
@ -1089,3 +1161,5 @@ docs:
|
|||||||
name: "名前"
|
name: "名前"
|
||||||
type: "型"
|
type: "型"
|
||||||
description: "説明"
|
description: "説明"
|
||||||
|
dev/views/index.vue:
|
||||||
|
manage-apps: "アプリの管理"
|
||||||
|
@ -6,6 +6,13 @@ 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:
|
||||||
|
detected: "広告ブロッカーを無効にしてください"
|
||||||
|
warning: "<strong>Misskeyは広告を掲載していません</strong>が、広告をブロックする機能が有効だと一部の機能が利用できなかったり、不具合が発生する場合があります。"
|
||||||
|
application-authorization: "アプリの連携"
|
||||||
|
close: "閉じる"
|
||||||
|
do-not-copy-paste: "ここにコードを入力したり張り付けたりしないでください。アカウントが不正利用される可能性があります。"
|
||||||
|
got-it: "わかった"
|
||||||
customization-tips:
|
customization-tips:
|
||||||
title: "カスタマイズのヒント"
|
title: "カスタマイズのヒント"
|
||||||
paragraph1: "ホームのカスタマイズでは、ウィジェットを追加/削除したり、ドラッグ&ドロップして並べ替えたりすることができます。"
|
paragraph1: "ホームのカスタマイズでは、ウィジェットを追加/削除したり、ドラッグ&ドロップして並べ替えたりすることができます。"
|
||||||
@ -13,7 +20,14 @@ common:
|
|||||||
paragraph3: "ウィジェットを削除するには、ヘッダーの<strong>「ゴミ箱」</strong>と書かれたエリアにウィジェットをドラッグ&ドロップします。"
|
paragraph3: "ウィジェットを削除するには、ヘッダーの<strong>「ゴミ箱」</strong>と書かれたエリアにウィジェットをドラッグ&ドロップします。"
|
||||||
paragraph4: "カスタマイズを終了するには、右上の「完了」をクリックします。"
|
paragraph4: "カスタマイズを終了するには、右上の「完了」をクリックします。"
|
||||||
gotit: "Got it!"
|
gotit: "Got it!"
|
||||||
name: "Misskey"
|
notification:
|
||||||
|
file-uploaded: "ファイルがアップロードされました"
|
||||||
|
message-from: "{}さんからメッセージ:"
|
||||||
|
reversi-invited: "対局への招待があります"
|
||||||
|
reversi-invited-by: "{}さんから"
|
||||||
|
notified-by: "{}さんから"
|
||||||
|
reply-from: "{}さんから返信:"
|
||||||
|
quoted-by: "{}さんが引用:"
|
||||||
time:
|
time:
|
||||||
unknown: "なぞのじかん"
|
unknown: "なぞのじかん"
|
||||||
future: "未来"
|
future: "未来"
|
||||||
@ -25,6 +39,7 @@ common:
|
|||||||
weeks_ago: "{}週間前"
|
weeks_ago: "{}週間前"
|
||||||
months_ago: "{}ヶ月前"
|
months_ago: "{}ヶ月前"
|
||||||
years_ago: "{}年前"
|
years_ago: "{}年前"
|
||||||
|
month-and-day: "{month}月 {day}日"
|
||||||
trash: "ゴミ箱"
|
trash: "ゴミ箱"
|
||||||
weekday-short:
|
weekday-short:
|
||||||
sunday: "日"
|
sunday: "日"
|
||||||
@ -69,6 +84,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: "あなたのターンです"
|
||||||
@ -121,7 +137,38 @@ common:
|
|||||||
rename: "名前を変更"
|
rename: "名前を変更"
|
||||||
stack-left: "左に重ねる"
|
stack-left: "左に重ねる"
|
||||||
pop-right: "右に出す"
|
pop-right: "右に出す"
|
||||||
|
auth/views/form.vue:
|
||||||
|
share-access: "<i>{{ app.name }}</i>があなたのアカウントにアクセスすることを<b>許可</b>しますか?"
|
||||||
|
permission-ask: "このアプリは次の権限を要求しています:"
|
||||||
|
account-read: "アカウントの情報を見る。"
|
||||||
|
account-write: "アカウントの情報を操作する。"
|
||||||
|
note-write: "投稿する。"
|
||||||
|
like-write: "いいねしたりいいね解除する。"
|
||||||
|
following-write: "フォローしたりフォロー解除する。"
|
||||||
|
drive-read: "ドライブを見る。"
|
||||||
|
drive-write: "ドライブを操作する。"
|
||||||
|
notification-read: "通知を見る。"
|
||||||
|
notification-write: "通知を操作する。"
|
||||||
|
cancel: "キャンセル"
|
||||||
|
accept: "アクセスを許可"
|
||||||
|
auth/views/index.vue:
|
||||||
|
loading: "読み込み中"
|
||||||
|
denied: "アプリケーションの連携をキャンセルしました。"
|
||||||
|
denied-paragraph: "このアプリがあなたのアカウントにアクセスすることはありません。"
|
||||||
|
already-authorized: "このアプリは既に連携済みです"
|
||||||
|
allowed: "アプリケーションの連携を許可しました"
|
||||||
|
callback-url: "アプリケーションに戻っています"
|
||||||
|
please-go-back: "アプリケーションに戻って、やっていってください。"
|
||||||
|
error: "セッションが存在しません。"
|
||||||
|
sign-in: "サインインしてください"
|
||||||
common/views/components/games/reversi/reversi.vue:
|
common/views/components/games/reversi/reversi.vue:
|
||||||
|
matching:
|
||||||
|
waiting-for: "{}を待っています"
|
||||||
|
cancel: "キャンセル"
|
||||||
|
common/views/components/games/reversi/reversi.game.vue:
|
||||||
|
surrender: "投了"
|
||||||
|
surrendered: "投了により"
|
||||||
|
common/views/components/games/reversi/reversi.index.vue:
|
||||||
title: "Misskey Reversi"
|
title: "Misskey Reversi"
|
||||||
sub-title: "他のMisskeyユーザーとリバーシで対戦しよう"
|
sub-title: "他のMisskeyユーザーとリバーシで対戦しよう"
|
||||||
invite: "招待"
|
invite: "招待"
|
||||||
@ -136,9 +183,6 @@ common/views/components/games/reversi/reversi.vue:
|
|||||||
game-state:
|
game-state:
|
||||||
ended: "終了"
|
ended: "終了"
|
||||||
playing: "進行中"
|
playing: "進行中"
|
||||||
matching:
|
|
||||||
waiting-for: "{}を待っています"
|
|
||||||
cacnel: "キャンセル"
|
|
||||||
common/views/components/games/reversi/reversi.room.vue:
|
common/views/components/games/reversi/reversi.room.vue:
|
||||||
settings-of-the-game: "ゲームの設定"
|
settings-of-the-game: "ゲームの設定"
|
||||||
choose-map: "マップを選択"
|
choose-map: "マップを選択"
|
||||||
@ -150,7 +194,7 @@ common/views/components/games/reversi/reversi.room.vue:
|
|||||||
looped-map: "ループマップ"
|
looped-map: "ループマップ"
|
||||||
can-put-everywhere: "どこでも置けるモード"
|
can-put-everywhere: "どこでも置けるモード"
|
||||||
settings-of-the-bot: "Botの設定"
|
settings-of-the-bot: "Botの設定"
|
||||||
this-gane-is-started-soon: "ゲームは数秒後に開始されます"
|
this-game-is-started-soon: "ゲームは数秒後に開始されます"
|
||||||
waiting-for-other: "相手の準備が完了するのを待っています"
|
waiting-for-other: "相手の準備が完了するのを待っています"
|
||||||
waiting-for-me: "あなたの準備が完了するのを待っています"
|
waiting-for-me: "あなたの準備が完了するのを待っています"
|
||||||
waiting-for-both: "準備中"
|
waiting-for-both: "準備中"
|
||||||
@ -191,11 +235,13 @@ 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: "既読"
|
||||||
deleted: "このメッセージは削除されました"
|
deleted: "このメッセージは削除されました"
|
||||||
@ -235,6 +281,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: "確認しています..."
|
||||||
@ -344,6 +392,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"
|
||||||
@ -478,6 +537,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: "読み込みに失敗しました。"
|
||||||
retry: "リトライ"
|
retry: "リトライ"
|
||||||
@ -513,6 +574,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: "新規投稿"
|
||||||
reply: "返信"
|
reply: "返信"
|
||||||
@ -674,6 +736,7 @@ desktop/views/components/timeline.vue:
|
|||||||
list: "リスト"
|
list: "リスト"
|
||||||
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: "プロフィール"
|
||||||
drive: "ドライブ"
|
drive: "ドライブ"
|
||||||
@ -702,6 +765,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: "フォロー"
|
||||||
@ -751,8 +815,7 @@ desktop/views/pages/search.vue:
|
|||||||
not-available: "検索機能を利用することができません。"
|
not-available: "検索機能を利用することができません。"
|
||||||
not-found: "「{}」に関する投稿は見つかりませんでした。"
|
not-found: "「{}」に関する投稿は見つかりませんでした。"
|
||||||
desktop/views/pages/share.vue:
|
desktop/views/pages/share.vue:
|
||||||
share-with: "Misskeyで共有"
|
share-with: "{}で共有"
|
||||||
close: "閉じる"
|
|
||||||
desktop/views/pages/tag.vue:
|
desktop/views/pages/tag.vue:
|
||||||
no-posts-found: "ハッシュタグ「{}」が付けられた投稿は見つかりませんでした。"
|
no-posts-found: "ハッシュタグ「{}」が付けられた投稿は見つかりませんでした。"
|
||||||
desktop/views/pages/user-list.users.vue:
|
desktop/views/pages/user-list.users.vue:
|
||||||
@ -785,6 +848,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: "フォロー"
|
||||||
@ -912,6 +977,7 @@ mobile/views/components/timeline.vue:
|
|||||||
load-more: "もっと"
|
load-more: "もっと"
|
||||||
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: "タイムライン"
|
||||||
notifications: "通知"
|
notifications: "通知"
|
||||||
@ -959,8 +1025,13 @@ mobile/views/pages/welcome.vue:
|
|||||||
signup: "新規登録"
|
signup: "新規登録"
|
||||||
mobile/views/pages/widgets.vue:
|
mobile/views/pages/widgets.vue:
|
||||||
dashboard: "ダッシュボード"
|
dashboard: "ダッシュボード"
|
||||||
|
widgets-hints: "ウィジェットを追加/削除したり並べ替えたりできます。ウィジェットを移動するには「三」をドラッグします。ウィジェットを削除するには「x」をタップします。いくつかのウィジェットはタップすることで表示を変更できます。"
|
||||||
|
add-widget: "追加"
|
||||||
|
customization-tips: "カスタマイズのヒント"
|
||||||
mobile/views/pages/widgets/activity.vue:
|
mobile/views/pages/widgets/activity.vue:
|
||||||
activity: "アクティビティ"
|
activity: "アクティビティ"
|
||||||
|
mobile/views/pages/share.vue:
|
||||||
|
share-with: "{}で共有"
|
||||||
mobile/views/pages/messaging.vue:
|
mobile/views/pages/messaging.vue:
|
||||||
messaging: "メッセージ"
|
messaging: "メッセージ"
|
||||||
mobile/views/pages/messaging-room.vue:
|
mobile/views/pages/messaging-room.vue:
|
||||||
@ -976,7 +1047,7 @@ mobile/views/pages/note.vue:
|
|||||||
mobile/views/pages/notifications.vue:
|
mobile/views/pages/notifications.vue:
|
||||||
notifications: "通知"
|
notifications: "通知"
|
||||||
read-all: "すべての通知を既読にしますか?"
|
read-all: "すべての通知を既読にしますか?"
|
||||||
mobile/views/pages/reversi.vue:
|
mobile/views/pages/games/reversi.vue:
|
||||||
reversi: "リバーシ"
|
reversi: "リバーシ"
|
||||||
mobile/views/pages/settings/settings.profile.vue:
|
mobile/views/pages/settings/settings.profile.vue:
|
||||||
title: "プロフィール"
|
title: "プロフィール"
|
||||||
@ -995,6 +1066,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: "ファイルを選択"
|
||||||
mobile/views/pages/settings.vue:
|
mobile/views/pages/settings.vue:
|
||||||
@ -1089,3 +1161,5 @@ docs:
|
|||||||
name: "名前"
|
name: "名前"
|
||||||
type: "型"
|
type: "型"
|
||||||
description: "説明"
|
description: "説明"
|
||||||
|
dev/views/index.vue:
|
||||||
|
manage-apps: "アプリの管理"
|
||||||
|
25
package.json
25
package.json
@ -1,8 +1,8 @@
|
|||||||
{
|
{
|
||||||
"name": "misskey",
|
"name": "misskey",
|
||||||
"author": "syuilo <i@syuilo.com>",
|
"author": "syuilo <i@syuilo.com>",
|
||||||
"version": "5.10.0",
|
"version": "5.20.0",
|
||||||
"clientVersion": "1.0.7828",
|
"clientVersion": "1.0.8099",
|
||||||
"codename": "nighthike",
|
"codename": "nighthike",
|
||||||
"main": "./built/index.js",
|
"main": "./built/index.js",
|
||||||
"private": true,
|
"private": true,
|
||||||
@ -43,7 +43,6 @@
|
|||||||
"@types/is-root": "1.0.0",
|
"@types/is-root": "1.0.0",
|
||||||
"@types/is-url": "1.2.28",
|
"@types/is-url": "1.2.28",
|
||||||
"@types/js-yaml": "3.11.2",
|
"@types/js-yaml": "3.11.2",
|
||||||
"@types/jsdom": "11.0.6",
|
|
||||||
"@types/koa": "2.0.46",
|
"@types/koa": "2.0.46",
|
||||||
"@types/koa-bodyparser": "5.0.1",
|
"@types/koa-bodyparser": "5.0.1",
|
||||||
"@types/koa-compress": "2.0.8",
|
"@types/koa-compress": "2.0.8",
|
||||||
@ -58,10 +57,9 @@
|
|||||||
"@types/minio": "6.0.2",
|
"@types/minio": "6.0.2",
|
||||||
"@types/mkdirp": "0.5.2",
|
"@types/mkdirp": "0.5.2",
|
||||||
"@types/mocha": "5.2.3",
|
"@types/mocha": "5.2.3",
|
||||||
"@types/mongodb": "3.1.2",
|
"@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/parse5": "5.0.0",
|
|
||||||
"@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",
|
||||||
@ -78,7 +76,7 @@
|
|||||||
"@types/systeminformation": "3.23.0",
|
"@types/systeminformation": "3.23.0",
|
||||||
"@types/tmp": "0.0.33",
|
"@types/tmp": "0.0.33",
|
||||||
"@types/uuid": "3.4.3",
|
"@types/uuid": "3.4.3",
|
||||||
"@types/webpack": "4.4.8",
|
"@types/webpack": "4.4.9",
|
||||||
"@types/webpack-stream": "3.2.10",
|
"@types/webpack-stream": "3.2.10",
|
||||||
"@types/websocket": "0.0.39",
|
"@types/websocket": "0.0.39",
|
||||||
"@types/ws": "5.1.2",
|
"@types/ws": "5.1.2",
|
||||||
@ -90,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",
|
||||||
@ -185,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.4",
|
"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",
|
||||||
@ -197,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",
|
||||||
@ -206,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",
|
||||||
@ -215,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.3",
|
"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 = 'Misskey | アプリの連携';
|
document.title = `${config.name} | %i18n:common.application-authorization%`;
|
||||||
|
|
||||||
// Init router
|
// Init router
|
||||||
const router = new VueRouter({
|
const router = new VueRouter({
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="form">
|
<div class="form">
|
||||||
<header>
|
<header>
|
||||||
<h1><i>{{ app.name }}</i>があなたのアカウントにアクセスすることを<b>許可</b>しますか?</h1>
|
<h1>%i18n:@share-access%</h1>
|
||||||
<img :src="app.iconUrl"/>
|
<img :src="app.iconUrl"/>
|
||||||
</header>
|
</header>
|
||||||
<div class="app">
|
<div class="app">
|
||||||
@ -11,25 +11,25 @@
|
|||||||
<p class="description">{{ app.description }}</p>
|
<p class="description">{{ app.description }}</p>
|
||||||
</section>
|
</section>
|
||||||
<section>
|
<section>
|
||||||
<h2>このアプリは次の権限を要求しています:</h2>
|
<h2>%i18n:@permission-ask%</h2>
|
||||||
<ul>
|
<ul>
|
||||||
<template v-for="p in app.permission">
|
<template v-for="p in app.permission">
|
||||||
<li v-if="p == 'account-read'">アカウントの情報を見る。</li>
|
<li v-if="p == 'account-read'">%i18n:@account-read%</li>
|
||||||
<li v-if="p == 'account-write'">アカウントの情報を操作する。</li>
|
<li v-if="p == 'account-write'">%i18n:@account-write%</li>
|
||||||
<li v-if="p == 'note-write'">投稿する。</li>
|
<li v-if="p == 'note-write'">%i18n:@note-write%</li>
|
||||||
<li v-if="p == 'like-write'">いいねしたりいいね解除する。</li>
|
<li v-if="p == 'like-write'">%i18n:@like-write%</li>
|
||||||
<li v-if="p == 'following-write'">フォローしたりフォロー解除する。</li>
|
<li v-if="p == 'following-write'">%i18n:@following-write%</li>
|
||||||
<li v-if="p == 'drive-read'">ドライブを見る。</li>
|
<li v-if="p == 'drive-read'">%i18n:@drive-read%</li>
|
||||||
<li v-if="p == 'drive-write'">ドライブを操作する。</li>
|
<li v-if="p == 'drive-write'">%i18n:@drive-write%</li>
|
||||||
<li v-if="p == 'notification-read'">通知を見る。</li>
|
<li v-if="p == 'notification-read'">%i18n:@notification-read%</li>
|
||||||
<li v-if="p == 'notification-write'">通知を操作する。</li>
|
<li v-if="p == 'notification-write'">%i18n:@notification-write%</li>
|
||||||
</template>
|
</template>
|
||||||
</ul>
|
</ul>
|
||||||
</section>
|
</section>
|
||||||
</div>
|
</div>
|
||||||
<div class="action">
|
<div class="action">
|
||||||
<button @click="cancel">キャンセル</button>
|
<button @click="cancel">%i18n:@cancel%</button>
|
||||||
<button @click="accept">アクセスを許可</button>
|
<button @click="accept">%i18n:@accept%</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="index">
|
<div class="index">
|
||||||
<main v-if="$store.getters.isSignedIn">
|
<main v-if="$store.getters.isSignedIn">
|
||||||
<p class="fetching" v-if="fetching">読み込み中<mk-ellipsis/></p>
|
<p class="fetching" v-if="fetching">%i18n:@loading%<mk-ellipsis/></p>
|
||||||
<x-form
|
<x-form
|
||||||
class="form"
|
class="form"
|
||||||
ref="form"
|
ref="form"
|
||||||
@ -11,20 +11,20 @@
|
|||||||
@accepted="accepted"
|
@accepted="accepted"
|
||||||
/>
|
/>
|
||||||
<div class="denied" v-if="state == 'denied'">
|
<div class="denied" v-if="state == 'denied'">
|
||||||
<h1>アプリケーションの連携をキャンセルしました。</h1>
|
<h1>%i18n:@denied%</h1>
|
||||||
<p>このアプリがあなたのアカウントにアクセスすることはありません。</p>
|
<p>%i18n:@denied-paragraph%</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="accepted" v-if="state == 'accepted'">
|
<div class="accepted" v-if="state == 'accepted'">
|
||||||
<h1>{{ session.app.isAuthorized ? 'このアプリは既に連携済みです' : 'アプリケーションの連携を許可しました' }}</h1>
|
<h1>{{ session.app.isAuthorized ? '%i18n:@already-authorized%' : '%i18n:@allowed%' }}</h1>
|
||||||
<p v-if="session.app.callbackUrl">アプリケーションに戻っています<mk-ellipsis/></p>
|
<p v-if="session.app.callbackUrl">%i18n:@callback-url%<mk-ellipsis/></p>
|
||||||
<p v-if="!session.app.callbackUrl">アプリケーションに戻って、やっていってください。</p>
|
<p v-if="!session.app.callbackUrl">%i18n:@please-go-back%</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="error" v-if="state == 'fetch-session-error'">
|
<div class="error" v-if="state == 'fetch-session-error'">
|
||||||
<p>セッションが存在しません。</p>
|
<p>%i18n:@error%</p>
|
||||||
</div>
|
</div>
|
||||||
</main>
|
</main>
|
||||||
<main class="signin" v-if="!$store.getters.isSignedIn">
|
<main class="signin" v-if="!$store.getters.isSignedIn">
|
||||||
<h1>サインインしてください</h1>
|
<h1>%i18n:@sign-in%</h1>
|
||||||
<mk-signin/>
|
<mk-signin/>
|
||||||
</main>
|
</main>
|
||||||
<footer><img src="/assets/auth/icon.svg" alt="Misskey"/></footer>
|
<footer><img src="/assets/auth/icon.svg" alt="Misskey"/></footer>
|
||||||
|
@ -15,22 +15,22 @@ export default function(type, data): Notification {
|
|||||||
switch (type) {
|
switch (type) {
|
||||||
case 'drive_file_created':
|
case 'drive_file_created':
|
||||||
return {
|
return {
|
||||||
title: 'ファイルがアップロードされました',
|
title: '%i18n:common.notification.file-uploaded%',
|
||||||
body: data.name,
|
body: data.name,
|
||||||
icon: data.url
|
icon: data.url
|
||||||
};
|
};
|
||||||
|
|
||||||
case 'unread_messaging_message':
|
case 'unread_messaging_message':
|
||||||
return {
|
return {
|
||||||
title: `${getUserName(data.user)}さんからメッセージ:`,
|
title: '%i18n:common.notification.message-from%'.split("{}")[0] + `${getUserName(data.user)}` + '%i18n:common.notification.message-from%'.split("{}")[1] ,
|
||||||
body: data.text, // TODO: getMessagingMessageSummary(data),
|
body: data.text, // TODO: getMessagingMessageSummary(data),
|
||||||
icon: data.user.avatarUrl
|
icon: data.user.avatarUrl
|
||||||
};
|
};
|
||||||
|
|
||||||
case 'reversi_invited':
|
case 'reversi_invited':
|
||||||
return {
|
return {
|
||||||
title: '対局への招待があります',
|
title: '%i18n:common.notification.reversi-invited%',
|
||||||
body: `${getUserName(data.parent)}さんから`,
|
body: '%i18n:common.notification.reversi-invited-by%'.split("{}")[0] + `${getUserName(data.parent)}` + '%i18n:common.notification.reversi-invited-by%'.split("{}")[1],
|
||||||
icon: data.parent.avatarUrl
|
icon: data.parent.avatarUrl
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -38,21 +38,21 @@ export default function(type, data): Notification {
|
|||||||
switch (data.type) {
|
switch (data.type) {
|
||||||
case 'mention':
|
case 'mention':
|
||||||
return {
|
return {
|
||||||
title: `${getUserName(data.user)}さんから:`,
|
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
|
||||||
};
|
};
|
||||||
|
|
||||||
case 'reply':
|
case 'reply':
|
||||||
return {
|
return {
|
||||||
title: `${getUserName(data.user)}さんから返信:`,
|
title: '%i18n:common.notification.reply-from%'.split("{}")[0] + `${getUserName(data.user)}` + '%i18n:common.notification.reply-from%'.split("{}")[1],
|
||||||
body: getNoteSummary(data),
|
body: getNoteSummary(data),
|
||||||
icon: data.user.avatarUrl
|
icon: data.user.avatarUrl
|
||||||
};
|
};
|
||||||
|
|
||||||
case 'quote':
|
case 'quote':
|
||||||
return {
|
return {
|
||||||
title: `${getUserName(data.user)}さんが引用:`,
|
title: '%i18n:common.notification.quoted-by%'.split("{}")[0] + `${getUserName(data.user)}` + '%i18n:common.notification.quoted-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() + '年' +
|
|
||||||
(date.getMonth() + 1) + '月' +
|
|
||||||
date.getDate() + '日' +
|
|
||||||
' ' +
|
|
||||||
date.getHours() + '時' +
|
|
||||||
date.getMinutes() + '分' +
|
|
||||||
' ' +
|
|
||||||
`(${['日', '月', '火', '水', '木', '金', '土'][date.getDay()]})`
|
|
||||||
);
|
|
||||||
};
|
|
@ -5,8 +5,8 @@ declare const fuckAdBlock: any;
|
|||||||
export default (os) => {
|
export default (os) => {
|
||||||
function adBlockDetected() {
|
function adBlockDetected() {
|
||||||
os.apis.dialog({
|
os.apis.dialog({
|
||||||
title: '%fa:exclamation-triangle%広告ブロッカーを無効にしてください',
|
title: '%fa:exclamation-triangle%%i18n:common.adblock.detected%',
|
||||||
text: '<strong>Misskeyは広告を掲載していません</strong>が、広告をブロックする機能が有効だと一部の機能が利用できなかったり、不具合が発生する場合があります。',
|
text: '%i18n:common.adblock.warning%',
|
||||||
actins: [{
|
actins: [{
|
||||||
text: 'OK'
|
text: 'OK'
|
||||||
}]
|
}]
|
||||||
|
@ -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="root">
|
<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('{}', turnUser | userName) }}<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('{}', turnUser | userName) }}</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('{}', game.winner | userName) }}{{ 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');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@ -258,12 +302,23 @@ export default Vue.extend({
|
|||||||
<style lang="stylus" scoped>
|
<style lang="stylus" scoped>
|
||||||
@import '~const.styl'
|
@import '~const.styl'
|
||||||
|
|
||||||
.root
|
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 #c4cdd4
|
border-bottom dashed 1px isDark ? #4c5761 : #c4cdd4
|
||||||
|
|
||||||
|
a
|
||||||
|
color inherit
|
||||||
|
|
||||||
> .board
|
> .board
|
||||||
width calc(100% - 16px)
|
width calc(100% - 16px)
|
||||||
@ -327,16 +382,16 @@ export default Vue.extend({
|
|||||||
user-select none
|
user-select none
|
||||||
|
|
||||||
&.empty
|
&.empty
|
||||||
border solid 2px #eee
|
border solid 2px isDark ? #51595f : #eee
|
||||||
|
|
||||||
&.empty.can
|
&.empty.can
|
||||||
background #eee
|
background isDark ? #51595f : #eee
|
||||||
|
|
||||||
&.empty.myTurn
|
&.empty.myTurn
|
||||||
border-color #ddd
|
border-color isDark ? #6a767f : #ddd
|
||||||
|
|
||||||
&.can
|
&.can
|
||||||
background #eee
|
background isDark ? #51595f : #eee
|
||||||
cursor pointer
|
cursor pointer
|
||||||
|
|
||||||
&:hover
|
&:hover
|
||||||
@ -350,7 +405,7 @@ export default Vue.extend({
|
|||||||
box-shadow 0 0 0 4px rgba($theme-color, 0.7)
|
box-shadow 0 0 0 4px rgba($theme-color, 0.7)
|
||||||
|
|
||||||
&.isEnded
|
&.isEnded
|
||||||
border-color #ddd
|
border-color isDark ? #6a767f : #ddd
|
||||||
|
|
||||||
&.none
|
&.none
|
||||||
border-color transparent !important
|
border-color transparent !important
|
||||||
@ -381,6 +436,9 @@ export default Vue.extend({
|
|||||||
margin 0
|
margin 0
|
||||||
padding 16px 0
|
padding 16px 0
|
||||||
|
|
||||||
|
> .actions
|
||||||
|
padding-bottom 16px
|
||||||
|
|
||||||
> .player
|
> .player
|
||||||
padding-bottom 32px
|
padding-bottom 32px
|
||||||
|
|
||||||
@ -388,4 +446,11 @@ export default Vue.extend({
|
|||||||
display inline-block
|
display inline-block
|
||||||
margin 0 8px
|
margin 0 8px
|
||||||
min-width 70px
|
min-width 70px
|
||||||
|
|
||||||
|
.xqnhankfuuilcwvhgsopeqncafzsquya[data-darkmode]
|
||||||
|
root(true)
|
||||||
|
|
||||||
|
.xqnhankfuuilcwvhgsopeqncafzsquya:not([data-darkmode])
|
||||||
|
root(false)
|
||||||
|
|
||||||
</style>
|
</style>
|
||||||
|
@ -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');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -0,0 +1,254 @@
|
|||||||
|
<template>
|
||||||
|
<div class="phgnkghfpyvkrvwiajkiuoxyrdaqpzcx">
|
||||||
|
<h1>%i18n:@title%</h1>
|
||||||
|
<p>%i18n:@sub-title%</p>
|
||||||
|
<div class="play">
|
||||||
|
<!--<el-button round>フリーマッチ(準備中)</el-button>-->
|
||||||
|
<form-button primary round @click="match">%i18n:@invite%</form-button>
|
||||||
|
<details>
|
||||||
|
<summary>%i18n:@rule%</summary>
|
||||||
|
<div>
|
||||||
|
<p>%i18n:@rule-desc%</p>
|
||||||
|
<dl>
|
||||||
|
<dt><b>%i18n:@mode-invite%</b></dt>
|
||||||
|
<dd>%i18n:@mode-invite-desc%</dd>
|
||||||
|
</dl>
|
||||||
|
</div>
|
||||||
|
</details>
|
||||||
|
</div>
|
||||||
|
<section v-if="invitations.length > 0">
|
||||||
|
<h2>%i18n:@invitations%</h2>
|
||||||
|
<div class="invitation" v-for="i in invitations" tabindex="-1" @click="accept(i)">
|
||||||
|
<mk-avatar class="avatar" :user="i.parent"/>
|
||||||
|
<span class="name"><b>{{ i.parent | userName }}</b></span>
|
||||||
|
<span class="username">@{{ i.parent.username }}</span>
|
||||||
|
<mk-time :time="i.createdAt"/>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
<section v-if="myGames.length > 0">
|
||||||
|
<h2>%i18n:@my-games%</h2>
|
||||||
|
<a class="game" v-for="g in myGames" tabindex="-1" @click.prevent="go(g)" :href="`/reversi/${g.id}`">
|
||||||
|
<mk-avatar class="avatar" :user="g.user1"/>
|
||||||
|
<mk-avatar class="avatar" :user="g.user2"/>
|
||||||
|
<span><b>{{ g.user1 | userName }}</b> vs <b>{{ g.user2 | userName }}</b></span>
|
||||||
|
<span class="state">{{ g.isEnded ? '%i18n:@game-state.ended%' : '%i18n:@game-state.playing%' }}</span>
|
||||||
|
</a>
|
||||||
|
</section>
|
||||||
|
<section v-if="games.length > 0">
|
||||||
|
<h2>%i18n:@all-games%</h2>
|
||||||
|
<a class="game" v-for="g in games" tabindex="-1" @click.prevent="go(g)" :href="`/reversi/${g.id}`">
|
||||||
|
<mk-avatar class="avatar" :user="g.user1"/>
|
||||||
|
<mk-avatar class="avatar" :user="g.user2"/>
|
||||||
|
<span><b>{{ g.user1 | userName }}</b> vs <b>{{ g.user2 | userName }}</b></span>
|
||||||
|
<span class="state">{{ g.isEnded ? '%i18n:@game-state.ended%' : '%i18n:@game-state.playing%' }}</span>
|
||||||
|
</a>
|
||||||
|
</section>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script lang="ts">
|
||||||
|
import Vue from 'vue';
|
||||||
|
|
||||||
|
export default Vue.extend({
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
games: [],
|
||||||
|
gamesFetching: true,
|
||||||
|
gamesMoreFetching: false,
|
||||||
|
myGames: [],
|
||||||
|
matching: null,
|
||||||
|
invitations: [],
|
||||||
|
connection: null,
|
||||||
|
connectionId: null
|
||||||
|
};
|
||||||
|
},
|
||||||
|
|
||||||
|
mounted() {
|
||||||
|
if (this.$store.getters.isSignedIn) {
|
||||||
|
this.connection = (this as any).os.streams.reversiStream.getConnection();
|
||||||
|
this.connectionId = (this as any).os.streams.reversiStream.use();
|
||||||
|
|
||||||
|
this.connection.on('invited', this.onInvited);
|
||||||
|
|
||||||
|
(this as any).api('games/reversi/games', {
|
||||||
|
my: true
|
||||||
|
}).then(games => {
|
||||||
|
this.myGames = games;
|
||||||
|
});
|
||||||
|
|
||||||
|
(this as any).api('games/reversi/invitations').then(invitations => {
|
||||||
|
this.invitations = this.invitations.concat(invitations);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
(this as any).api('games/reversi/games').then(games => {
|
||||||
|
this.games = games;
|
||||||
|
this.gamesFetching = false;
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
|
beforeDestroy() {
|
||||||
|
if (this.connection) {
|
||||||
|
this.connection.off('invited', this.onInvited);
|
||||||
|
(this as any).os.streams.reversiStream.dispose(this.connectionId);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
methods: {
|
||||||
|
go(game) {
|
||||||
|
this.$emit('go', game);
|
||||||
|
},
|
||||||
|
|
||||||
|
match() {
|
||||||
|
(this as any).apis.input({
|
||||||
|
title: '%i18n:@enter-username%'
|
||||||
|
}).then(username => {
|
||||||
|
(this as any).api('users/show', {
|
||||||
|
username
|
||||||
|
}).then(user => {
|
||||||
|
(this as any).api('games/reversi/match', {
|
||||||
|
userId: user.id
|
||||||
|
}).then(res => {
|
||||||
|
if (res == null) {
|
||||||
|
this.$emit('matching', user);
|
||||||
|
} else {
|
||||||
|
this.$emit('go', res);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
|
accept(invitation) {
|
||||||
|
(this as any).api('games/reversi/match', {
|
||||||
|
userId: invitation.parent.id
|
||||||
|
}).then(game => {
|
||||||
|
if (game) {
|
||||||
|
this.$emit('go', game);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
|
onInvited(invite) {
|
||||||
|
this.invitations.unshift(invite);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="stylus" scoped>
|
||||||
|
@import '~const.styl'
|
||||||
|
|
||||||
|
root(isDark)
|
||||||
|
> h1
|
||||||
|
margin 0
|
||||||
|
padding 24px
|
||||||
|
font-size 24px
|
||||||
|
text-align center
|
||||||
|
font-weight normal
|
||||||
|
color #fff
|
||||||
|
background linear-gradient(to bottom, isDark ? #45730e : #8bca3e, isDark ? #464300 : #d6cf31)
|
||||||
|
|
||||||
|
& + p
|
||||||
|
margin 0
|
||||||
|
padding 12px
|
||||||
|
margin-bottom 12px
|
||||||
|
text-align center
|
||||||
|
font-size 14px
|
||||||
|
border-bottom solid 1px isDark ? #535f65 : #d3d9dc
|
||||||
|
|
||||||
|
> .play
|
||||||
|
margin 0 auto
|
||||||
|
padding 0 16px
|
||||||
|
max-width 500px
|
||||||
|
text-align center
|
||||||
|
|
||||||
|
> details
|
||||||
|
margin 8px 0
|
||||||
|
|
||||||
|
> div
|
||||||
|
padding 16px
|
||||||
|
font-size 14px
|
||||||
|
text-align left
|
||||||
|
background isDark ? #282c37 : #f5f5f5
|
||||||
|
border-radius 8px
|
||||||
|
|
||||||
|
> section
|
||||||
|
margin 0 auto
|
||||||
|
padding 0 16px 16px 16px
|
||||||
|
max-width 500px
|
||||||
|
border-top solid 1px isDark ? #535f65 : #d3d9dc
|
||||||
|
|
||||||
|
> h2
|
||||||
|
margin 0
|
||||||
|
padding 16px 0 8px 0
|
||||||
|
font-size 16px
|
||||||
|
font-weight bold
|
||||||
|
|
||||||
|
.invitation
|
||||||
|
margin 8px 0
|
||||||
|
padding 8px
|
||||||
|
color isDark ? #fff : #677f84
|
||||||
|
background isDark ? #282c37 : #fff
|
||||||
|
box-shadow 0 2px 16px rgba(#000, isDark ? 0.7 : 0.15)
|
||||||
|
border-radius 6px
|
||||||
|
cursor pointer
|
||||||
|
|
||||||
|
*
|
||||||
|
pointer-events none
|
||||||
|
user-select none
|
||||||
|
|
||||||
|
&:focus
|
||||||
|
border-color $theme-color
|
||||||
|
|
||||||
|
&:hover
|
||||||
|
background isDark ? #313543 : #f5f5f5
|
||||||
|
|
||||||
|
&:active
|
||||||
|
background isDark ? #1e222b : #eee
|
||||||
|
|
||||||
|
> .avatar
|
||||||
|
width 32px
|
||||||
|
height 32px
|
||||||
|
border-radius 100%
|
||||||
|
|
||||||
|
> span
|
||||||
|
margin 0 8px
|
||||||
|
line-height 32px
|
||||||
|
|
||||||
|
.game
|
||||||
|
display block
|
||||||
|
margin 8px 0
|
||||||
|
padding 8px
|
||||||
|
color isDark ? #fff : #677f84
|
||||||
|
background isDark ? #282c37 : #fff
|
||||||
|
box-shadow 0 2px 16px rgba(#000, isDark ? 0.7 : 0.15)
|
||||||
|
border-radius 6px
|
||||||
|
cursor pointer
|
||||||
|
|
||||||
|
*
|
||||||
|
pointer-events none
|
||||||
|
user-select none
|
||||||
|
|
||||||
|
&:hover
|
||||||
|
background isDark ? #313543 : #f5f5f5
|
||||||
|
|
||||||
|
&:active
|
||||||
|
background isDark ? #1e222b : #eee
|
||||||
|
|
||||||
|
> .avatar
|
||||||
|
width 32px
|
||||||
|
height 32px
|
||||||
|
border-radius 100%
|
||||||
|
|
||||||
|
> span
|
||||||
|
margin 0 8px
|
||||||
|
line-height 32px
|
||||||
|
|
||||||
|
.phgnkghfpyvkrvwiajkiuoxyrdaqpzcx[data-darkmode]
|
||||||
|
root(true)
|
||||||
|
|
||||||
|
.phgnkghfpyvkrvwiajkiuoxyrdaqpzcx:not([data-darkmode])
|
||||||
|
root(false)
|
||||||
|
|
||||||
|
</style>
|
@ -1,92 +1,118 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="root">
|
<div class="urbixznjwwuukfsckrwzwsqzsxornqij">
|
||||||
<header><b>{{ game.user1 | userName }}</b> vs <b>{{ game.user2 | userName }}</b></header>
|
<header><b>{{ game.user1 | userName }}</b> vs <b>{{ game.user2 | userName }}</b></header>
|
||||||
|
|
||||||
<div>
|
<div>
|
||||||
<p>%i18n:@settings-of-the-game%</p>
|
<p>%i18n:@settings-of-the-game%</p>
|
||||||
|
|
||||||
<el-card class="map">
|
<div class="card map">
|
||||||
<div slot="header">
|
<header>
|
||||||
<el-select :class="$style.mapSelect" v-model="mapName" placeholder="%i18n:@choose-map%" @change="onMapChange">
|
<select v-model="mapName" placeholder="%i18n:@choose-map%" @change="onMapChange">
|
||||||
<el-option label="%i18n:@random%" :value="null"/>
|
<option label="-Custom-" :value="mapName" v-if="mapName == '-Custom-'"/>
|
||||||
<el-option-group v-for="c in mapCategories" :key="c" :label="c">
|
<option label="%i18n:@random%" :value="null"/>
|
||||||
<el-option v-for="m in maps" v-if="m.category == c" :key="m.name" :label="m.name" :value="m.name">
|
<optgroup v-for="c in mapCategories" :key="c" :label="c">
|
||||||
<span style="float: left">{{ m.name }}</span>
|
<option v-for="m in maps" v-if="m.category == c" :key="m.name" :label="m.name" :value="m.name">{{ m.name }}</option>
|
||||||
<span style="float: right; color: #8492a6; font-size: 13px" v-if="m.author">(by <i>{{ m.author }}</i>)</span>
|
</optgroup>
|
||||||
</el-option>
|
</select>
|
||||||
</el-option-group>
|
</header>
|
||||||
</el-select>
|
|
||||||
</div>
|
<div>
|
||||||
<div :class="$style.board" v-if="game.settings.map != null" :style="{ 'grid-template-rows': `repeat(${ game.settings.map.length }, 1fr)`, 'grid-template-columns': `repeat(${ game.settings.map[0].length }, 1fr)` }">
|
<div class="random" v-if="game.settings.map == null">%fa:dice%</div>
|
||||||
|
<div class="board" v-else :style="{ 'grid-template-rows': `repeat(${ game.settings.map.length }, 1fr)`, 'grid-template-columns': `repeat(${ game.settings.map[0].length }, 1fr)` }">
|
||||||
<div v-for="(x, i) in game.settings.map.join('')"
|
<div v-for="(x, i) in game.settings.map.join('')"
|
||||||
:data-none="x == ' '"
|
:data-none="x == ' '"
|
||||||
@click="onPixelClick(i, x)"
|
@click="onPixelClick(i, x)">
|
||||||
>
|
<template v-if="x == 'b'"><template v-if="$store.state.device.darkmode">%fa:circle R%</template><template v-else>%fa:circle%</template></template>
|
||||||
<template v-if="x == 'b'">%fa:circle%</template>
|
<template v-if="x == 'w'"><template v-if="$store.state.device.darkmode">%fa:circle%</template><template v-else>%fa:circle R%</template></template>
|
||||||
<template v-if="x == 'w'">%fa:circle R%</template>
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</el-card>
|
|
||||||
|
|
||||||
<el-card class="bw">
|
<div class="card">
|
||||||
<div slot="header">
|
<header>
|
||||||
<span>%i18n:@black-or-white%</span>
|
<span>%i18n:@black-or-white%</span>
|
||||||
</div>
|
</header>
|
||||||
<el-radio v-model="game.settings.bw" label="random" @change="updateSettings">%i18n:@random%</el-radio>
|
|
||||||
<el-radio v-model="game.settings.bw" :label="1" @change="updateSettings">{{ '%i18n:@black-is%'.split('{}')[0] }}{{ game.user1.name }}{{ '%i18n:@black-is%'.split('{}')[1] }}</el-radio>
|
|
||||||
<el-radio v-model="game.settings.bw" :label="2" @change="updateSettings">{{ '%i18n:@black-is%'.split('{}')[0] }}{{ game.user2.name }}{{ '%i18n:@black-is%'.split('{}')[1] }}</el-radio>
|
|
||||||
</el-card>
|
|
||||||
|
|
||||||
<el-card class="rules">
|
<div>
|
||||||
<div slot="header">
|
<form-radio v-model="game.settings.bw" value="random" @change="updateSettings">%i18n:@random%</form-radio>
|
||||||
<span>%i18n:@rules%</span>
|
<form-radio v-model="game.settings.bw" :value="1" @change="updateSettings">{{ '%i18n:@black-is%'.split('{}')[0] }}<b>{{ game.user1 | userName }}</b>{{ '%i18n:@black-is%'.split('{}')[1] }}</form-radio>
|
||||||
|
<form-radio v-model="game.settings.bw" :value="2" @change="updateSettings">{{ '%i18n:@black-is%'.split('{}')[0] }}<b>{{ game.user2 | userName }}</b>{{ '%i18n:@black-is%'.split('{}')[1] }}</form-radio>
|
||||||
</div>
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="card">
|
||||||
|
<header>
|
||||||
|
<span>%i18n:@rules%</span>
|
||||||
|
</header>
|
||||||
|
|
||||||
|
<div>
|
||||||
<mk-switch v-model="game.settings.isLlotheo" @change="updateSettings" text="%i18n:@is-llotheo%"/>
|
<mk-switch v-model="game.settings.isLlotheo" @change="updateSettings" text="%i18n:@is-llotheo%"/>
|
||||||
<mk-switch v-model="game.settings.loopedBoard" @change="updateSettings" text="%i18n:@looped-map%"/>
|
<mk-switch v-model="game.settings.loopedBoard" @change="updateSettings" text="%i18n:@looped-map%"/>
|
||||||
<mk-switch v-model="game.settings.canPutEverywhere" @change="updateSettings" text="%i18n:@can-put-everywhere%"/>
|
<mk-switch v-model="game.settings.canPutEverywhere" @change="updateSettings" text="%i18n:@can-put-everywhere%"/>
|
||||||
</el-card>
|
|
||||||
|
|
||||||
<el-card class="bot-form" v-if="form">
|
|
||||||
<div slot="header">
|
|
||||||
<span>%i18n:@settings-of-the-bot%</span>
|
|
||||||
</div>
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="card form" v-if="form">
|
||||||
|
<header>
|
||||||
|
<span>%i18n:@settings-of-the-bot%</span>
|
||||||
|
</header>
|
||||||
|
|
||||||
|
<div>
|
||||||
<el-alert v-for="message in messages"
|
<el-alert v-for="message in messages"
|
||||||
:title="message.text"
|
:title="message.text"
|
||||||
:type="message.type"
|
:type="message.type"
|
||||||
:key="message.id"
|
:key="message.id"/>
|
||||||
/>
|
|
||||||
<template v-for="item in form">
|
<template v-for="item in form">
|
||||||
<mk-switch v-if="item.type == 'button'" v-model="item.value" :key="item.id" :text="item.label" @change="onChangeForm($event, item)">{{ item.desc || '' }}</mk-switch>
|
<mk-switch v-if="item.type == 'switch'" v-model="item.value" :key="item.id" :text="item.label" @change="onChangeForm(item)">{{ item.desc || '' }}</mk-switch>
|
||||||
|
|
||||||
<el-card v-if="item.type == 'radio'" :key="item.id">
|
<div class="card" v-if="item.type == 'radio'" :key="item.id">
|
||||||
<div slot="header">
|
<header>
|
||||||
<span>{{ item.label }}</span>
|
<span>{{ item.label }}</span>
|
||||||
</div>
|
</header>
|
||||||
<el-radio v-for="(r, i) in item.items" :key="item.id + ':' + i" v-model="item.value" :label="r.value" @change="onChangeForm($event, item)">{{ r.label }}</el-radio>
|
|
||||||
</el-card>
|
|
||||||
|
|
||||||
<el-card v-if="item.type == 'textbox'" :key="item.id">
|
<div>
|
||||||
<div slot="header">
|
<form-radio v-for="(r, i) in item.items" :key="item.id + ':' + i" v-model="item.value" :value="r.value" @change="onChangeForm(item)">{{ r.label }}</form-radio>
|
||||||
<span>{{ item.label }}</span>
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="card" v-if="item.type == 'slider'" :key="item.id">
|
||||||
|
<header>
|
||||||
|
<span>{{ item.label }}</span>
|
||||||
|
</header>
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<input type="range" :min="item.min" :max="item.max" :step="item.step || 1" v-model="item.value" @change="onChangeForm(item)"/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="card" v-if="item.type == 'textbox'" :key="item.id">
|
||||||
|
<header>
|
||||||
|
<span>{{ item.label }}</span>
|
||||||
|
</header>
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<el-input v-model="item.value" @change="onChangeForm(item)"/>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<el-input v-model="item.value" @change="onChangeForm($event, item)"/>
|
|
||||||
</el-card>
|
|
||||||
</template>
|
</template>
|
||||||
</el-card>
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<footer>
|
<footer>
|
||||||
<p class="status">
|
<p class="status">
|
||||||
<template v-if="isAccepted && isOpAccepted">%i18n:@this-gane-is-started-soon%<mk-ellipsis/></template>
|
<template v-if="isAccepted && isOpAccepted">%i18n:@this-game-is-started-soon%<mk-ellipsis/></template>
|
||||||
<template v-if="isAccepted && !isOpAccepted">%i18n:@waiting-for-other%<mk-ellipsis/></template>
|
<template v-if="isAccepted && !isOpAccepted">%i18n:@waiting-for-other%<mk-ellipsis/></template>
|
||||||
<template v-if="!isAccepted && isOpAccepted">%i18n:@waiting-for-me%</template>
|
<template v-if="!isAccepted && isOpAccepted">%i18n:@waiting-for-me%</template>
|
||||||
<template v-if="!isAccepted && !isOpAccepted">%i18n:@waiting-for-both%<mk-ellipsis/></template>
|
<template v-if="!isAccepted && !isOpAccepted">%i18n:@waiting-for-both%<mk-ellipsis/></template>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<div class="actions">
|
<div class="actions">
|
||||||
<el-button @click="exit">%i18n:@cancel%</el-button>
|
<form-button @click="exit">%i18n:@cancel%</form-button>
|
||||||
<el-button type="primary" @click="accept" v-if="!isAccepted">%i18n:@ready%</el-button>
|
<form-button primary @click="accept" v-if="!isAccepted">%i18n:@ready%</form-button>
|
||||||
<el-button type="primary" @click="cancel" v-if="isAccepted">%i18n:@cancel-ready%</el-button>
|
<form-button primary @click="cancel" v-if="isAccepted">%i18n:@cancel-ready%</form-button>
|
||||||
</div>
|
</div>
|
||||||
</footer>
|
</footer>
|
||||||
</div>
|
</div>
|
||||||
@ -194,19 +220,19 @@ export default Vue.extend({
|
|||||||
this.messages.unshift(x.message);
|
this.messages.unshift(x.message);
|
||||||
},
|
},
|
||||||
|
|
||||||
onChangeForm(v, item) {
|
onChangeForm(item) {
|
||||||
this.connection.send({
|
this.connection.send({
|
||||||
type: 'update-form',
|
type: 'update-form',
|
||||||
id: item.id,
|
id: item.id,
|
||||||
value: v
|
value: item.value
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
onMapChange(v) {
|
onMapChange() {
|
||||||
if (v == null) {
|
if (this.mapName == null) {
|
||||||
this.game.settings.map = null;
|
this.game.settings.map = null;
|
||||||
} else {
|
} else {
|
||||||
this.game.settings.map = Object.values(maps).find(x => x.name == v).data;
|
this.game.settings.map = Object.values(maps).find(x => x.name == this.mapName).data;
|
||||||
}
|
}
|
||||||
this.$forceUpdate();
|
this.$forceUpdate();
|
||||||
this.updateSettings();
|
this.updateSettings();
|
||||||
@ -233,9 +259,9 @@ export default Vue.extend({
|
|||||||
<style lang="stylus" scoped>
|
<style lang="stylus" scoped>
|
||||||
@import '~const.styl'
|
@import '~const.styl'
|
||||||
|
|
||||||
.root
|
root(isDark)
|
||||||
text-align center
|
text-align center
|
||||||
background #f9f9f9
|
background isDark ? #191b22 : #f9f9f9
|
||||||
|
|
||||||
> header
|
> header
|
||||||
padding 8px
|
padding 8px
|
||||||
@ -244,38 +270,48 @@ export default Vue.extend({
|
|||||||
> div
|
> div
|
||||||
padding 0 16px
|
padding 0 16px
|
||||||
|
|
||||||
> .map
|
> .card
|
||||||
> .bw
|
|
||||||
> .rules
|
|
||||||
> .bot-form
|
|
||||||
max-width 400px
|
|
||||||
margin 0 auto 16px auto
|
margin 0 auto 16px auto
|
||||||
|
|
||||||
> footer
|
&.map
|
||||||
position sticky
|
> header
|
||||||
bottom 0
|
> select
|
||||||
padding 16px
|
|
||||||
background rgba(255, 255, 255, 0.9)
|
|
||||||
border-top solid 1px #c4cdd4
|
|
||||||
|
|
||||||
> .status
|
|
||||||
margin 0 0 16px 0
|
|
||||||
</style>
|
|
||||||
|
|
||||||
<style lang="stylus" module>
|
|
||||||
.mapSelect
|
|
||||||
width 100%
|
width 100%
|
||||||
|
padding 12px 14px
|
||||||
|
background isDark ? #282C37 : #fff
|
||||||
|
border 1px solid isDark ? #6a707d : #dcdfe6
|
||||||
|
border-radius 4px
|
||||||
|
color isDark ? #fff : #606266
|
||||||
|
cursor pointer
|
||||||
|
transition border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1)
|
||||||
|
-webkit-appearance none
|
||||||
|
-moz-appearance none
|
||||||
|
appearance none
|
||||||
|
|
||||||
.board
|
&:hover
|
||||||
|
border-color isDark ? #a7aebd : #c0c4cc
|
||||||
|
|
||||||
|
&:focus
|
||||||
|
&:active
|
||||||
|
border-color $theme-color
|
||||||
|
|
||||||
|
> div
|
||||||
|
> .random
|
||||||
|
padding 32px 0
|
||||||
|
font-size 64px
|
||||||
|
color isDark ? #4e5961 : #d8d8d8
|
||||||
|
|
||||||
|
> .board
|
||||||
display grid
|
display grid
|
||||||
grid-gap 4px
|
grid-gap 4px
|
||||||
width 300px
|
width 300px
|
||||||
height 300px
|
height 300px
|
||||||
margin 0 auto
|
margin 0 auto
|
||||||
|
color isDark ? #fff : #444
|
||||||
|
|
||||||
> div
|
> div
|
||||||
background transparent
|
background transparent
|
||||||
border solid 2px #ddd
|
border solid 2px isDark ? #6a767f : #ddd
|
||||||
border-radius 6px
|
border-radius 6px
|
||||||
overflow hidden
|
overflow hidden
|
||||||
cursor pointer
|
cursor pointer
|
||||||
@ -289,9 +325,43 @@ export default Vue.extend({
|
|||||||
&[data-none]
|
&[data-none]
|
||||||
border-color transparent
|
border-color transparent
|
||||||
|
|
||||||
</style>
|
&.form
|
||||||
|
> div
|
||||||
|
> .card + .card
|
||||||
|
margin-top 16px
|
||||||
|
|
||||||
|
input[type='range']
|
||||||
|
width 100%
|
||||||
|
|
||||||
|
.card
|
||||||
|
max-width 400px
|
||||||
|
border-radius 4px
|
||||||
|
background isDark ? #282C37 : #fff
|
||||||
|
color isDark ? #fff : #303133
|
||||||
|
box-shadow 0 2px 12px 0 rgba(#000, isDark ? 0.7 : 0.1)
|
||||||
|
|
||||||
|
> header
|
||||||
|
padding 18px 20px
|
||||||
|
border-bottom 1px solid isDark ? #1c2023 : #ebeef5
|
||||||
|
|
||||||
|
> div
|
||||||
|
padding 20px
|
||||||
|
color isDark ? #fff : #606266
|
||||||
|
|
||||||
|
> footer
|
||||||
|
position sticky
|
||||||
|
bottom 0
|
||||||
|
padding 16px
|
||||||
|
background rgba(isDark ? #191b22 : #fff, 0.9)
|
||||||
|
border-top solid 1px isDark ? #606266 : #c4cdd4
|
||||||
|
|
||||||
|
> .status
|
||||||
|
margin 0 0 16px 0
|
||||||
|
|
||||||
|
.urbixznjwwuukfsckrwzwsqzsxornqij[data-darkmode]
|
||||||
|
root(true)
|
||||||
|
|
||||||
|
.urbixznjwwuukfsckrwzwsqzsxornqij:not([data-darkmode])
|
||||||
|
root(false)
|
||||||
|
|
||||||
<style lang="stylus">
|
|
||||||
.el-alert__content
|
|
||||||
position initial !important
|
|
||||||
</style>
|
</style>
|
||||||
|
@ -1,58 +1,19 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="mk-reversi">
|
<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>
|
||||||
<div class="cancel">
|
<div class="cancel">
|
||||||
<el-button round @click="cancel">%i18n:@matching.cancel%</el-button>
|
<form-button round @click="cancel">%i18n:@matching.cancel%</form-button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<div v-else-if="gameId">
|
||||||
|
...
|
||||||
|
</div>
|
||||||
<div class="index" v-else>
|
<div class="index" v-else>
|
||||||
<h1>%i18n:@title%</h1>
|
<x-index @go="nav" @matching="onMatching"/>
|
||||||
<p>%i18n:@sub-title%</p>
|
|
||||||
<div class="play">
|
|
||||||
<!--<el-button round>フリーマッチ(準備中)</el-button>-->
|
|
||||||
<el-button type="primary" round @click="match">%i18n:@invite%</el-button>
|
|
||||||
<details>
|
|
||||||
<summary>%i18n:@rule%</summary>
|
|
||||||
<div>
|
|
||||||
<p>%i18n:@rule-desc%</p>
|
|
||||||
<dl>
|
|
||||||
<dt><b>%i18n:@mode-invite%</b></dt>
|
|
||||||
<dd>%i18n:@mode-invite-desc%</dd>
|
|
||||||
</dl>
|
|
||||||
</div>
|
|
||||||
</details>
|
|
||||||
</div>
|
|
||||||
<section v-if="invitations.length > 0">
|
|
||||||
<h2>%i18n:@invitations%</h2>
|
|
||||||
<div class="invitation" v-for="i in invitations" tabindex="-1" @click="accept(i)">
|
|
||||||
<mk-avatar class="avatar" :user="i.parent"/>
|
|
||||||
<span class="name"><b>{{ i.parent | userName }}</b></span>
|
|
||||||
<span class="username">@{{ i.parent.username }}</span>
|
|
||||||
<mk-time :time="i.createdAt"/>
|
|
||||||
</div>
|
|
||||||
</section>
|
|
||||||
<section v-if="myGames.length > 0">
|
|
||||||
<h2>%i18n:@my-games%</h2>
|
|
||||||
<a class="game" v-for="g in myGames" tabindex="-1" @click.prevent="go(g)" :href="`/reversi/${g.id}`">
|
|
||||||
<mk-avatar class="avatar" :user="g.user1"/>
|
|
||||||
<mk-avatar class="avatar" :user="g.user2"/>
|
|
||||||
<span><b>{{ g.user1 | userName }}</b> vs <b>{{ g.user2 | userName }}</b></span>
|
|
||||||
<span class="state">{{ g.isEnded ? '%i18n:@game-state.ended%' : '%i18n:@game-state.playing%' }}</span>
|
|
||||||
</a>
|
|
||||||
</section>
|
|
||||||
<section v-if="games.length > 0">
|
|
||||||
<h2>%i18n:@all-games%</h2>
|
|
||||||
<a class="game" v-for="g in games" tabindex="-1" @click.prevent="go(g)" :href="`/reversi/${g.id}`">
|
|
||||||
<mk-avatar class="avatar" :user="g.user1"/>
|
|
||||||
<mk-avatar class="avatar" :user="g.user2"/>
|
|
||||||
<span><b>{{ g.user1 | userName }}</b> vs <b>{{ g.user2 | userName }}</b></span>
|
|
||||||
<span class="state">{{ g.isEnded ? '%i18n:@game-state.ended%' : '%i18n:@game-state.playing%' }}</span>
|
|
||||||
</a>
|
|
||||||
</section>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
@ -60,23 +21,31 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import Vue from 'vue';
|
import Vue from 'vue';
|
||||||
import XGameroom from './reversi.gameroom.vue';
|
import XGameroom from './reversi.gameroom.vue';
|
||||||
|
import XIndex from './reversi.index.vue';
|
||||||
|
import Progress from '../../../../scripts/loading';
|
||||||
|
|
||||||
export default Vue.extend({
|
export default Vue.extend({
|
||||||
components: {
|
components: {
|
||||||
XGameroom
|
XGameroom,
|
||||||
|
XIndex
|
||||||
},
|
},
|
||||||
|
|
||||||
props: ['initGame'],
|
props: {
|
||||||
|
gameId: {
|
||||||
|
type: String,
|
||||||
|
required: false
|
||||||
|
},
|
||||||
|
selfNav: {
|
||||||
|
type: Boolean,
|
||||||
|
require: false,
|
||||||
|
default: true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
game: null,
|
game: null,
|
||||||
games: [],
|
|
||||||
gamesFetching: true,
|
|
||||||
gamesMoreFetching: false,
|
|
||||||
myGames: [],
|
|
||||||
matching: null,
|
matching: null,
|
||||||
invitations: [],
|
|
||||||
connection: null,
|
connection: null,
|
||||||
connectionId: null,
|
connectionId: null,
|
||||||
pingClock: null
|
pingClock: null
|
||||||
@ -84,34 +53,23 @@ export default Vue.extend({
|
|||||||
},
|
},
|
||||||
|
|
||||||
watch: {
|
watch: {
|
||||||
game(g) {
|
game() {
|
||||||
this.$emit('gamed', g);
|
this.$emit('gamed', this.game);
|
||||||
}
|
|
||||||
},
|
},
|
||||||
|
|
||||||
created() {
|
gameId() {
|
||||||
if (this.initGame) {
|
this.fetch();
|
||||||
this.game = this.initGame;
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
mounted() {
|
mounted() {
|
||||||
|
this.fetch();
|
||||||
|
|
||||||
if (this.$store.getters.isSignedIn) {
|
if (this.$store.getters.isSignedIn) {
|
||||||
this.connection = (this as any).os.streams.reversiStream.getConnection();
|
this.connection = (this as any).os.streams.reversiStream.getConnection();
|
||||||
this.connectionId = (this as any).os.streams.reversiStream.use();
|
this.connectionId = (this as any).os.streams.reversiStream.use();
|
||||||
|
|
||||||
this.connection.on('matched', this.onMatched);
|
this.connection.on('matched', this.onMatched);
|
||||||
this.connection.on('invited', this.onInvited);
|
|
||||||
|
|
||||||
(this as any).api('games/reversi/games', {
|
|
||||||
my: true
|
|
||||||
}).then(games => {
|
|
||||||
this.myGames = games;
|
|
||||||
});
|
|
||||||
|
|
||||||
(this as any).api('games/reversi/invitations').then(invitations => {
|
|
||||||
this.invitations = this.invitations.concat(invitations);
|
|
||||||
});
|
|
||||||
|
|
||||||
this.pingClock = setInterval(() => {
|
this.pingClock = setInterval(() => {
|
||||||
if (this.matching) {
|
if (this.matching) {
|
||||||
@ -122,17 +80,11 @@ export default Vue.extend({
|
|||||||
}
|
}
|
||||||
}, 3000);
|
}, 3000);
|
||||||
}
|
}
|
||||||
|
|
||||||
(this as any).api('games/reversi/games').then(games => {
|
|
||||||
this.games = games;
|
|
||||||
this.gamesFetching = false;
|
|
||||||
});
|
|
||||||
},
|
},
|
||||||
|
|
||||||
beforeDestroy() {
|
beforeDestroy() {
|
||||||
if (this.connection) {
|
if (this.connection) {
|
||||||
this.connection.off('matched', this.onMatched);
|
this.connection.off('matched', this.onMatched);
|
||||||
this.connection.off('invited', this.onInvited);
|
|
||||||
(this as any).os.streams.reversiStream.dispose(this.connectionId);
|
(this as any).os.streams.reversiStream.dispose(this.connectionId);
|
||||||
|
|
||||||
clearInterval(this.pingClock);
|
clearInterval(this.pingClock);
|
||||||
@ -140,33 +92,37 @@ export default Vue.extend({
|
|||||||
},
|
},
|
||||||
|
|
||||||
methods: {
|
methods: {
|
||||||
go(game) {
|
fetch() {
|
||||||
|
if (this.gameId == null) {
|
||||||
|
this.game = null;
|
||||||
|
} else {
|
||||||
|
Progress.start();
|
||||||
(this as any).api('games/reversi/games/show', {
|
(this as any).api('games/reversi/games/show', {
|
||||||
gameId: game.id
|
gameId: this.gameId
|
||||||
}).then(game => {
|
}).then(game => {
|
||||||
this.matching = null;
|
|
||||||
this.game = game;
|
this.game = game;
|
||||||
|
Progress.done();
|
||||||
});
|
});
|
||||||
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
match() {
|
async nav(game, actualNav = true) {
|
||||||
(this as any).apis.input({
|
if (this.selfNav) {
|
||||||
title: '%i18n:@enter-username%'
|
// 受け取ったゲーム情報が省略されたものなら完全な情報を取得する
|
||||||
}).then(username => {
|
if (game != null && (game.settings == null || game.settings.map == null)) {
|
||||||
(this as any).api('users/show', {
|
game = await (this as any).api('games/reversi/games/show', {
|
||||||
username
|
gameId: game.id
|
||||||
}).then(user => {
|
});
|
||||||
(this as any).api('games/reversi/match', {
|
|
||||||
userId: user.id
|
|
||||||
}).then(res => {
|
|
||||||
if (res == null) {
|
|
||||||
this.matching = user;
|
|
||||||
} else {
|
|
||||||
this.game = res;
|
|
||||||
}
|
}
|
||||||
});
|
|
||||||
});
|
this.game = game;
|
||||||
});
|
} else {
|
||||||
|
this.$emit('nav', game, actualNav);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
onMatching(user) {
|
||||||
|
this.matching = user;
|
||||||
},
|
},
|
||||||
|
|
||||||
cancel() {
|
cancel() {
|
||||||
@ -180,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);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
@ -188,10 +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);
|
||||||
},
|
},
|
||||||
|
|
||||||
onInvited(invite) {
|
goIndex() {
|
||||||
this.invitations.unshift(invite);
|
this.nav(null);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@ -200,9 +158,9 @@ export default Vue.extend({
|
|||||||
<style lang="stylus" scoped>
|
<style lang="stylus" scoped>
|
||||||
@import '~const.styl'
|
@import '~const.styl'
|
||||||
|
|
||||||
.mk-reversi
|
root(isDark)
|
||||||
color #677f84
|
color isDark ? #fff : #677f84
|
||||||
background #fff
|
background isDark ? #191b22 : #fff
|
||||||
|
|
||||||
> .matching
|
> .matching
|
||||||
> h1
|
> h1
|
||||||
@ -219,109 +177,10 @@ export default Vue.extend({
|
|||||||
text-align center
|
text-align center
|
||||||
border-top dashed 1px #c4cdd4
|
border-top dashed 1px #c4cdd4
|
||||||
|
|
||||||
> .index
|
.vchtoekanapleubgzioubdtmlkribzfd[data-darkmode]
|
||||||
> h1
|
root(true)
|
||||||
margin 0
|
|
||||||
padding 24px
|
|
||||||
font-size 24px
|
|
||||||
text-align center
|
|
||||||
font-weight normal
|
|
||||||
color #fff
|
|
||||||
background linear-gradient(to bottom, #8bca3e, #d6cf31)
|
|
||||||
|
|
||||||
& + p
|
.vchtoekanapleubgzioubdtmlkribzfd:not([data-darkmode])
|
||||||
margin 0
|
root(false)
|
||||||
padding 12px
|
|
||||||
margin-bottom 12px
|
|
||||||
text-align center
|
|
||||||
font-size 14px
|
|
||||||
border-bottom solid 1px #d3d9dc
|
|
||||||
|
|
||||||
> .play
|
|
||||||
margin 0 auto
|
|
||||||
padding 0 16px
|
|
||||||
max-width 500px
|
|
||||||
text-align center
|
|
||||||
|
|
||||||
> details
|
|
||||||
margin 8px 0
|
|
||||||
|
|
||||||
> div
|
|
||||||
padding 16px
|
|
||||||
font-size 14px
|
|
||||||
text-align left
|
|
||||||
background #f5f5f5
|
|
||||||
border-radius 8px
|
|
||||||
|
|
||||||
> section
|
|
||||||
margin 0 auto
|
|
||||||
padding 0 16px 16px 16px
|
|
||||||
max-width 500px
|
|
||||||
border-top solid 1px #d3d9dc
|
|
||||||
|
|
||||||
> h2
|
|
||||||
margin 0
|
|
||||||
padding 16px 0 8px 0
|
|
||||||
font-size 16px
|
|
||||||
font-weight bold
|
|
||||||
|
|
||||||
.invitation
|
|
||||||
margin 8px 0
|
|
||||||
padding 8px
|
|
||||||
border solid 1px #e1e5e8
|
|
||||||
border-radius 6px
|
|
||||||
cursor pointer
|
|
||||||
|
|
||||||
*
|
|
||||||
pointer-events none
|
|
||||||
user-select none
|
|
||||||
|
|
||||||
&:focus
|
|
||||||
border-color $theme-color
|
|
||||||
|
|
||||||
&:hover
|
|
||||||
background #f5f5f5
|
|
||||||
|
|
||||||
&:active
|
|
||||||
background #eee
|
|
||||||
|
|
||||||
> .avatar
|
|
||||||
width 32px
|
|
||||||
height 32px
|
|
||||||
border-radius 100%
|
|
||||||
|
|
||||||
> span
|
|
||||||
margin 0 8px
|
|
||||||
line-height 32px
|
|
||||||
|
|
||||||
.game
|
|
||||||
display block
|
|
||||||
margin 8px 0
|
|
||||||
padding 8px
|
|
||||||
color #677f84
|
|
||||||
border solid 1px #e1e5e8
|
|
||||||
border-radius 6px
|
|
||||||
cursor pointer
|
|
||||||
|
|
||||||
*
|
|
||||||
pointer-events none
|
|
||||||
user-select none
|
|
||||||
|
|
||||||
&:focus
|
|
||||||
border-color $theme-color
|
|
||||||
|
|
||||||
&:hover
|
|
||||||
background #f5f5f5
|
|
||||||
|
|
||||||
&:active
|
|
||||||
background #eee
|
|
||||||
|
|
||||||
> .avatar
|
|
||||||
width 32px
|
|
||||||
height 32px
|
|
||||||
border-radius 100%
|
|
||||||
|
|
||||||
> span
|
|
||||||
margin 0 8px
|
|
||||||
line-height 32px
|
|
||||||
</style>
|
</style>
|
||||||
|
@ -37,6 +37,8 @@ import uiTextarea from './ui/textarea.vue';
|
|||||||
import uiSwitch from './ui/switch.vue';
|
import uiSwitch from './ui/switch.vue';
|
||||||
import uiRadio from './ui/radio.vue';
|
import uiRadio from './ui/radio.vue';
|
||||||
import uiSelect from './ui/select.vue';
|
import uiSelect from './ui/select.vue';
|
||||||
|
import formButton from './ui/form/button.vue';
|
||||||
|
import formRadio from './ui/form/radio.vue';
|
||||||
|
|
||||||
Vue.component('mk-analog-clock', analogClock);
|
Vue.component('mk-analog-clock', analogClock);
|
||||||
Vue.component('mk-menu', menu);
|
Vue.component('mk-menu', menu);
|
||||||
@ -75,3 +77,5 @@ Vue.component('ui-textarea', uiTextarea);
|
|||||||
Vue.component('ui-switch', uiSwitch);
|
Vue.component('ui-switch', uiSwitch);
|
||||||
Vue.component('ui-radio', uiRadio);
|
Vue.component('ui-radio', uiRadio);
|
||||||
Vue.component('ui-select', uiSelect);
|
Vue.component('ui-select', uiSelect);
|
||||||
|
Vue.component('form-button', formButton);
|
||||||
|
Vue.component('form-radio', formRadio);
|
||||||
|
@ -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,19 +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('strong', token.bold);
|
return createElement('b', token.bold);
|
||||||
|
}
|
||||||
|
|
||||||
case 'url':
|
case 'big': {
|
||||||
|
bigCount++;
|
||||||
|
const isLong = length(token.big) > 10;
|
||||||
|
const isMany = bigCount > 3;
|
||||||
|
return (createElement as any)('strong', {
|
||||||
|
attrs: {
|
||||||
|
style: `display: inline-block; font-size: ${ isMany ? '100%' : '150%' };`
|
||||||
|
},
|
||||||
|
directives: [this.$store.state.settings.disableAnimatedMfm || isLong || isMany ? {} : {
|
||||||
|
name: 'animate-css',
|
||||||
|
value: { classes: 'tada', iteration: 'infinite' }
|
||||||
|
}]
|
||||||
|
}, token.big);
|
||||||
|
}
|
||||||
|
|
||||||
|
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',
|
||||||
@ -75,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)}`,
|
||||||
@ -88,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'
|
||||||
}, [
|
}, [
|
||||||
@ -107,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) {
|
||||||
@ -134,28 +176,33 @@ 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);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}));
|
}));
|
||||||
|
|
||||||
const _els = [];
|
const _els = [];
|
||||||
|
@ -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>
|
||||||
|
|
||||||
|
89
src/client/app/common/views/components/ui/form/button.vue
Normal file
89
src/client/app/common/views/components/ui/form/button.vue
Normal file
@ -0,0 +1,89 @@
|
|||||||
|
<template>
|
||||||
|
<div class="nvemkhtwcnnpkdrwfcbzuwhfulejhmzg" :class="{ round, primary }">
|
||||||
|
<button @click="$emit('click')">
|
||||||
|
<slot></slot>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script lang="ts">
|
||||||
|
import Vue from 'vue';
|
||||||
|
export default Vue.extend({
|
||||||
|
props: {
|
||||||
|
round: {
|
||||||
|
type: Boolean,
|
||||||
|
required: false,
|
||||||
|
default: false
|
||||||
|
},
|
||||||
|
primary: {
|
||||||
|
type: Boolean,
|
||||||
|
required: false,
|
||||||
|
default: false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="stylus" scoped>
|
||||||
|
@import '~const.styl'
|
||||||
|
|
||||||
|
root(isDark)
|
||||||
|
display inline-block
|
||||||
|
|
||||||
|
& + .nvemkhtwcnnpkdrwfcbzuwhfulejhmzg
|
||||||
|
margin-left 12px
|
||||||
|
|
||||||
|
> button
|
||||||
|
display inline-block
|
||||||
|
margin 0
|
||||||
|
padding 12px 20px
|
||||||
|
font-size 14px
|
||||||
|
border 1px solid isDark ? #6d727d : #dcdfe6
|
||||||
|
border-radius 4px
|
||||||
|
outline none
|
||||||
|
box-shadow none
|
||||||
|
color isDark ? #fff : #606266
|
||||||
|
transition 0.1s
|
||||||
|
|
||||||
|
*
|
||||||
|
pointer-events none
|
||||||
|
|
||||||
|
&:hover
|
||||||
|
&:focus
|
||||||
|
color $theme-color
|
||||||
|
background rgba($theme-color, isDark ? 0.2 : 0.12)
|
||||||
|
border-color rgba($theme-color, isDark ? 0.5 : 0.3)
|
||||||
|
|
||||||
|
&:active
|
||||||
|
color darken($theme-color, 20%)
|
||||||
|
background rgba($theme-color, 0.12)
|
||||||
|
border-color $theme-color
|
||||||
|
transition all 0s
|
||||||
|
|
||||||
|
&.primary
|
||||||
|
> button
|
||||||
|
border 1px solid $theme-color
|
||||||
|
background $theme-color
|
||||||
|
color $theme-color-foreground
|
||||||
|
|
||||||
|
&:hover
|
||||||
|
&:focus
|
||||||
|
background lighten($theme-color, 20%)
|
||||||
|
border-color lighten($theme-color, 20%)
|
||||||
|
|
||||||
|
&:active
|
||||||
|
background darken($theme-color, 20%)
|
||||||
|
border-color darken($theme-color, 20%)
|
||||||
|
transition all 0s
|
||||||
|
|
||||||
|
&.round
|
||||||
|
> button
|
||||||
|
border-radius 64px
|
||||||
|
|
||||||
|
.nvemkhtwcnnpkdrwfcbzuwhfulejhmzg[data-darkmode]
|
||||||
|
root(true)
|
||||||
|
|
||||||
|
.nvemkhtwcnnpkdrwfcbzuwhfulejhmzg:not([data-darkmode])
|
||||||
|
root(false)
|
||||||
|
|
||||||
|
</style>
|
126
src/client/app/common/views/components/ui/form/radio.vue
Normal file
126
src/client/app/common/views/components/ui/form/radio.vue
Normal file
@ -0,0 +1,126 @@
|
|||||||
|
<template>
|
||||||
|
<div
|
||||||
|
class="uywduthvrdnlpsvsjkqigicixgyfctto"
|
||||||
|
:class="{ disabled, checked }"
|
||||||
|
:aria-checked="checked"
|
||||||
|
:aria-disabled="disabled"
|
||||||
|
@click="toggle"
|
||||||
|
>
|
||||||
|
<input type="radio"
|
||||||
|
:disabled="disabled"
|
||||||
|
>
|
||||||
|
<span class="button">
|
||||||
|
<span></span>
|
||||||
|
</span>
|
||||||
|
<span class="label"><slot></slot></span>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script lang="ts">
|
||||||
|
import Vue from 'vue';
|
||||||
|
export default Vue.extend({
|
||||||
|
model: {
|
||||||
|
prop: 'model',
|
||||||
|
event: 'change'
|
||||||
|
},
|
||||||
|
props: {
|
||||||
|
model: {
|
||||||
|
required: false
|
||||||
|
},
|
||||||
|
value: {
|
||||||
|
required: false
|
||||||
|
},
|
||||||
|
disabled: {
|
||||||
|
type: Boolean,
|
||||||
|
default: false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
computed: {
|
||||||
|
checked(): boolean {
|
||||||
|
return this.model === this.value;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
toggle() {
|
||||||
|
this.$emit('change', this.value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="stylus" scoped>
|
||||||
|
@import '~const.styl'
|
||||||
|
|
||||||
|
root(isDark)
|
||||||
|
display inline-flex
|
||||||
|
margin 0 16px 0 0
|
||||||
|
cursor pointer
|
||||||
|
transition all 0.3s
|
||||||
|
|
||||||
|
> *
|
||||||
|
user-select none
|
||||||
|
|
||||||
|
&:hover
|
||||||
|
> .button
|
||||||
|
border solid 2px isDark ? rgba(#fff, 0.7) : rgba(#000, 0.54)
|
||||||
|
|
||||||
|
&.disabled
|
||||||
|
opacity 0.6
|
||||||
|
cursor not-allowed
|
||||||
|
|
||||||
|
&.checked
|
||||||
|
> .button
|
||||||
|
border-color $theme-color
|
||||||
|
|
||||||
|
&:after
|
||||||
|
background-color $theme-color
|
||||||
|
transform scale(1)
|
||||||
|
opacity 1
|
||||||
|
|
||||||
|
> .label
|
||||||
|
color $theme-color
|
||||||
|
|
||||||
|
> input
|
||||||
|
position absolute
|
||||||
|
width 0
|
||||||
|
height 0
|
||||||
|
opacity 0
|
||||||
|
margin 0
|
||||||
|
|
||||||
|
> .button
|
||||||
|
display inline-block
|
||||||
|
flex-shrink 0
|
||||||
|
width 20px
|
||||||
|
height 20px
|
||||||
|
background none
|
||||||
|
border solid 2px isDark ? rgba(#fff, 0.6) : rgba(#000, 0.4)
|
||||||
|
border-radius 100%
|
||||||
|
transition inherit
|
||||||
|
|
||||||
|
&:after
|
||||||
|
content ''
|
||||||
|
display block
|
||||||
|
position absolute
|
||||||
|
top 3px
|
||||||
|
right 3px
|
||||||
|
bottom 3px
|
||||||
|
left 3px
|
||||||
|
border-radius 100%
|
||||||
|
opacity 0
|
||||||
|
transform scale(0)
|
||||||
|
transition 0.4s cubic-bezier(0.25, 0.8, 0.25, 1)
|
||||||
|
|
||||||
|
> .label
|
||||||
|
margin-left 8px
|
||||||
|
display block
|
||||||
|
font-size 14px
|
||||||
|
line-height 20px
|
||||||
|
cursor pointer
|
||||||
|
|
||||||
|
.uywduthvrdnlpsvsjkqigicixgyfctto[data-darkmode]
|
||||||
|
root(true)
|
||||||
|
|
||||||
|
.uywduthvrdnlpsvsjkqigicixgyfctto:not([data-darkmode])
|
||||||
|
root(false)
|
||||||
|
|
||||||
|
</style>
|
@ -2,6 +2,12 @@
|
|||||||
<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" />
|
||||||
|
<iframe v-else-if="nicovideoId"
|
||||||
|
:src="`https://embed.nicovideo.jp/watch/${nicovideoId}?oldScript=1&referer=${misskeyUrl}&from=${position || '0'}&allowProgrammaticFullScreen=1`"
|
||||||
|
frameborder="0" allow="autoplay; encrypted-media" allowfullscreen />
|
||||||
<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>
|
||||||
@ -49,6 +55,9 @@ export default Vue.extend({
|
|||||||
icon: null,
|
icon: null,
|
||||||
sitename: null,
|
sitename: null,
|
||||||
youtubeId: null,
|
youtubeId: null,
|
||||||
|
spotifyId: null,
|
||||||
|
nicovideoId: null,
|
||||||
|
position: null,
|
||||||
tweetUrl: null,
|
tweetUrl: null,
|
||||||
misskeyUrl
|
misskeyUrl
|
||||||
};
|
};
|
||||||
@ -58,8 +67,20 @@ export default Vue.extend({
|
|||||||
|
|
||||||
if (url.hostname == 'www.youtube.com') {
|
if (url.hostname == 'www.youtube.com') {
|
||||||
this.youtubeId = url.searchParams.get('v');
|
this.youtubeId = url.searchParams.get('v');
|
||||||
|
return;
|
||||||
} else if (url.hostname == 'youtu.be') {
|
} else if (url.hostname == 'youtu.be') {
|
||||||
this.youtubeId = url.pathname;
|
this.youtubeId = url.pathname;
|
||||||
|
return;
|
||||||
|
} else if (url.hostname == 'open.spotify.com') {
|
||||||
|
this.spotifyId = url.pathname.split('/').reverse().filter(x => x !== '')[0];
|
||||||
|
return;
|
||||||
|
} else if (['nicovideo.jp', 'www.nicovideo.jp', 'nico.ms'].includes(url.hostname)) {
|
||||||
|
const id = url.pathname.split('/').reverse().filter(x => x !== '')[0];
|
||||||
|
if (['sm', 'nm', 'ax', 'ca', 'cd', 'cw', 'fx', 'ig', 'na', 'om', 'sd', 'sk', 'yk', 'yo', 'za', 'zb', 'zc', 'zd', 'ze', 'nl', 'so', ...Array(10).keys()].some(x => id.startsWith(x)) {
|
||||||
|
this.nicovideoId = id;
|
||||||
|
this.position = url.searchParams.get('from');
|
||||||
|
return;
|
||||||
|
}
|
||||||
} 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 || {};
|
||||||
@ -79,7 +100,8 @@ export default Vue.extend({
|
|||||||
twttr.ready = loadTweet;
|
twttr.ready = loadTweet;
|
||||||
(window as any).twttr = twttr;
|
(window as any).twttr = twttr;
|
||||||
}
|
}
|
||||||
} else {
|
return;
|
||||||
|
}
|
||||||
fetch('/url?url=' + encodeURIComponent(this.url)).then(res => {
|
fetch('/url?url=' + encodeURIComponent(this.url)).then(res => {
|
||||||
res.json().then(info => {
|
res.json().then(info => {
|
||||||
this.title = info.title;
|
this.title = info.title;
|
||||||
@ -92,7 +114,6 @@ export default Vue.extend({
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
@ -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) + ' | Misskey';
|
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@ -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
|
||||||
|
@ -34,7 +34,7 @@ import MkMessagingRoom from './views/pages/messaging-room.vue';
|
|||||||
import MkNote from './views/pages/note.vue';
|
import MkNote from './views/pages/note.vue';
|
||||||
import MkSearch from './views/pages/search.vue';
|
import MkSearch from './views/pages/search.vue';
|
||||||
import MkTag from './views/pages/tag.vue';
|
import MkTag from './views/pages/tag.vue';
|
||||||
import MkReversi from './views/pages/reversi.vue';
|
import MkReversi from './views/pages/games/reversi.vue';
|
||||||
import MkShare from './views/pages/share.vue';
|
import MkShare from './views/pages/share.vue';
|
||||||
import MkFollow from '../common/views/pages/follow.vue';
|
import MkFollow from '../common/views/pages/follow.vue';
|
||||||
|
|
||||||
@ -65,8 +65,7 @@ init(async (launch) => {
|
|||||||
{ path: '/search', component: MkSearch },
|
{ path: '/search', component: MkSearch },
|
||||||
{ path: '/tags/:tag', component: MkTag },
|
{ path: '/tags/:tag', component: MkTag },
|
||||||
{ path: '/share', component: MkShare },
|
{ path: '/share', component: MkShare },
|
||||||
{ path: '/reversi', component: MkReversi },
|
{ path: '/reversi/:game?', component: MkReversi },
|
||||||
{ path: '/reversi/:game', component: MkReversi },
|
|
||||||
{ path: '/@:user', component: MkUser },
|
{ path: '/@:user', component: MkUser },
|
||||||
{ path: '/notes/:note', component: MkNote },
|
{ path: '/notes/:note', component: MkNote },
|
||||||
{ path: '/authorize-follow', component: MkFollow }
|
{ path: '/authorize-follow', component: MkFollow }
|
||||||
|
@ -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 = 'Misskey';
|
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;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
27
src/client/app/desktop/views/pages/games/reversi.vue
Normal file
27
src/client/app/desktop/views/pages/games/reversi.vue
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
<template>
|
||||||
|
<component :is="ui ? 'mk-ui' : 'div'">
|
||||||
|
<mk-reversi :game-id="$route.params.game" @nav="nav" :self-nav="false"/>
|
||||||
|
</component>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script lang="ts">
|
||||||
|
import Vue from 'vue';
|
||||||
|
|
||||||
|
export default Vue.extend({
|
||||||
|
props: {
|
||||||
|
ui: {
|
||||||
|
default: false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
nav(game, actualNav) {
|
||||||
|
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>
|
@ -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 = 'Misskey - %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 = 'Misskey';
|
document.title = config.name;
|
||||||
|
|
||||||
Progress.start();
|
Progress.start();
|
||||||
},
|
},
|
||||||
|
@ -1,50 +0,0 @@
|
|||||||
<template>
|
|
||||||
<component :is="ui ? 'mk-ui' : 'div'">
|
|
||||||
<mk-reversi v-if="!fetching" :init-game="game" @gamed="onGamed"/>
|
|
||||||
</component>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<script lang="ts">
|
|
||||||
import Vue from 'vue';
|
|
||||||
import Progress from '../../../common/scripts/loading';
|
|
||||||
|
|
||||||
export default Vue.extend({
|
|
||||||
props: {
|
|
||||||
ui: {
|
|
||||||
default: false
|
|
||||||
}
|
|
||||||
},
|
|
||||||
data() {
|
|
||||||
return {
|
|
||||||
fetching: false,
|
|
||||||
game: null
|
|
||||||
};
|
|
||||||
},
|
|
||||||
watch: {
|
|
||||||
$route: 'fetch'
|
|
||||||
},
|
|
||||||
created() {
|
|
||||||
this.fetch();
|
|
||||||
},
|
|
||||||
methods: {
|
|
||||||
fetch() {
|
|
||||||
if (this.$route.params.game == null) return;
|
|
||||||
|
|
||||||
Progress.start();
|
|
||||||
this.fetching = true;
|
|
||||||
|
|
||||||
(this as any).api('games/reversi/games/show', {
|
|
||||||
gameId: this.$route.params.game
|
|
||||||
}).then(game => {
|
|
||||||
this.game = game;
|
|
||||||
this.fetching = false;
|
|
||||||
|
|
||||||
Progress.done();
|
|
||||||
});
|
|
||||||
},
|
|
||||||
onGamed(game) {
|
|
||||||
history.pushState(null, null, '/reversi/' + game.id);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
</script>
|
|
@ -1,21 +1,23 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="pptjhabgjtt7kwskbfv4y3uml6fpuhmr">
|
<div class="pptjhabgjtt7kwskbfv4y3uml6fpuhmr">
|
||||||
<h1>%i18n:@share-with%</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>
|
||||||
<button v-if="posted" class="ui button" @click="close">%i18n:@close%</button>
|
<button v-if="posted" class="ui button" @click="close">%i18n:common.close%</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')
|
||||||
};
|
};
|
||||||
|
@ -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) + ' | Misskey';
|
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@ -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="Misskey"></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="Misskey">
|
<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"/>
|
||||||
|
@ -6,8 +6,8 @@
|
|||||||
|
|
||||||
<div class="mkw-polls--body" :data-darkmode="$store.state.device.darkmode">
|
<div class="mkw-polls--body" :data-darkmode="$store.state.device.darkmode">
|
||||||
<div class="poll" v-if="!fetching && poll != null">
|
<div class="poll" v-if="!fetching && poll != null">
|
||||||
<p v-if="poll.text"><router-link to="poll | notePage">{{ poll.text }}</router-link></p>
|
<p v-if="poll.text"><router-link :to="poll | notePage">{{ poll.text }}</router-link></p>
|
||||||
<p v-if="!poll.text"><router-link to="poll | notePage">%fa:link%</router-link></p>
|
<p v-if="!poll.text"><router-link :to="poll | notePage">%fa:link%</router-link></p>
|
||||||
<mk-poll :note="poll"/>
|
<mk-poll :note="poll"/>
|
||||||
</div>
|
</div>
|
||||||
<p class="empty" v-if="!fetching && poll == null">%i18n:@nothing%</p>
|
<p class="empty" v-if="!fetching && poll == null">%i18n:@nothing%</p>
|
||||||
|
@ -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>Misskey 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解除
|
||||||
|
@ -35,7 +35,7 @@ import MkFavorites from './views/pages/favorites.vue';
|
|||||||
import MkUserLists from './views/pages/user-lists.vue';
|
import MkUserLists from './views/pages/user-lists.vue';
|
||||||
import MkUserList from './views/pages/user-list.vue';
|
import MkUserList from './views/pages/user-list.vue';
|
||||||
import MkSettings from './views/pages/settings.vue';
|
import MkSettings from './views/pages/settings.vue';
|
||||||
import MkReversi from './views/pages/reversi.vue';
|
import MkReversi from './views/pages/games/reversi.vue';
|
||||||
import MkTag from './views/pages/tag.vue';
|
import MkTag from './views/pages/tag.vue';
|
||||||
import MkShare from './views/pages/share.vue';
|
import MkShare from './views/pages/share.vue';
|
||||||
import MkFollow from '../common/views/pages/follow.vue';
|
import MkFollow from '../common/views/pages/follow.vue';
|
||||||
@ -76,8 +76,7 @@ init((launch) => {
|
|||||||
{ path: '/search', component: MkSearch },
|
{ path: '/search', component: MkSearch },
|
||||||
{ path: '/tags/:tag', component: MkTag },
|
{ path: '/tags/:tag', component: MkTag },
|
||||||
{ path: '/share', component: MkShare },
|
{ path: '/share', component: MkShare },
|
||||||
{ path: '/reversi', name: 'reversi', component: MkReversi },
|
{ path: '/reversi/:game?', name: 'reversi', component: MkReversi },
|
||||||
{ path: '/reversi/:game', component: MkReversi },
|
|
||||||
{ path: '/@:user', component: MkUser },
|
{ path: '/@:user', component: MkUser },
|
||||||
{ path: '/@:user/followers', component: MkFollowers },
|
{ path: '/@:user/followers', component: MkFollowers },
|
||||||
{ path: '/@:user/following', component: MkFollowing },
|
{ path: '/@:user/following', component: MkFollowing },
|
||||||
|
@ -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 = 'Misskey';
|
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 = 'Misskey 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 = 'Misskey 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 + ' | Misskey 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 + ' | Misskey 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 = 'Misskey | %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) + ' | Misskey';
|
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) + ' | Misskey';
|
document.title = '%i18n:@followers-of%'.replace('{}', this.name) + ' | ' + config.name;
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
onLoaded() {
|
onLoaded() {
|
||||||
|
28
src/client/app/mobile/views/pages/games/reversi.vue
Normal file
28
src/client/app/mobile/views/pages/games/reversi.vue
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
<template>
|
||||||
|
<mk-ui>
|
||||||
|
<span slot="header">%fa:gamepad%%i18n:@reversi%</span>
|
||||||
|
<mk-reversi :game-id="$route.params.game" @nav="nav" :self-nav="false"/>
|
||||||
|
</mk-ui>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script lang="ts">
|
||||||
|
import Vue from 'vue';
|
||||||
|
import * as config from '../../../../config';
|
||||||
|
|
||||||
|
export default Vue.extend({
|
||||||
|
mounted() {
|
||||||
|
document.title = `${config.name} %i18n:@reversi%`;
|
||||||
|
document.documentElement.style.background = '#fff';
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
nav(game, actualNav) {
|
||||||
|
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>
|
@ -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 = 'Misskey';
|
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)} | Misskey`;
|
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 = 'Misskey %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 = 'Misskey';
|
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 = 'Misskey | %i18n:@notifications%';
|
document.title = '%i18n:@notifications%';
|
||||||
|
|
||||||
Progress.start();
|
Progress.start();
|
||||||
},
|
},
|
||||||
|
@ -25,7 +25,7 @@ export default Vue.extend({
|
|||||||
};
|
};
|
||||||
},
|
},
|
||||||
mounted() {
|
mounted() {
|
||||||
document.title = 'Misskey | %i18n:@title%';
|
document.title = '%i18n:@title%';
|
||||||
|
|
||||||
Progress.start();
|
Progress.start();
|
||||||
|
|
||||||
|
@ -1,50 +0,0 @@
|
|||||||
<template>
|
|
||||||
<mk-ui>
|
|
||||||
<span slot="header">%fa:gamepad%%i18n:@reversi%</span>
|
|
||||||
<mk-reversi v-if="!fetching" :init-game="game" @gamed="onGamed"/>
|
|
||||||
</mk-ui>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<script lang="ts">
|
|
||||||
import Vue from 'vue';
|
|
||||||
import Progress from '../../../common/scripts/loading';
|
|
||||||
|
|
||||||
export default Vue.extend({
|
|
||||||
data() {
|
|
||||||
return {
|
|
||||||
fetching: false,
|
|
||||||
game: null
|
|
||||||
};
|
|
||||||
},
|
|
||||||
watch: {
|
|
||||||
$route: 'fetch'
|
|
||||||
},
|
|
||||||
created() {
|
|
||||||
this.fetch();
|
|
||||||
},
|
|
||||||
mounted() {
|
|
||||||
document.title = '%i18n:common.name% %i18n:@reversi%';
|
|
||||||
document.documentElement.style.background = '#fff';
|
|
||||||
},
|
|
||||||
methods: {
|
|
||||||
fetch() {
|
|
||||||
if (this.$route.params.game == null) return;
|
|
||||||
|
|
||||||
Progress.start();
|
|
||||||
this.fetching = true;
|
|
||||||
|
|
||||||
(this as any).api('games/reversi/games/show', {
|
|
||||||
gameId: this.$route.params.game
|
|
||||||
}).then(game => {
|
|
||||||
this.game = game;
|
|
||||||
this.fetching = false;
|
|
||||||
|
|
||||||
Progress.done();
|
|
||||||
});
|
|
||||||
},
|
|
||||||
onGamed(game) {
|
|
||||||
history.pushState(null, null, '/reversi/' + game.id);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
</script>
|
|
@ -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} | Misskey`;
|
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 = 'Misskey | %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>Misskeyで共有</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 = 'Misskey | %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) + ' | Misskey';
|
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="Misskey">
|
<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,12 +103,12 @@ export default Vue.extend({
|
|||||||
},
|
},
|
||||||
|
|
||||||
mounted() {
|
mounted() {
|
||||||
document.title = 'Misskey';
|
document.title = config.name;
|
||||||
},
|
},
|
||||||
|
|
||||||
methods: {
|
methods: {
|
||||||
hint() {
|
hint() {
|
||||||
alert('ウィジェットを追加/削除したり並べ替えたりできます。ウィジェットを移動するには「三」をドラッグします。ウィジェットを削除するには「x」をタップします。いくつかのウィジェットはタップすることで表示を変更できます。');
|
alert('%i18n:@widgets-hints%');
|
||||||
},
|
},
|
||||||
|
|
||||||
widgetFunc(id) {
|
widgetFunc(id) {
|
||||||
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,15 +1,15 @@
|
|||||||
# MisskeyリバーシBotの開発
|
# MisskeyリバーシBotの開発
|
||||||
Misskeyのリバーシ機能に対応したBotの開発方法をここに記します。
|
Misskeyのリバーシ機能に対応したBotの開発方法をここに記します。
|
||||||
|
|
||||||
1. `reversi`ストリームに以下のパラメータを付けて接続する:
|
1. `games/reversi`ストリームに以下のパラメータを付けて接続する:
|
||||||
* `i`: botアカウントのAPIキー
|
* `i`: botアカウントのAPIキー
|
||||||
|
|
||||||
2. 対局への招待が来たら、ストリームから`invited`イベントが流れてくる
|
2. 対局への招待が来たら、ストリームから`invited`イベントが流れてくる
|
||||||
* イベントの中身に、`parent`という名前で対局へ誘ってきたユーザーの情報が含まれている
|
* イベントの中身に、`parent`という名前で対局へ誘ってきたユーザーの情報が含まれている
|
||||||
|
|
||||||
3. `reversi/match`へ、`user_id`として`parent`の`id`が含まれたリクエストを送信する
|
3. `games/reversi/match`へ、`user_id`として`parent`の`id`が含まれたリクエストを送信する
|
||||||
|
|
||||||
4. 上手くいくとゲーム情報が返ってくるので、`reversi-game`ストリームへ、以下のパラメータを付けて接続する:
|
4. 上手くいくとゲーム情報が返ってくるので、`games/reversi-game`ストリームへ、以下のパラメータを付けて接続する:
|
||||||
* `i`: botアカウントのAPIキー
|
* `i`: botアカウントのAPIキー
|
||||||
* `game`: `game`の`id`
|
* `game`: `game`の`id`
|
||||||
|
|
||||||
@ -96,8 +96,8 @@ y = Math.floor(pos / mapWidth)
|
|||||||
フォームコントロールは、次のようなオブジェクトです:
|
フォームコントロールは、次のようなオブジェクトです:
|
||||||
```javascript
|
```javascript
|
||||||
{
|
{
|
||||||
id: 'button1',
|
id: 'switch1',
|
||||||
type: 'button',
|
type: 'switch',
|
||||||
label: 'Enable hoge',
|
label: 'Enable hoge',
|
||||||
value: false
|
value: false
|
||||||
}
|
}
|
||||||
@ -110,21 +110,21 @@ y = Math.floor(pos / mapWidth)
|
|||||||
### フォームの操作を受け取る
|
### フォームの操作を受け取る
|
||||||
ユーザーがフォームを操作すると、ストリームから`update-form`イベントが流れてきます。
|
ユーザーがフォームを操作すると、ストリームから`update-form`イベントが流れてきます。
|
||||||
イベントの中身には、コントロールのIDと、ユーザーが設定した値が含まれています。
|
イベントの中身には、コントロールのIDと、ユーザーが設定した値が含まれています。
|
||||||
例えば、上で示したボタンをユーザーがオンにしたとすると、次のイベントが流れてきます:
|
例えば、上で示したスイッチをユーザーがオンにしたとすると、次のイベントが流れてきます:
|
||||||
```javascript
|
```javascript
|
||||||
{
|
{
|
||||||
id: 'button1',
|
id: 'switch1',
|
||||||
value: true
|
value: true
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
### フォームコントロールの種類
|
### フォームコントロールの種類
|
||||||
#### ボタン
|
#### スイッチ
|
||||||
type: `button`
|
type: `switch`
|
||||||
ボタンを表示します。何かの機能をオン/オフさせたい場合に有用です。
|
スイッチを表示します。何かの機能をオン/オフさせたい場合に有用です。
|
||||||
|
|
||||||
##### プロパティ
|
##### プロパティ
|
||||||
`desc` ... ボタンの詳細な説明。
|
`desc` ... スイッチの詳細な説明。
|
||||||
|
|
||||||
#### ラジオボタン
|
#### ラジオボタン
|
||||||
type: `radio`
|
type: `radio`
|
||||||
@ -145,6 +145,15 @@ items: [{
|
|||||||
}]
|
}]
|
||||||
```
|
```
|
||||||
|
|
||||||
|
#### スライダー
|
||||||
|
type: `slider`
|
||||||
|
スライダーを表示します。
|
||||||
|
|
||||||
|
##### プロパティ
|
||||||
|
`min` ... スライダーの下限。
|
||||||
|
`max` ... スライダーの上限。
|
||||||
|
`step` ... 入力欄で刻むステップ値。
|
||||||
|
|
||||||
#### テキストボックス
|
#### テキストボックス
|
||||||
type: `textbox`
|
type: `textbox`
|
||||||
テキストボックスを表示します。ユーザーになにか入力させる一般的な用途に利用できます。
|
テキストボックスを表示します。ユーザーになにか入力させる一般的な用途に利用できます。
|
||||||
@ -163,3 +172,6 @@ type: `textbox`
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
メッセージの種類: `success`, `info`, `warning`, `error`。
|
メッセージの種類: `success`, `info`, `warning`, `error`。
|
||||||
|
|
||||||
|
## 投了する
|
||||||
|
投了をするには、<a href="./api/endpoints/games/reversi/games/surrender">このエンドポイント</a>にリクエストします。
|
||||||
|
18
src/games/reversi/package.json
Normal file
18
src/games/reversi/package.json
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
{
|
||||||
|
"name": "misskey-reversi",
|
||||||
|
"version": "0.0.5",
|
||||||
|
"description": "Misskey reversi engine",
|
||||||
|
"keywords": [
|
||||||
|
"misskey"
|
||||||
|
],
|
||||||
|
"author": "syuilo <i@syuilo.com>",
|
||||||
|
"license": "MIT",
|
||||||
|
"repository": "https://github.com/syuilo/misskey.git",
|
||||||
|
"bugs": "https://github.com/syuilo/misskey/issues",
|
||||||
|
"main": "./built/core.js",
|
||||||
|
"types": "./built/core.d.ts",
|
||||||
|
"scripts": {
|
||||||
|
"build": "tsc"
|
||||||
|
},
|
||||||
|
"dependencies": {}
|
||||||
|
}
|
21
src/games/reversi/tsconfig.json
Normal file
21
src/games/reversi/tsconfig.json
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
{
|
||||||
|
"compilerOptions": {
|
||||||
|
"noEmitOnError": false,
|
||||||
|
"noImplicitAny": false,
|
||||||
|
"noImplicitReturns": true,
|
||||||
|
"noFallthroughCasesInSwitch": true,
|
||||||
|
"experimentalDecorators": true,
|
||||||
|
"declaration": true,
|
||||||
|
"sourceMap": false,
|
||||||
|
"target": "es2017",
|
||||||
|
"module": "commonjs",
|
||||||
|
"removeComments": false,
|
||||||
|
"noLib": false,
|
||||||
|
"outDir": "./built",
|
||||||
|
"rootDir": "./"
|
||||||
|
},
|
||||||
|
"compileOnSave": false,
|
||||||
|
"include": [
|
||||||
|
"./core.ts"
|
||||||
|
]
|
||||||
|
}
|
@ -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');
|
||||||
import { JSDOM } from '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';
|
||||||
@ -11,6 +12,18 @@ const handlers: { [key: string]: (window: any, token: any, mentionedRemoteUsers:
|
|||||||
document.body.appendChild(b);
|
document.body.appendChild(b);
|
||||||
},
|
},
|
||||||
|
|
||||||
|
big({ document }, { big }) {
|
||||||
|
const b = document.createElement('strong');
|
||||||
|
b.textContent = big;
|
||||||
|
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');
|
||||||
|
20
src/mfm/parse/elements/big.ts
Normal file
20
src/mfm/parse/elements/big.ts
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
/**
|
||||||
|
* Big
|
||||||
|
*/
|
||||||
|
|
||||||
|
export type TextElementBig = {
|
||||||
|
type: 'big'
|
||||||
|
content: string
|
||||||
|
big: string
|
||||||
|
};
|
||||||
|
|
||||||
|
export default function(text: string) {
|
||||||
|
const match = text.match(/^\*\*\*(.+?)\*\*\*/);
|
||||||
|
if (!match) return null;
|
||||||
|
const big = match[0];
|
||||||
|
return {
|
||||||
|
type: 'big',
|
||||||
|
content: big,
|
||||||
|
big: match[1]
|
||||||
|
} as 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;
|
||||||
|
}
|
@ -3,6 +3,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import { TextElementBold } from './elements/bold';
|
import { TextElementBold } from './elements/bold';
|
||||||
|
import { TextElementBig } from './elements/big';
|
||||||
import { TextElementCode } from './elements/code';
|
import { TextElementCode } from './elements/code';
|
||||||
import { TextElementEmoji } from './elements/emoji';
|
import { TextElementEmoji } from './elements/emoji';
|
||||||
import { TextElementHashtag } from './elements/hashtag';
|
import { TextElementHashtag } from './elements/hashtag';
|
||||||
@ -13,8 +14,10 @@ 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/bold'),
|
require('./elements/bold'),
|
||||||
require('./elements/title'),
|
require('./elements/title'),
|
||||||
require('./elements/url'),
|
require('./elements/url'),
|
||||||
@ -25,11 +28,13 @@ 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 }
|
||||||
| TextElementBold
|
| TextElementBold
|
||||||
|
| TextElementBig
|
||||||
| TextElementCode
|
| TextElementCode
|
||||||
| TextElementEmoji
|
| TextElementEmoji
|
||||||
| TextElementHashtag
|
| TextElementHashtag
|
||||||
@ -39,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はクライアントエラーであり、それはつまり
|
||||||
|
@ -20,20 +20,15 @@ export default (user: ILocalUser, url: string, object: any) => new Promise((reso
|
|||||||
method: 'POST',
|
method: 'POST',
|
||||||
path: pathname + search,
|
path: pathname + search,
|
||||||
}, res => {
|
}, res => {
|
||||||
res.on('end', () => {
|
|
||||||
log(`${url} --> ${res.statusCode}`);
|
log(`${url} --> ${res.statusCode}`);
|
||||||
|
|
||||||
if (res.statusCode >= 200 && res.statusCode < 300) {
|
if (res.statusCode >= 400) {
|
||||||
resolve();
|
reject();
|
||||||
} else {
|
} else {
|
||||||
reject(res);
|
resolve();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
res.on('data', () => {});
|
|
||||||
res.on('error', reject);
|
|
||||||
});
|
|
||||||
|
|
||||||
sign(req, {
|
sign(req, {
|
||||||
authorizationHeaderName: 'Signature',
|
authorizationHeaderName: 'Signature',
|
||||||
key: user.keypair,
|
key: user.keypair,
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user