Compare commits

...

135 Commits

Author SHA1 Message Date
b60af54db1 5.13.0 2018-08-04 11:34:36 +09:00
047320e50a Merge pull request #2085 from syuilo/l10n_master
New Crowdin translations
2018-08-04 11:33:49 +09:00
29418ecbb4 🎨 2018-08-04 11:32:53 +09:00
67e97310cf Clean up 2018-08-04 11:25:39 +09:00
33d3d5c570 スライダーコントロールを追加するなど 2018-08-04 11:24:15 +09:00
ee050cc37e ✌️ 2018-08-04 10:40:09 +09:00
1ba43d83b0 New translations ja.yml (French) 2018-08-04 03:23:32 +09:00
72fc6d387f New translations ja.yml (French) 2018-08-04 03:11:27 +09:00
4a935e0659 New translations ja.yml (French) 2018-08-04 03:01:17 +09:00
8a0dab49e0 New translations ja.yml (French) 2018-08-04 02:51:19 +09:00
65574abab7 Merge pull request #2084 from syuilo/l10n_master
New Crowdin translations
2018-08-04 02:14:24 +09:00
37d21462b8 New translations ja.yml (Polish) 2018-08-04 02:11:50 +09:00
1acd25810c Merge pull request #2083 from syuilo/l10n_master
New Crowdin translations
2018-08-04 02:02:04 +09:00
a81b771f15 New translations ja.yml (Polish) 2018-08-04 02:01:40 +09:00
d30b2e7270 Merge branch 'master' of https://github.com/syuilo/misskey 2018-08-04 01:51:13 +09:00
69f82508cb 5.12.0 2018-08-04 01:50:45 +09:00
fddaa11645 Merge pull request #2081 from syuilo/l10n_master
New Crowdin translations
2018-08-04 01:50:13 +09:00
bbe740785d Fix doc 2018-08-04 01:49:32 +09:00
0389afa0fe 🎨 2018-08-04 01:48:02 +09:00
caec6933d1 Fix bug 2018-08-04 01:47:57 +09:00
420164c59a Trim text 2018-08-04 01:09:00 +09:00
b13f42645b Fix bug 2018-08-04 01:03:48 +09:00
22c945d21b New translations ja.yml (Polish) 2018-08-04 00:31:18 +09:00
12fab6fa53 New translations ja.yml (French) 2018-08-03 23:41:28 +09:00
51651e0c87 New translations ja.yml (French) 2018-08-03 23:31:32 +09:00
ce395e626f 5.11.0 2018-08-03 23:28:24 +09:00
b0f93588bb Merge pull request #2067 from syuilo/l10n_master
New Crowdin translations
2018-08-03 23:27:49 +09:00
d456e5e45c Implement new MFM syntax 2018-08-03 23:27:37 +09:00
84e47bad7e New translations ja.yml (English) 2018-08-03 23:21:46 +09:00
deee2391ba New translations ja.yml (French) 2018-08-03 23:21:44 +09:00
5cdd06ca2f New translations ja.yml (Catalan) 2018-08-03 23:11:38 +09:00
6245a86a6f New translations ja.yml (Portuguese) 2018-08-03 23:11:36 +09:00
c72e8bd88d New translations ja.yml (Korean) 2018-08-03 23:11:33 +09:00
c58719348f New translations ja.yml (Polish) 2018-08-03 23:11:31 +09:00
40525a9d6d New translations ja.yml (Chinese Simplified) 2018-08-03 23:11:29 +09:00
eac5d6d127 New translations ja.yml (Italian) 2018-08-03 23:11:26 +09:00
9cd7af6b99 New translations ja.yml (Russian) 2018-08-03 23:11:24 +09:00
5cd441c0cb New translations ja.yml (English) 2018-08-03 23:11:21 +09:00
32cc778ed3 New translations ja.yml (Spanish) 2018-08-03 23:11:18 +09:00
c966b3f371 New translations ja.yml (German) 2018-08-03 23:11:16 +09:00
9baa0128df New translations ja.yml (French) 2018-08-03 23:11:13 +09:00
42fbc7ab66 Fix #2047 2018-08-03 23:06:58 +09:00
8272118e29 typo 2018-08-03 23:01:55 +09:00
1dc8d4f926 New translations ja.yml (Polish) 2018-08-03 23:01:31 +09:00
4beb93055b New translations ja.yml (English) 2018-08-03 23:01:29 +09:00
e66ec6823d Merge branch 'master' into l10n_master 2018-08-03 23:01:14 +09:00
1d2b01df5c New translations ja.yml (English) 2018-08-03 22:51:22 +09:00
5defcd6592 🍕 2018-08-03 22:49:54 +09:00
13451f6843 ✌️ 2018-08-03 22:42:53 +09:00
6d1d6f1e6e New translations ja.yml (Catalan) 2018-08-03 22:41:37 +09:00
bb064e47f7 New translations ja.yml (Portuguese) 2018-08-03 22:41:35 +09:00
4e239f6089 New translations ja.yml (Korean) 2018-08-03 22:41:32 +09:00
b35b458001 New translations ja.yml (Polish) 2018-08-03 22:41:30 +09:00
315c28234e New translations ja.yml (Chinese Simplified) 2018-08-03 22:41:28 +09:00
d996cd6dda New translations ja.yml (Italian) 2018-08-03 22:41:26 +09:00
8a61e12cc8 New translations ja.yml (Russian) 2018-08-03 22:41:24 +09:00
99f4cbab4b New translations ja.yml (English) 2018-08-03 22:41:22 +09:00
1b4da6f26d New translations ja.yml (Spanish) 2018-08-03 22:41:20 +09:00
14ebc8f2b6 New translations ja.yml (German) 2018-08-03 22:41:18 +09:00
f97c1a0895 New translations ja.yml (French) 2018-08-03 22:41:16 +09:00
533448d835 Merge branch 'master' of https://github.com/syuilo/misskey 2018-08-03 22:35:01 +09:00
cbcf3fd7f1 ✌️ 2018-08-03 22:34:58 +09:00
4f4fd65a56 New translations ja.yml (English) 2018-08-03 21:51:36 +09:00
d2a7b471f6 New translations ja.yml (Catalan) 2018-08-03 21:41:36 +09:00
df05071636 New translations ja.yml (Portuguese) 2018-08-03 21:41:34 +09:00
bd8aee7b2c New translations ja.yml (Korean) 2018-08-03 21:41:31 +09:00
3459112732 New translations ja.yml (Polish) 2018-08-03 21:41:29 +09:00
8e8c02840d New translations ja.yml (Chinese Simplified) 2018-08-03 21:41:26 +09:00
f376f0e03a New translations ja.yml (Italian) 2018-08-03 21:41:23 +09:00
59f6d767b3 New translations ja.yml (Russian) 2018-08-03 21:41:21 +09:00
e46857af00 New translations ja.yml (English) 2018-08-03 21:41:19 +09:00
e987e47d18 New translations ja.yml (Spanish) 2018-08-03 21:41:16 +09:00
588cd27d5b New translations ja.yml (German) 2018-08-03 21:41:13 +09:00
d9efc4793a New translations ja.yml (French) 2018-08-03 21:41:11 +09:00
9d5983938b Merge pull request #2079 from syuilo/greenkeeper/systeminformation-3.42.8
Update systeminformation to the latest version 🚀
2018-08-03 21:40:45 +09:00
9686f45d24 fix(package): update systeminformation to version 3.42.8 2018-08-03 12:39:56 +00:00
cb0a0a7aa4 Merge pull request #2068 from syuilo/greenkeeper/webpack-4.16.4
Update webpack to the latest version 🚀
2018-08-03 21:33:40 +09:00
254495cd3d Merge pull request #2078 from syuilo/greenkeeper/systeminformation-3.42.6
fix(package): update systeminformation to version 3.42.6
2018-08-03 21:33:30 +09:00
6da9da0e8f Merge pull request #2077 from syuilo/#2066
なんか
2018-08-03 21:32:59 +09:00
d8260a4aaa New translations ja.yml (Spanish) 2018-08-03 21:32:42 +09:00
000635252c wip 2018-08-03 21:30:44 +09:00
faac4dbe22 fix(package): update systeminformation to version 3.42.6
Closes #2076
2018-08-03 12:23:28 +00:00
a3007a266d New translations ja.yml (Spanish) 2018-08-03 21:21:36 +09:00
3f0f1048fe New translations ja.yml (Spanish) 2018-08-03 21:12:59 +09:00
c016d212ed Fix bug 2018-08-03 21:11:53 +09:00
8f228b20de New translations ja.yml (Spanish) 2018-08-03 21:01:23 +09:00
a64945a8dd New translations ja.yml (Spanish) 2018-08-03 20:51:09 +09:00
2986876810 New translations ja.yml (Spanish) 2018-08-03 20:41:26 +09:00
166ef3ba52 New translations ja.yml (Spanish) 2018-08-03 20:31:22 +09:00
8bbd36a7dd New translations ja.yml (Spanish) 2018-08-03 20:21:15 +09:00
55c2254c3f New translations ja.yml (Spanish) 2018-08-03 19:31:13 +09:00
f7e72829ad New translations ja.yml (Spanish) 2018-08-03 19:21:18 +09:00
cd6829ca64 wip 2018-08-03 15:59:24 +09:00
a88942f58a wip 2018-08-03 09:39:03 +09:00
b4d79ce4a4 New translations ja.yml (English) 2018-08-03 02:02:14 +09:00
51b4f95f79 New translations ja.yml (English) 2018-08-03 01:52:01 +09:00
125da8d843 New translations ja.yml (French) 2018-08-03 01:31:50 +09:00
8385cb436e New translations ja.yml (French) 2018-08-03 01:22:00 +09:00
95ffeceb7f New translations ja.yml (French) 2018-08-03 01:12:15 +09:00
1e3cff6174 wip 2018-08-03 00:36:29 +09:00
3f29a0382b wip 2018-08-02 22:54:52 +09:00
e42d26f965 fix(package): update webpack to version 4.16.4 2018-08-02 13:54:31 +00:00
8f91a98b65 New translations ja.yml (Catalan) 2018-08-02 19:13:40 +09:00
58f62e21ff New translations ja.yml (Portuguese) 2018-08-02 19:13:37 +09:00
fc45d47e15 New translations ja.yml (Korean) 2018-08-02 19:13:35 +09:00
5409bc6392 New translations ja.yml (Polish) 2018-08-02 19:13:33 +09:00
dcad453069 New translations ja.yml (Chinese Simplified) 2018-08-02 19:13:31 +09:00
5ef1678a8c New translations ja.yml (Italian) 2018-08-02 19:13:29 +09:00
a682dff069 New translations ja.yml (Russian) 2018-08-02 19:13:27 +09:00
8afa11913c New translations ja.yml (English) 2018-08-02 19:13:25 +09:00
2cf139145e New translations ja.yml (Spanish) 2018-08-02 19:13:23 +09:00
a219bee4f0 New translations ja.yml (German) 2018-08-02 19:13:20 +09:00
2efb0972f6 New translations ja.yml (French) 2018-08-02 19:13:18 +09:00
7b33c63f78 #332 (#2065) 2018-08-02 19:03:31 +09:00
0df093383d Refactoring 2018-08-02 15:35:22 +09:00
cdf65aedcb Merge branch 'master' of https://github.com/syuilo/misskey 2018-08-02 14:24:38 +09:00
b9dfb937f1 Fix bug 2018-08-02 14:24:27 +09:00
2ea3b57499 fix(package): update @types/mongodb to version 3.1.3 2018-08-02 14:21:02 +09:00
fd9200cbb0 fix(package): update @types/webpack to version 4.4.9 2018-08-02 14:20:49 +09:00
40d422c6f3 Merge pull request #2060 from syuilo/l10n_master
New Crowdin translations
2018-08-02 10:34:13 +09:00
9d6bbbc4e3 New translations ja.yml (English) 2018-08-02 10:10:51 +09:00
3fa8433a0e Merge branch 'master' into l10n_master 2018-08-02 10:05:41 +09:00
82af341261 New translations ja.yml (Catalan) 2018-08-02 10:01:14 +09:00
436519f4f4 New translations ja.yml (Portuguese) 2018-08-02 10:01:12 +09:00
6be5984868 New translations ja.yml (Korean) 2018-08-02 10:01:10 +09:00
503d10145a New translations ja.yml (Polish) 2018-08-02 10:01:07 +09:00
97ed8d1728 New translations ja.yml (Chinese Simplified) 2018-08-02 10:01:04 +09:00
8c16ed243a New translations ja.yml (Italian) 2018-08-02 10:01:02 +09:00
0c482175a2 New translations ja.yml (Russian) 2018-08-02 10:00:59 +09:00
acfd7896ea New translations ja.yml (English) 2018-08-02 10:00:57 +09:00
8d6e0bd43d New translations ja.yml (Spanish) 2018-08-02 10:00:55 +09:00
b35ef61515 New translations ja.yml (German) 2018-08-02 10:00:53 +09:00
ec18dac5e5 New translations ja.yml (French) 2018-08-02 10:00:51 +09:00
ccdc33e476 ✌️ 2018-08-02 09:56:13 +09:00
3f5972be7b typo 2018-08-02 09:55:30 +09:00
70 changed files with 1889 additions and 907 deletions

1
.gitignore vendored
View File

@ -4,6 +4,7 @@
/node_modules
/build
/built
built
/data
/.cache-loader
npm-debug.log

View File

@ -6,6 +6,11 @@ common:
misskey: "A ⭐ of fediverse"
about-title: "A ⭐ of fediverse."
about: "Misskeyを見つけていただき、ありがとうございます。Misskeyは、地球で生まれた<b>分散マイクロブログSNS</b>です。Fediverse(様々なSNSで構成される宇宙)の中に存在するため、他のSNSと相互に繋がっています。暫し都会の喧騒から離れて、新しいインターネットにダイブしてみませんか。"
adblock:
detected: "広告ブロッカーを無効にしてください"
warning: "<strong>Misskeyは広告を掲載していません</strong>が、広告をブロックする機能が有効だと一部の機能が利用できなかったり、不具合が発生する場合があります。"
application-authorization: "アプリの連携"
close: "閉じる"
customization-tips:
title: "カスタマイズのヒント"
paragraph1: "ホームのカスタマイズでは、ウィジェットを追加/削除したり、ドラッグ&ドロップして並べ替えたりすることができます。"
@ -13,6 +18,14 @@ common:
paragraph3: "ウィジェットを削除するには、ヘッダーの<strong>「ゴミ箱」</strong>と書かれたエリアにウィジェットをドラッグ&ドロップします。"
paragraph4: "カスタマイズを終了するには、右上の「完了」をクリックします。"
gotit: "Got it!"
notification:
file-uploaded: "ファイルがアップロードされました"
message-from: "{}さんからメッセージ:"
reversi-invited: "対局への招待があります"
reversi-invited-by: "{}さんから"
notified-by: "{}さんから"
reply-from: "{}さんから返信:"
quoted-by: "{}さんが引用:"
name: "Misskey"
time:
unknown: "なぞのじかん"
@ -26,6 +39,12 @@ common:
months_ago: "{}ヶ月前"
years_ago: "{}年前"
trash: "ゴミ箱"
date:
full-year: "年"
month: "月"
day: "日"
hours: "時"
minutes: "分"
weekday-short:
sunday: "日"
monday: "月"
@ -121,7 +140,35 @@ common:
rename: "名前を変更"
stack-left: "左に重ねる"
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:
matching:
waiting-for: "{}を待っています"
cancel: "キャンセル"
common/views/components/games/reversi/reversi.index.vue:
title: "Misskey Reversi"
sub-title: "他のMisskeyユーザーとリバーシで対戦しよう"
invite: "招待"
@ -136,9 +183,6 @@ common/views/components/games/reversi/reversi.vue:
game-state:
ended: "終了"
playing: "進行中"
matching:
waiting-for: "{}を待っています"
cacnel: "キャンセル"
common/views/components/games/reversi/reversi.room.vue:
settings-of-the-game: "ゲームの設定"
choose-map: "マップを選択"
@ -150,7 +194,7 @@ common/views/components/games/reversi/reversi.room.vue:
looped-map: "ループマップ"
can-put-everywhere: "どこでも置けるモード"
settings-of-the-bot: "Botの設定"
this-gane-is-started-soon: "ゲームは数秒後に開始されます"
this-game-is-started-soon: "ゲームは数秒後に開始されます"
waiting-for-other: "相手の準備が完了するのを待っています"
waiting-for-me: "あなたの準備が完了するのを待っています"
waiting-for-both: "準備中"
@ -751,8 +795,7 @@ desktop/views/pages/search.vue:
not-available: "検索機能を利用することができません。"
not-found: "「{}」に関する投稿は見つかりませんでした。"
desktop/views/pages/share.vue:
share-with: "Misskeyで共有"
close: "閉じる"
share-with: "{}で共有"
desktop/views/pages/tag.vue:
no-posts-found: "ハッシュタグ「{}」が付けられた投稿は見つかりませんでした。"
desktop/views/pages/user-list.users.vue:
@ -959,8 +1002,11 @@ mobile/views/pages/welcome.vue:
signup: "新規登録"
mobile/views/pages/widgets.vue:
dashboard: "ダッシュボード"
widgets-hints: "ウィジェットを追加/削除したり並べ替えたりできます。ウィジェットを移動するには「三」をドラッグします。ウィジェットを削除するには「x」をタップします。いくつかのウィジェットはタップすることで表示を変更できます。"
mobile/views/pages/widgets/activity.vue:
activity: "アクティビティ"
mobile/views/pages/share.vue:
share-with: "{}で共有"
mobile/views/pages/messaging.vue:
messaging: "メッセージ"
mobile/views/pages/messaging-room.vue:
@ -976,7 +1022,7 @@ mobile/views/pages/note.vue:
mobile/views/pages/notifications.vue:
notifications: "通知"
read-all: "すべての通知を既読にしますか?"
mobile/views/pages/reversi.vue:
mobile/views/pages/games/reversi.vue:
reversi: "リバーシ"
mobile/views/pages/settings/settings.profile.vue:
title: "プロフィール"

View File

@ -6,6 +6,11 @@ common:
misskey: "A ⭐ of fediverse"
about-title: "A ⭐ of fediverse."
about: "Misskeyを見つけていただき、ありがとうございます。Misskeyは、地球で生まれた<b>分散マイクロブログSNS</b>です。Fediverse(様々なSNSで構成される宇宙)の中に存在するため、他のSNSと相互に繋がっています。暫し都会の喧騒から離れて、新しいインターネットにダイブしてみませんか。"
adblock:
detected: "広告ブロッカーを無効にしてください"
warning: "<strong>Misskeyは広告を掲載していません</strong>が、広告をブロックする機能が有効だと一部の機能が利用できなかったり、不具合が発生する場合があります。"
application-authorization: "アプリの連携"
close: "閉じる"
customization-tips:
title: "カスタマイズのヒント"
paragraph1: "ホームのカスタマイズでは、ウィジェットを追加/削除したり、ドラッグ&ドロップして並べ替えたりすることができます。"
@ -13,6 +18,14 @@ common:
paragraph3: "ウィジェットを削除するには、ヘッダーの<strong>「ゴミ箱」</strong>と書かれたエリアにウィジェットをドラッグ&ドロップします。"
paragraph4: "カスタマイズを終了するには、右上の「完了」をクリックします。"
gotit: "Got it!"
notification:
file-uploaded: "ファイルがアップロードされました"
message-from: "{}さんからメッセージ:"
reversi-invited: "対局への招待があります"
reversi-invited-by: "{}さんから"
notified-by: "{}さんから"
reply-from: "{}さんから返信:"
quoted-by: "{}さんが引用:"
name: "Misskey"
time:
unknown: "Unbekannt"
@ -26,6 +39,12 @@ common:
months_ago: "vor {0} Monat{0:en}"
years_ago: "vor {} Jahr{0:en}"
trash: "ゴミ箱"
date:
full-year: "年"
month: "月"
day: "日"
hours: "時"
minutes: "分"
weekday-short:
sunday: "So"
monday: "Mo"
@ -121,7 +140,35 @@ common:
rename: "Umbenennen"
stack-left: "Nach links schichten"
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:
matching:
waiting-for: "{}を待っています"
cancel: "キャンセル"
common/views/components/games/reversi/reversi.index.vue:
title: "Misskey Reversi"
sub-title: "他のMisskeyユーザーとリバーシで対戦しよう"
invite: "招待"
@ -136,9 +183,6 @@ common/views/components/games/reversi/reversi.vue:
game-state:
ended: "終了"
playing: "進行中"
matching:
waiting-for: "{}を待っています"
cacnel: "キャンセル"
common/views/components/games/reversi/reversi.room.vue:
settings-of-the-game: "ゲームの設定"
choose-map: "マップを選択"
@ -150,7 +194,7 @@ common/views/components/games/reversi/reversi.room.vue:
looped-map: "ループマップ"
can-put-everywhere: "どこでも置けるモード"
settings-of-the-bot: "Botの設定"
this-gane-is-started-soon: "ゲームは数秒後に開始されます"
this-game-is-started-soon: "ゲームは数秒後に開始されます"
waiting-for-other: "相手の準備が完了するのを待っています"
waiting-for-me: "あなたの準備が完了するのを待っています"
waiting-for-both: "準備中"
@ -751,8 +795,7 @@ desktop/views/pages/search.vue:
not-available: "検索機能を利用することができません。"
not-found: "「{}」に関する投稿は見つかりませんでした。"
desktop/views/pages/share.vue:
share-with: "Misskeyで共有"
close: "閉じる"
share-with: "{}で共有"
desktop/views/pages/tag.vue:
no-posts-found: "ハッシュタグ「{}」が付けられた投稿は見つかりませんでした。"
desktop/views/pages/user-list.users.vue:
@ -959,8 +1002,11 @@ mobile/views/pages/welcome.vue:
signup: "新規登録"
mobile/views/pages/widgets.vue:
dashboard: "ダッシュボード"
widgets-hints: "ウィジェットを追加/削除したり並べ替えたりできます。ウィジェットを移動するには「三」をドラッグします。ウィジェットを削除するには「x」をタップします。いくつかのウィジェットはタップすることで表示を変更できます。"
mobile/views/pages/widgets/activity.vue:
activity: "アクティビティ"
mobile/views/pages/share.vue:
share-with: "{}で共有"
mobile/views/pages/messaging.vue:
messaging: "メッセージ"
mobile/views/pages/messaging-room.vue:
@ -976,7 +1022,7 @@ mobile/views/pages/note.vue:
mobile/views/pages/notifications.vue:
notifications: "通知"
read-all: "すべての通知を既読にしますか?"
mobile/views/pages/reversi.vue:
mobile/views/pages/games/reversi.vue:
reversi: "リバーシ"
mobile/views/pages/settings/settings.profile.vue:
title: "Profil"

View File

@ -6,6 +6,11 @@ common:
misskey: "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?"
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"
customization-tips:
title: "Customization tips"
paragraph1: "Home customization allows you to add/delete, drag and drop and rearrange widgets."
@ -13,6 +18,14 @@ common:
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."
gotit: "Got it!"
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 {}:"
name: "Misskey"
time:
unknown: "unknown"
@ -26,6 +39,12 @@ common:
months_ago: "{}month(s) ago"
years_ago: "{}year(s) ago"
trash: "Trash"
date:
full-year: "Year"
month: "Month"
day: "Day"
hours: "Hour"
minutes: "Minutes"
weekday-short:
sunday: "S"
monday: "M"
@ -121,14 +140,42 @@ common:
rename: "Rename"
stack-left: "Stack to the left"
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:
matching:
waiting-for: "Waiting for {}"
cancel: "Cancel"
common/views/components/games/reversi/reversi.index.vue:
title: "Misskey Reversi"
sub-title: "Play reversi with your friends!"
invite: "Invite"
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."
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!"
my-games: "My games"
all-games: "All games"
@ -136,9 +183,6 @@ common/views/components/games/reversi/reversi.vue:
game-state:
ended: "Ended"
playing: "In Progress"
matching:
waiting-for: "Waiting for {}"
cacnel: "Cancel"
common/views/components/games/reversi/reversi.room.vue:
settings-of-the-game: "Game settings"
choose-map: "Choose a 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"
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-me: "Waiting for the your preparation"
waiting-for-both: "Waiting for yours"
@ -751,10 +795,9 @@ desktop/views/pages/search.vue:
not-available: "The search function can not be used."
not-found: "No posts were found for '{}'"
desktop/views/pages/share.vue:
share-with: "Share with Misskey"
close: "Close"
share-with: "Share with {}."
desktop/views/pages/tag.vue:
no-posts-found: "ハッシュタグ「{}」が付けられた投稿は見つかりませんでした。"
no-posts-found: "No posts \"{}\" found."
desktop/views/pages/user-list.users.vue:
users: "User"
add-user: "Add a user"
@ -954,13 +997,16 @@ mobile/views/pages/home.vue:
hybrid: "Social"
global: "Global"
mobile/views/pages/tag.vue:
no-posts-found: "ハッシュタグ「{}」が付けられた投稿は見つかりませんでした。"
no-posts-found: "No posts \"{}\" found."
mobile/views/pages/welcome.vue:
signup: "Sign up"
mobile/views/pages/widgets.vue:
dashboard: "Dashboard"
widgets-hints: "ウィジェットを追加/削除したり並べ替えたりできます。ウィジェットを移動するには「三」をドラッグします。ウィジェットを削除するには「x」をタップします。いくつかのウィジェットはタップすることで表示を変更できます。"
mobile/views/pages/widgets/activity.vue:
activity: "Activity"
mobile/views/pages/share.vue:
share-with: "Share with {}."
mobile/views/pages/messaging.vue:
messaging: "Messaging"
mobile/views/pages/messaging-room.vue:
@ -976,7 +1022,7 @@ mobile/views/pages/note.vue:
mobile/views/pages/notifications.vue:
notifications: "Notifications"
read-all: "Do you wish to mark all notifications as read?"
mobile/views/pages/reversi.vue:
mobile/views/pages/games/reversi.vue:
reversi: "Reversi"
mobile/views/pages/settings/settings.profile.vue:
title: "Profile"

View File

@ -6,13 +6,26 @@ common:
misskey: "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?"
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"
customization-tips:
title: "カスタマイズのヒント"
paragraph1: "ホームのカスタマイズでは、ウィジェットを追加/削除したり、ドラッグ&ドロップして並べ替えたりすることができます。"
paragraph2: "一部のウィジェットは、<strong><strong>右</strong>クリック</strong>することで表示を変更することができます。"
paragraph3: "ウィジェットを削除するには、ヘッダーの<strong>「ゴミ箱」</strong>と書かれたエリアにウィジェットをドラッグ&ドロップします。"
paragraph4: "カスタマイズを終了するには、右上の「完了」をクリックします。"
gotit: "Got it!"
title: "Consejos de personalización"
paragraph1: "Customización de inicio le permite agregar, borrar, o reorganizar los accesorios."
paragraph2: "Puede cambiar la visualización de algunos accesorios haciendo <strong> click derecho.</strong>"
paragraph3: "Para borrar un widget, <strong> desplace el accesorio hasta el área etiquetada \"Papelera\"</strong> en el encabezado."
paragraph4: "Para finalizar la personalización, cliquee \"Finalizar\" en la parte de arriba a la derecha."
gotit: "¡Comprendido!"
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 {}:"
name: "Misskey"
time:
unknown: "Desconocido"
@ -25,7 +38,13 @@ common:
weeks_ago: "Hace {} semana(s)"
months_ago: "Hace {} mes(es)"
years_ago: "Hace {} año(s)"
trash: "ゴミ箱"
trash: "Papelera"
date:
full-year: "Año"
month: "Mes"
day: "Día"
hours: "horas"
minutes: "minutos"
weekday-short:
sunday: "domingo"
monday: "lunes"
@ -35,13 +54,13 @@ common:
friday: "viernes"
saturday: "sábado"
weekday:
sunday: "日曜日"
monday: "月曜日"
tuesday: "火曜日"
wednesday: "水曜日"
thursday: "木曜日"
friday: "金曜日"
saturday: "土曜日"
sunday: "Domingo"
monday: "Lunes"
tuesday: "Martes"
wednesday: "Miércoles"
thursday: "Jueves"
friday: "Viernes"
saturday: "Sábado"
reactions:
like: "me gusta"
love: "amor"
@ -59,27 +78,27 @@ common:
d: "¿Quieres decir algo?"
e: "¡Escribe aquí!"
f: "Esperando a que escribas algo..."
search: "検索"
search: "Buscar"
delete: "eliminar"
loading: "cargando"
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."
my-token-regenerated: "Tu token se ha regenerado vas a ser desconectado."
i-like-sushi: "私は(プリンよりむしろ)寿司が好き"
show-reversi-board-labels: "リバーシのボードの行と列のラベルを表示"
verified-user: "認証済みのユーザー"
i-like-sushi: "Prefiero sushi a pudín"
show-reversi-board-labels: "Mostrar etiquetas de filas y columnas en Reversi"
verified-user: "Usuario verificado"
reversi:
drawn: "引き分け"
my-turn: "あなたのターンです"
opponent-turn: "相手のターンです"
turn-of: "{}のターンです"
past-turn-of: "{}のターン"
won: "{}の勝ち"
black: ""
white: ""
total: "合計"
this-turn: "{}ターン目"
drawn: "Empatado"
my-turn: "Mi turno"
opponent-turn: "Turno del oponente"
turn-of: "Es turno de {}"
past-turn-of: "Turno de {}"
won: "{} ha ganado"
black: "Negro"
white: "Blanco"
total: "Total"
this-turn: "Turno de {}"
widgets:
analog-clock: "Reloj analógico"
profile: "Perfil"
@ -108,7 +127,7 @@ common:
widgets: "Accesorios"
home: "Inicio"
local: "Local"
hybrid: "ソーシャル"
hybrid: "Social"
global: "Global"
notifications: "Notificaciones"
list: "Listado"
@ -121,7 +140,35 @@ common:
rename: "Renombrar"
stack-left: "A la izqda."
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:
matching:
waiting-for: "Esperando por {}"
cancel: "Cancelar"
common/views/components/games/reversi/reversi.index.vue:
title: "Misskey Reversi"
sub-title: "他のMisskeyユーザーとリバーシで対戦しよう"
invite: "招待"
@ -136,27 +183,24 @@ common/views/components/games/reversi/reversi.vue:
game-state:
ended: "終了"
playing: "進行中"
matching:
waiting-for: "{}を待っています"
cacnel: "キャンセル"
common/views/components/games/reversi/reversi.room.vue:
settings-of-the-game: "ゲームの設定"
choose-map: "マップを選択"
random: "ランダム"
black-or-white: "先手/後手"
black-is: "{}が黒"
rules: "ルール"
is-llotheo: "石の少ない方が勝ち(ロセオ)"
looped-map: "ループマップ"
can-put-everywhere: "どこでも置けるモード"
settings-of-the-bot: "Botの設定"
this-gane-is-started-soon: "ゲームは数秒後に開始されます"
waiting-for-other: "相手の準備が完了するのを待っています"
waiting-for-me: "あなたの準備が完了するのを待っています"
waiting-for-both: "準備中"
cancel: "キャンセル"
ready: "準備完了"
cancel-ready: "準備続行"
settings-of-the-game: "Configuración de juego"
choose-map: "Elije un mapa"
random: "Aleatorio"
black-or-white: "Negro/Blanco"
black-is: "Negro es {}"
rules: "Reglas"
is-llotheo: "El que tenga menos gana"
looped-map: "Mapa en bucle"
can-put-everywhere: "Puedes colocar donde quieras"
settings-of-the-bot: "Configuración de bot"
this-game-is-started-soon: "ゲームは数秒後に開始されます"
waiting-for-other: "Esperando a que se prepare el adversario"
waiting-for-me: "Esperando por la preparación"
waiting-for-both: "Esperando por ti"
cancel: "Cancelar"
ready: "Listo"
cancel-ready: "Cancelar \"Listo\""
common/views/components/connect-failed.vue:
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."
@ -287,48 +331,48 @@ common/views/widgets/broadcast.vue:
have-a-nice-day: "¡Buenos dias!"
next: "Siguiente"
common/views/widgets/calendar.vue:
year: "{}"
month: "{}"
day: "{}"
today: "今日:"
this-month: "今月:"
this-year: "今年:"
year: "Año {}"
month: "Mes {}"
day: "Día {}"
today: "Hoy:"
this-month: "Este mes:"
this-year: "Este año:"
common/views/widgets/donation.vue:
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:
title: "フォトストリーム"
no-photos: "写真はありません"
title: "Galería de fotos"
no-photos: "No hay fotos."
common/views/widgets/posts-monitor.vue:
title: "投稿チャート"
toggle: "表示を切り替え"
title: "Tabla de publicaciones"
toggle: "Alternar vistas"
common/views/widgets/hashtags.vue:
title: "ハッシュタグ"
count: "{}人が投稿"
empty: "トレンドなし"
title: "Etiquetas"
count: "{} usuarios mencionados"
empty: "Ninguna tendencia popular ahora"
common/views/widgets/server.vue:
title: "サーバー情報"
toggle: "表示を切り替え"
title: "Información del servidor"
toggle: "Alternar vistas"
common/views/widgets/memo.vue:
title: "付箋"
memo: "ここに書いて!"
save: "保存"
title: "Notas"
memo: "¡Escribe aquí!"
save: "Guardar"
common/views/widgets/slideshow.vue:
folder-customize-mode: "フォルダを指定するには、カスタマイズモードを終了してください"
folder: "クリックしてフォルダを指定してください"
no-image: "このフォルダには画像がありません"
folder-customize-mode: "Para especificar una carpeta, por favor sal de modo de personalización"
folder: "Por favor, cliquea y especifica una carpeta"
no-image: "No hay imágenes en esta carpeta"
common/views/widgets/tips.vue:
tips-line1: "<kbd>t</kbd>でタイムラインにフォーカスできます"
tips-line2: "<kbd>p</kbd>または<kbd>n</kbd>で投稿フォームを開きます"
tips-line3: "投稿フォームにはファイルをドラッグ&ドロップできます"
tips-line4: "投稿フォームにクリップボードにある画像データをペーストできます"
tips-line5: "ドライブにファイルをドラッグ&ドロップしてアップロードできます"
tips-line6: "ドライブでファイルをドラッグしてフォルダ移動できます"
tips-line7: "ドライブでフォルダをドラッグしてフォルダ移動できます"
tips-line8: "ホームは設定からカスタマイズできます"
tips-line9: "MisskeyAGPLv3です"
tips-line10: "タイムマシンウィジェットを利用すると、簡単に過去のタイムラインに遡れます"
tips-line11: "投稿の ... をクリックして、投稿をユーザーページにピン留めできます"
tips-line1: "Puedes enfocarte en las publicaciones con <kbd>t</kbd>"
tips-line2: "Abrir formulario de publicación con <kbd>p</kbd> or <kbd>n</kbd>"
tips-line3: "Puedes arrastrar y soltar archivos en el formulario de publicación"
tips-line4: "Puedes pegar una imagen del portapapeles en el formulario de publicación"
tips-line5: "Puedes cargar archivos con sólo arrastrarlos y soltarlos en Drive"
tips-line6: "Puedes mover una carpeta arrastrándola hacia el Drive"
tips-line7: "Puedes mover una carpeta arrastrándola hacia el Drive"
tips-line8: "Inicio se puede personalizar desde la configuración"
tips-line9: "Misskey está hecho bajo licencia AGPLv3"
tips-line10: "Usando el accesorio de Máquina del Tiempo puedes encontrar publicaciones antiguas"
tips-line11: "Puedes resaltar publicaciones en la página de usuario haciendo click en \"...\""
tips-line13: "投稿に添付したファイルは全てドライブに保存されます"
tips-line14: "ホームのカスタマイズ中、ウィジェットを右クリックしてデザインを変更できます"
tips-line17: "「**」でテキストを囲むと**強調表示**されます"
@ -453,66 +497,66 @@ desktop/views/components/game-window.vue:
game: "リバーシ"
desktop/views/components/home.vue:
done: "完了"
add-widget: "ウィジェットを追加:"
add: "追加"
add-widget: "Agregar accesorio:"
add: "Agregar"
desktop/views/input-dialog.vue:
cancel: "キャンセル"
ok: "決定"
cancel: "Cancelar"
ok: "OK"
desktop/views/components/messaging-room-window.vue:
title: "メッセージ:"
title: "Mensajes:"
desktop/views/components/messaging-window.vue:
title: "メッセージ"
title: "Mensajes"
desktop/views/components/note-detail.vue:
more: "会話をもっと読み込む"
private: "この投稿は非公開です"
deleted: "この投稿は削除されました"
reposted-by: "{}がRenote"
location: "位置情報"
renote: "Renote"
add-reaction: "リアクション"
more: "Cargar más conversaciones"
private: "Esta publicación es privada"
deleted: "Esta publicación ha sido removida"
reposted-by: "Republicado por {}"
location: "Localización"
renote: "Republicar"
add-reaction: "Agregar una reacción"
desktop/views/components/notes.note.vue:
reposted-by: "{}がRenote"
reply: "返信"
renote: "Renote"
add-reaction: "リアクション"
detail: "詳細"
private: "この投稿は非公開です"
deleted: "この投稿は削除されました"
reposted-by: "Republicado por {}"
reply: "Responder"
renote: "Republicar"
add-reaction: "Agregar una reacción"
detail: "Mostrar detalles"
private: "Esta publicación es privada"
deleted: "Esta publicación ha sido borrada"
desktop/views/components/notes.vue:
error: "読み込みに失敗しました。"
retry: "リトライ"
load-more: "もっと読み込む"
error: "Error al cargar."
retry: "Reintentar"
load-more: "Leer más"
desktop/views/components/notifications.vue:
more: "もっと見る"
empty: "ありません!"
more: "Más"
empty: "No hay notificaciones"
desktop/views/components/post-form.vue:
add-visible-user: "+ユーザーを追加"
attach-location-information: "位置情報を添付する"
hide-contents: "内容を隠す"
reply-placeholder: "この投稿への返信..."
quote-placeholder: "この投稿を引用..."
submit: "投稿"
reply: "返信"
renote: "Renote"
posted: "投稿しました!"
replied: "返信しました!"
reposted: "Renoteしました"
note-failed: "投稿に失敗しました"
reply-failed: "返信に失敗しました"
renote-failed: "Renoteに失敗しました"
posting: "投稿中"
attach-media-from-local: "PCからメディアを添付"
add-visible-user: "+Agregar usuario"
attach-location-information: "Agregar localización"
hide-contents: "Esconder contenidos"
reply-placeholder: "Responder a esta nota..."
quote-placeholder: "Citar esta nota..."
submit: "Publicar"
reply: "Responder"
renote: "Republicar"
posted: "¡Publicado!"
replied: "¡Respondido!"
reposted: "¡Republicado!"
note-failed: "Error al publicar nota"
reply-failed: "Error al responder"
renote-failed: "Error al republicar"
posting: "Publicando"
attach-media-from-local: "Agregar medios de tu dispositivo"
attach-media-from-drive: "Adjunta multimedia desde tu Disco"
attach-cancel: "Quitar el archivo adjunto"
insert-a-kao: "v('ω')v"
create-poll: "Crea una encuesta"
text-remain: "quedan {} caracteres"
recent-tags: "最近"
click-to-tagging: "クリックでタグ付け"
visibility: "公開範囲"
geolocation-alert: "お使いの端末は位置情報に対応していません"
error: "エラー"
enter-username: "ユーザー名を入力してください"
recent-tags: "Reciente"
click-to-tagging: "Click para etiquetar"
visibility: "Visibilidad"
geolocation-alert: "Tu dispositivo no tiene soporte de geolocalización."
error: "Error"
enter-username: "Por favor escribe un nombre de usuario..."
desktop/views/components/post-form-window.vue:
note: "Nota nueva"
reply: "Responder"
@ -553,8 +597,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."
display: "Diseño y pantalla"
customize: "Personaliza la página principal"
choose-wallpaper: "壁紙を選択"
delete-wallpaper: "壁紙を削除"
choose-wallpaper: "Elije un fondo"
delete-wallpaper: "Suprimir fondo"
dark-mode: "Modo Nocturno"
circle-icons: "Usar iconos circulares"
gradient-window-header: "Usar degradados en las cabeceras de las páginas"
@ -610,38 +654,38 @@ desktop/views/components/settings.2fa.vue:
intro: "二段階認証を設定すると、サインイン時にパスワードだけでなく、予め登録しておいた物理的なデバイス(例えばあなたのスマートフォンなど)も必要になり、よりセキュリティが向上します。"
detail: "詳細..."
url: "https://www.google.co.jp/intl/ja/landing/2step/"
caution: "登録したデバイスを紛失するなどした場合、Misskeyにサインインできなくなりますのでご注意ください。"
register: "デバイスを登録する"
already-registered: "既に設定は完了しています。"
unregister: "設定を解除"
unregistered: "二段階認証が無効になりました。"
enter-password: "パスワードを入力してください"
authenticator: "まず、Google Authenticatorをお使いのデバイスにインストールします:"
howtoinstall: "インストール方法はこちら"
scan: "次に、表示されているQRコードをスキャンします:"
done: "お使いのデバイスに表示されているトークンを入力して完了します:"
submit: "完了"
success: "設定が完了しました!"
failed: "設定に失敗しました。トークンに誤りがないかご確認ください。"
info: "次回サインインからは、同様にパスワードに加えてデバイスに表示されているトークンを入力します。"
caution: "Si pierdes acceso al dispositivo, no podrás conectarte a Misskey."
register: "Registrar un dispositivo"
already-registered: "Un dispositivo ya fue registrado"
unregister: "Inhabilitado"
unregistered: "Autenticación de dos pasos fue deshabilitada."
enter-password: "Escribe una contraseña"
authenticator: "Primero, necesitas instalar Google Authenticator en tu dispositivo:"
howtoinstall: "Cómo instalar"
scan: "Luego, escanea el código QR:"
done: "Por favor ingresa el token mostrado en tu dispositivo:"
submit: "Enviar"
success: "¡Configuraciones guardadas!"
failed: "Error al configurar. Por favor asegúrate de que el token es correcto."
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:
intro: "APIを利用するには、上記のトークンを「i」というキーでパラメータに付加してリクエストします。"
caution: "アカウントを不正利用される可能性があるため、このトークンは第三者に教えないでください(アプリなどにも入力しないでください)。"
regeneration-of-token: "万が一このトークンが漏れたりその可能性がある場合はトークンを再生成できます。"
regenerate-token: "トークンを再生成"
intro: "Para acceder al API, configura este token como la letra \"i\" de los parámetros requeridos."
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: "En el caso no deseado de que este token lo tenga otra persona, puedes regenerarlo."
regenerate-token: "Regenerar el token"
token: "Token:"
enter-password: "パスワードを入力してください"
enter-password: "Por favor ingresa tu contraseña"
desktop/views/components/settings.apps.vue:
no-apps: "連携しているアプリケーションはありません"
no-apps: "No hay aplicaciones asociadas"
desktop/views/components/settings.drive.vue:
max: ""
in-use: "使用中"
max: "Max"
in-use: "en uso."
desktop/views/components/settings.mute.vue:
no-users: "ミュートしているユーザーはいません"
no-users: "No hay usuarios silenciados"
desktop/views/components/settings.password.vue:
reset: "パスワードを変更する"
enter-current-password: "現在のパスワードを入力してください"
enter-new-password: "新しいパスワードを入力してください"
reset: "Cambiar contraseña"
enter-current-password: "Ingresar contraseña actual"
enter-new-password: "Ingresar nueva contraseña"
enter-new-password-again: "もう一度新しいパスワードを入力してください"
not-match: "新しいパスワードが一致しません"
changed: "パスワードを変更しました"
@ -751,8 +795,7 @@ desktop/views/pages/search.vue:
not-available: "検索機能を利用することができません。"
not-found: "「{}」に関する投稿は見つかりませんでした。"
desktop/views/pages/share.vue:
share-with: "Misskeyで共有"
close: "閉じる"
share-with: "{}で共有"
desktop/views/pages/tag.vue:
no-posts-found: "ハッシュタグ「{}」が付けられた投稿は見つかりませんでした。"
desktop/views/pages/user-list.users.vue:
@ -959,8 +1002,11 @@ mobile/views/pages/welcome.vue:
signup: "新規登録"
mobile/views/pages/widgets.vue:
dashboard: "ダッシュボード"
widgets-hints: "ウィジェットを追加/削除したり並べ替えたりできます。ウィジェットを移動するには「三」をドラッグします。ウィジェットを削除するには「x」をタップします。いくつかのウィジェットはタップすることで表示を変更できます。"
mobile/views/pages/widgets/activity.vue:
activity: "アクティビティ"
mobile/views/pages/share.vue:
share-with: "{}で共有"
mobile/views/pages/messaging.vue:
messaging: "メッセージ"
mobile/views/pages/messaging-room.vue:
@ -976,7 +1022,7 @@ mobile/views/pages/note.vue:
mobile/views/pages/notifications.vue:
notifications: "通知"
read-all: "すべての通知を既読にしますか?"
mobile/views/pages/reversi.vue:
mobile/views/pages/games/reversi.vue:
reversi: "リバーシ"
mobile/views/pages/settings/settings.profile.vue:
title: "プロフィール"

View File

@ -6,6 +6,11 @@ common:
misskey: "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 ?"
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"
customization-tips:
title: "Conseils de personnalisation"
paragraph1: "La personnalisation à la maison vous permet d'ajouter / supprimer, glisser et déposer et réorganiser les widgets."
@ -13,6 +18,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."
paragraph4: "Pour terminer la personnalisation, cliquez sur \"Terminer\" dans le coin supérieur droit."
gotit: "Compris!"
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 {} :"
name: "Misskey"
time:
unknown: "inconnu"
@ -26,6 +39,12 @@ common:
months_ago: "Il y a {} mois"
years_ago: "Il y a {} an·s"
trash: "Corbeille"
date:
full-year: "Année "
month: "Mois"
day: "Jour"
hours: "heures"
minutes: "minutes"
weekday-short:
sunday: "D"
monday: "L"
@ -35,13 +54,13 @@ common:
friday: "V"
saturday: "S"
weekday:
sunday: "日曜日"
monday: "月曜日"
tuesday: "火曜日"
wednesday: "水曜日"
thursday: "木曜日"
friday: "金曜日"
saturday: "土曜日"
sunday: "Dimanche"
monday: "Lundi"
tuesday: "Mardi"
wednesday: "Mercredi"
thursday: "Jeudi"
friday: "Vendredi"
saturday: "Samedi"
reactions:
like: "Aime"
love: "Adore"
@ -76,10 +95,10 @@ common:
turn-of: "Cest le tour de {}"
past-turn-of: "C'est au tour de {}"
won: "{} a gagné"
black: ""
white: ""
total: "合計"
this-turn: "{}ターン目"
black: "Noirs"
white: "Blancs"
total: "Total"
this-turn: "Tour de {}"
widgets:
analog-clock: "Horloge analogique"
profile: "Profil"
@ -121,41 +140,66 @@ common:
rename: "Renommer"
stack-left: "Vers la gauche"
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 laccès"
auth/views/index.vue:
loading: "Chargement en cours"
denied: "アプリケーションの連携をキャンセルしました。"
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:
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:
waiting-for: "{}を待っています"
cacnel: "キャンセル"
waiting-for: "En attente de {}"
cancel: "Annuler"
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:
settings-of-the-game: "ゲームの設定"
choose-map: "マップを選択"
random: "ランダム"
black-or-white: "先手/後手"
black-is: "{}が黒"
rules: "ルール"
settings-of-the-game: "Paramètres du jeu"
choose-map: "Sélectionnez une carte"
random: "Aléatoire"
black-or-white: "Noirs/Blancs"
black-is: "{} Noirs"
rules: "Règles"
is-llotheo: "石の少ない方が勝ち(ロセオ)"
looped-map: "ループマップ"
looped-map: "Carte en boucle"
can-put-everywhere: "どこでも置けるモード"
settings-of-the-bot: "Botの設定"
this-gane-is-started-soon: "ゲームは数秒後に開始されます"
waiting-for-other: "相手の準備が完了するのを待っています"
waiting-for-me: "あなたの準備が完了するのを待っています"
settings-of-the-bot: "Configuration du bot"
this-game-is-started-soon: "La partie commencera dans quelques instants"
waiting-for-other: "En attente que l'adversaire soit prêt"
waiting-for-me: "En attente que vous soyez prêt"
waiting-for-both: "準備中"
cancel: "キャンセル"
ready: "準備完了"
cancel: "Annuler"
ready: "Prêt"
cancel-ready: "準備続行"
common/views/components/connect-failed.vue:
title: "Impossible de se connecter au server."
@ -287,12 +331,12 @@ common/views/widgets/broadcast.vue:
have-a-nice-day: "Passez une bonne journée!"
next: "Suivant"
common/views/widgets/calendar.vue:
year: "{}"
month: "{}"
day: "{}"
today: "今日:"
this-month: "今月:"
this-year: "今年:"
year: "{} année"
month: "{} mois"
day: "{} jour"
today: "Aujourd'hui :"
this-month: "Ce mois-ci :"
this-year: "Cette année :"
common/views/widgets/donation.vue:
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!"
@ -314,9 +358,9 @@ common/views/widgets/memo.vue:
memo: "Écrivez ici !"
save: "Enregistrer"
common/views/widgets/slideshow.vue:
folder-customize-mode: "フォルダを指定するには、カスタマイズモードを終了してください"
folder: "クリックしてフォルダを指定してください"
no-image: "このフォルダには画像がありません"
folder-customize-mode: "Veuillez quitter le mode personnalisé pour pouvour spécifier un dossier"
folder: "Veuillez cliquer pour spécifier le dossier"
no-image: "Il n'y a aucune image dans ce dossier"
common/views/widgets/tips.vue:
tips-line1: "<kbd>t</kbd>でタイムラインにフォーカスできます"
tips-line2: "<kbd>p</kbd>または<kbd>n</kbd>で投稿フォームを開きます"
@ -325,27 +369,27 @@ common/views/widgets/tips.vue:
tips-line5: "ドライブにファイルをドラッグ&ドロップしてアップロードできます"
tips-line6: "ドライブでファイルをドラッグしてフォルダ移動できます"
tips-line7: "ドライブでフォルダをドラッグしてフォルダ移動できます"
tips-line8: "ホームは設定からカスタマイズできます"
tips-line9: "MisskeyAGPLv3です"
tips-line8: "Vous pouvez personnaliser l'Accueil via les paramètres"
tips-line9: "Misskey est sous licence AGPLv3"
tips-line10: "タイムマシンウィジェットを利用すると、簡単に過去のタイムラインに遡れます"
tips-line11: "投稿の ... をクリックして、投稿をユーザーページにピン留めできます"
tips-line13: "投稿に添付したファイルは全てドライブに保存されます"
tips-line13: "Tous les fichiers attachés à cette publication sont sauvegardés dans le Drive"
tips-line14: "ホームのカスタマイズ中、ウィジェットを右クリックしてデザインを変更できます"
tips-line17: "「**」でテキストを囲むと**強調表示**されます"
tips-line19: "いくつかのウィンドウはブラウザの外に切り離すことができます"
tips-line20: "カレンダーウィジェットのパーセンテージは、経過の割合を示しています"
tips-line21: "APIを利用してbotの開発なども行えます"
tips-line21: "Vous pouvez aussi utiliser l'API pour développer des Bots."
tips-line23: "まゆかわいいよまゆ"
tips-line24: "Misskeyは2014年にサービスを開始しました"
tips-line24: "Misskey a vu le jour en 2014"
tips-line25: "対応ブラウザではMisskeyを開いていなくても通知を受け取れます"
common/views/pages/follow.vue:
signed-in-as: "Connecté en tant que {}"
signed-in-as: "Connecté·é en tant que {}"
following: "Suit"
follow: "Suivre"
request-pending: "Demande d'abonnement en attente"
follow-request: "Demande d'abonnement"
desktop/views/components/activity.chart.vue:
total: "Noir ... Total"
total: "Noirs ... Total"
notes: "Bleu ... Notes"
replies: "Rouge ... Réponses"
renotes: "Vert ... Partages"
@ -486,9 +530,9 @@ desktop/views/components/notifications.vue:
more: "Plus"
empty: "Pas de notifications"
desktop/views/components/post-form.vue:
add-visible-user: "+ユーザーを追加"
attach-location-information: "位置情報を添付する"
hide-contents: "内容を隠す"
add-visible-user: "+Ajouter un utilisateur"
attach-location-information: "Attacher des informations de localisation"
hide-contents: "Masquer les contenus"
reply-placeholder: "Répondre à cette note"
quote-placeholder: "Citer cette note"
submit: "Poster"
@ -508,11 +552,11 @@ desktop/views/components/post-form.vue:
create-poll: "Créer un sondage"
text-remain: "{} charactères restants"
recent-tags: "Récent"
click-to-tagging: "クリックでタグ付け"
visibility: "公開範囲"
geolocation-alert: "お使いの端末は位置情報に対応していません"
error: "エラー"
enter-username: "ユーザー名を入力してください"
click-to-tagging: "Cliquer pour tagguer"
visibility: "Visibilité"
geolocation-alert: "Votre appareil ne prend pas en charge les services de localisation"
error: "Erreur"
enter-username: "Saisir un nom d'utilisateur …"
desktop/views/components/post-form-window.vue:
note: "Nouvelle note"
reply: "Répondre"
@ -634,8 +678,8 @@ desktop/views/components/settings.api.vue:
desktop/views/components/settings.apps.vue:
no-apps: "Aucune application autorisée"
desktop/views/components/settings.drive.vue:
max: ""
in-use: "使用中"
max: "Maximum"
in-use: "en cours dutilisation"
desktop/views/components/settings.mute.vue:
no-users: "Aucun utilisateurs mis en sourdine"
desktop/views/components/settings.password.vue:
@ -658,7 +702,7 @@ desktop/views/components/settings.profile.vue:
other: "Autre"
is-bot: "Ce compte est un Bot"
is-cat: "Ce compte est un Chat"
profile-updated: "プロフィールを更新しました"
profile-updated: "Profil mis à jour"
desktop/views/components/sub-note-content.vue:
private: "cette publication est privée"
deleted: "cette publication a été supprimée"
@ -732,7 +776,7 @@ desktop/views/pages/welcome.vue:
signin-button: "Se connecter"
signup-button: "S'inscrire"
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:
title: "Lecteur de Misskey"
desktop/views/pages/favorites.vue:
@ -748,11 +792,10 @@ desktop/views/pages/selectdrive.vue:
cancel: "Annuler"
upload: "Uploader un ou plusieurs fichier(s) depuis votre PC"
desktop/views/pages/search.vue:
not-available: "検索機能を利用することができません。"
not-found: "「{}」に関する投稿は見つかりませんでした。"
not-available: "Vous ne pouvez pas utiliser la fonctionnalité de recherche."
not-found: "Aucun message trouvé pour '{}'"
desktop/views/pages/share.vue:
share-with: "Misskeyで共有"
close: "閉じる"
share-with: "Partager avec {}"
desktop/views/pages/tag.vue:
no-posts-found: "ハッシュタグ「{}」が付けられた投稿は見つかりませんでした。"
desktop/views/pages/user-list.users.vue:
@ -898,7 +941,7 @@ mobile/views/components/post-form.vue:
renote: "Republier"
quote-placeholder: "Citer ce billet ... (Facultatif)"
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"
error: "Erreur"
username-prompt: "Saisir un nom d'utilisateur"
@ -956,11 +999,14 @@ mobile/views/pages/home.vue:
mobile/views/pages/tag.vue:
no-posts-found: "ハッシュタグ「{}」が付けられた投稿は見つかりませんでした。"
mobile/views/pages/welcome.vue:
signup: "新規登録"
signup: "S'enregistrer"
mobile/views/pages/widgets.vue:
dashboard: "ダッシュボード"
dashboard: "Tableau de bord"
widgets-hints: "ウィジェットを追加/削除したり並べ替えたりできます。ウィジェットを移動するには「三」をドラッグします。ウィジェットを削除するには「x」をタップします。いくつかのウィジェットはタップすることで表示を変更できます。"
mobile/views/pages/widgets/activity.vue:
activity: "アクティビティ"
activity: "Activité"
mobile/views/pages/share.vue:
share-with: "Partager avec {}"
mobile/views/pages/messaging.vue:
messaging: "Messagerie"
mobile/views/pages/messaging-room.vue:
@ -976,8 +1022,8 @@ mobile/views/pages/note.vue:
mobile/views/pages/notifications.vue:
notifications: "Notifications"
read-all: "Êtes vous sûr de vouloir marqués toutes les notifications non-lus en tant que lus?"
mobile/views/pages/reversi.vue:
reversi: "リバーシ"
mobile/views/pages/games/reversi.vue:
reversi: "Reversi"
mobile/views/pages/settings/settings.profile.vue:
title: "Profil"
name: "Nom"
@ -998,7 +1044,7 @@ mobile/views/pages/search.vue:
mobile/views/pages/selectdrive.vue:
select-file: "Choisissez un fichier"
mobile/views/pages/settings.vue:
signed-in-as: "Connecté en tant que {}"
signed-in-as: "Connecté·e en tant que {}"
lang: "Langue"
lang-tip: "Le rechargement de la page est requis afin d'appliquer les modifications."
recommended: "Recommandé"

View File

@ -6,6 +6,11 @@ common:
misskey: "A ⭐ of fediverse"
about-title: "A ⭐ of fediverse."
about: "Misskeyを見つけていただき、ありがとうございます。Misskeyは、地球で生まれた<b>分散マイクロブログSNS</b>です。Fediverse(様々なSNSで構成される宇宙)の中に存在するため、他のSNSと相互に繋がっています。暫し都会の喧騒から離れて、新しいインターネットにダイブしてみませんか。"
adblock:
detected: "広告ブロッカーを無効にしてください"
warning: "<strong>Misskeyは広告を掲載していません</strong>が、広告をブロックする機能が有効だと一部の機能が利用できなかったり、不具合が発生する場合があります。"
application-authorization: "アプリの連携"
close: "閉じる"
customization-tips:
title: "カスタマイズのヒント"
paragraph1: "ホームのカスタマイズでは、ウィジェットを追加/削除したり、ドラッグ&ドロップして並べ替えたりすることができます。"
@ -13,6 +18,14 @@ common:
paragraph3: "ウィジェットを削除するには、ヘッダーの<strong>「ゴミ箱」</strong>と書かれたエリアにウィジェットをドラッグ&ドロップします。"
paragraph4: "カスタマイズを終了するには、右上の「完了」をクリックします。"
gotit: "Got it!"
notification:
file-uploaded: "ファイルがアップロードされました"
message-from: "{}さんからメッセージ:"
reversi-invited: "対局への招待があります"
reversi-invited-by: "{}さんから"
notified-by: "{}さんから"
reply-from: "{}さんから返信:"
quoted-by: "{}さんが引用:"
name: "Misskey"
time:
unknown: "なぞのじかん"
@ -26,6 +39,12 @@ common:
months_ago: "{}ヶ月前"
years_ago: "{}年前"
trash: "ゴミ箱"
date:
full-year: "年"
month: "月"
day: "日"
hours: "時"
minutes: "分"
weekday-short:
sunday: "日"
monday: "月"
@ -121,7 +140,35 @@ common:
rename: "名前を変更"
stack-left: "左に重ねる"
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:
matching:
waiting-for: "{}を待っています"
cancel: "キャンセル"
common/views/components/games/reversi/reversi.index.vue:
title: "Misskey Reversi"
sub-title: "他のMisskeyユーザーとリバーシで対戦しよう"
invite: "招待"
@ -136,9 +183,6 @@ common/views/components/games/reversi/reversi.vue:
game-state:
ended: "終了"
playing: "進行中"
matching:
waiting-for: "{}を待っています"
cacnel: "キャンセル"
common/views/components/games/reversi/reversi.room.vue:
settings-of-the-game: "ゲームの設定"
choose-map: "マップを選択"
@ -150,7 +194,7 @@ common/views/components/games/reversi/reversi.room.vue:
looped-map: "ループマップ"
can-put-everywhere: "どこでも置けるモード"
settings-of-the-bot: "Botの設定"
this-gane-is-started-soon: "ゲームは数秒後に開始されます"
this-game-is-started-soon: "ゲームは数秒後に開始されます"
waiting-for-other: "相手の準備が完了するのを待っています"
waiting-for-me: "あなたの準備が完了するのを待っています"
waiting-for-both: "準備中"
@ -751,8 +795,7 @@ desktop/views/pages/search.vue:
not-available: "検索機能を利用することができません。"
not-found: "「{}」に関する投稿は見つかりませんでした。"
desktop/views/pages/share.vue:
share-with: "Misskeyで共有"
close: "閉じる"
share-with: "{}で共有"
desktop/views/pages/tag.vue:
no-posts-found: "ハッシュタグ「{}」が付けられた投稿は見つかりませんでした。"
desktop/views/pages/user-list.users.vue:
@ -959,8 +1002,11 @@ mobile/views/pages/welcome.vue:
signup: "新規登録"
mobile/views/pages/widgets.vue:
dashboard: "ダッシュボード"
widgets-hints: "ウィジェットを追加/削除したり並べ替えたりできます。ウィジェットを移動するには「三」をドラッグします。ウィジェットを削除するには「x」をタップします。いくつかのウィジェットはタップすることで表示を変更できます。"
mobile/views/pages/widgets/activity.vue:
activity: "アクティビティ"
mobile/views/pages/share.vue:
share-with: "{}で共有"
mobile/views/pages/messaging.vue:
messaging: "メッセージ"
mobile/views/pages/messaging-room.vue:
@ -976,7 +1022,7 @@ mobile/views/pages/note.vue:
mobile/views/pages/notifications.vue:
notifications: "通知"
read-all: "すべての通知を既読にしますか?"
mobile/views/pages/reversi.vue:
mobile/views/pages/games/reversi.vue:
reversi: "リバーシ"
mobile/views/pages/settings/settings.profile.vue:
title: "プロフィール"

View File

@ -6,6 +6,11 @@ common:
misskey: "A ⭐ of fediverse"
about-title: "A ⭐ of fediverse."
about: "Misskeyを見つけていただき、ありがとうございます。Misskeyは、地球で生まれた<b>分散マイクロブログSNS</b>です。Fediverse(様々なSNSで構成される宇宙)の中に存在するため、他のSNSと相互に繋がっています。暫し都会の喧騒から離れて、新しいインターネットにダイブしてみませんか。"
adblock:
detected: "広告ブロッカーを無効にしてください"
warning: "<strong>Misskeyは広告を掲載していません</strong>が、広告をブロックする機能が有効だと一部の機能が利用できなかったり、不具合が発生する場合があります。"
application-authorization: "アプリの連携"
close: "閉じる"
customization-tips:
title: "カスタマイズのヒント"
paragraph1: "ホームのカスタマイズでは、ウィジェットを追加/削除したり、ドラッグ&ドロップして並べ替えたりすることができます。"
@ -13,6 +18,14 @@ common:
paragraph3: "ウィジェットを削除するには、ヘッダーの<strong>「ゴミ箱」</strong>と書かれたエリアにウィジェットをドラッグ&ドロップします。"
paragraph4: "カスタマイズを終了するには、右上の「完了」をクリックします。"
gotit: "Got it!"
notification:
file-uploaded: "ファイルがアップロードされました"
message-from: "{}さんからメッセージ:"
reversi-invited: "対局への招待があります"
reversi-invited-by: "{}さんから"
notified-by: "{}さんから"
reply-from: "{}さんから返信:"
quoted-by: "{}さんが引用:"
name: "Misskey"
time:
unknown: "なぞのじかん"
@ -28,6 +41,13 @@ common:
trash: "ゴミ箱"
date:
full-year: "年"
month: "月"
day: "日"
hours: "時"
minutes: "分"
weekday-short:
sunday: "日"
monday: "月"
@ -131,7 +151,38 @@ common:
stack-left: "左に重ねる"
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:
matching:
waiting-for: "{}を待っています"
cancel: "キャンセル"
common/views/components/games/reversi/reversi.index.vue:
title: "Misskey Reversi"
sub-title: "他のMisskeyユーザーとリバーシで対戦しよう"
invite: "招待"
@ -146,9 +197,6 @@ common/views/components/games/reversi/reversi.vue:
game-state:
ended: "終了"
playing: "進行中"
matching:
waiting-for: "{}を待っています"
cacnel: "キャンセル"
common/views/components/games/reversi/reversi.room.vue:
settings-of-the-game: "ゲームの設定"
@ -161,7 +209,7 @@ common/views/components/games/reversi/reversi.room.vue:
looped-map: "ループマップ"
can-put-everywhere: "どこでも置けるモード"
settings-of-the-bot: "Botの設定"
this-gane-is-started-soon: "ゲームは数秒後に開始されます"
this-game-is-started-soon: "ゲームは数秒後に開始されます"
waiting-for-other: "相手の準備が完了するのを待っています"
waiting-for-me: "あなたの準備が完了するのを待っています"
waiting-for-both: "準備中"
@ -870,8 +918,7 @@ desktop/views/pages/search.vue:
not-found: "「{}」に関する投稿は見つかりませんでした。"
desktop/views/pages/share.vue:
share-with: "Misskeyで共有"
close: "閉じる"
share-with: "{}で共有"
desktop/views/pages/tag.vue:
no-posts-found: "ハッシュタグ「{}」が付けられた投稿は見つかりませんでした。"
@ -1127,10 +1174,14 @@ mobile/views/pages/welcome.vue:
mobile/views/pages/widgets.vue:
dashboard: "ダッシュボード"
widgets-hints: "ウィジェットを追加/削除したり並べ替えたりできます。ウィジェットを移動するには「三」をドラッグします。ウィジェットを削除するには「x」をタップします。いくつかのウィジェットはタップすることで表示を変更できます。"
mobile/views/pages/widgets/activity.vue:
activity: "アクティビティ"
mobile/views/pages/share.vue:
share-with: "{}で共有"
mobile/views/pages/messaging.vue:
messaging: "メッセージ"
@ -1151,7 +1202,7 @@ mobile/views/pages/notifications.vue:
notifications: "通知"
read-all: "すべての通知を既読にしますか?"
mobile/views/pages/reversi.vue:
mobile/views/pages/games/reversi.vue:
reversi: "リバーシ"
mobile/views/pages/settings/settings.profile.vue:

View File

@ -6,6 +6,11 @@ common:
misskey: "A ⭐ of fediverse"
about-title: "A ⭐ of fediverse."
about: "Misskeyを見つけていただき、ありがとうございます。Misskeyは、地球で生まれた<b>分散マイクロブログSNS</b>です。Fediverse(様々なSNSで構成される宇宙)の中に存在するため、他のSNSと相互に繋がっています。暫し都会の喧騒から離れて、新しいインターネットにダイブしてみませんか。"
adblock:
detected: "広告ブロッカーを無効にしてください"
warning: "<strong>Misskeyは広告を掲載していません</strong>が、広告をブロックする機能が有効だと一部の機能が利用できなかったり、不具合が発生する場合があります。"
application-authorization: "アプリの連携"
close: "閉じる"
customization-tips:
title: "カスタマイズのヒント"
paragraph1: "ホームのカスタマイズでは、ウィジェットを追加/削除したり、ドラッグ&ドロップして並べ替えたりすることができます。"
@ -13,6 +18,14 @@ common:
paragraph3: "ウィジェットを削除するには、ヘッダーの<strong>「ゴミ箱」</strong>と書かれたエリアにウィジェットをドラッグ&ドロップします。"
paragraph4: "カスタマイズを終了するには、右上の「完了」をクリックします。"
gotit: "Got it!"
notification:
file-uploaded: "ファイルがアップロードされました"
message-from: "{}さんからメッセージ:"
reversi-invited: "対局への招待があります"
reversi-invited-by: "{}さんから"
notified-by: "{}さんから"
reply-from: "{}さんから返信:"
quoted-by: "{}さんが引用:"
name: "Misskey"
time:
unknown: "なぞのじかん"
@ -26,6 +39,12 @@ common:
months_ago: "{}ヶ月前"
years_ago: "{}年前"
trash: "ゴミ箱"
date:
full-year: "年"
month: "月"
day: "日"
hours: "時"
minutes: "分"
weekday-short:
sunday: "日"
monday: "月"
@ -121,7 +140,35 @@ common:
rename: "名前を変更"
stack-left: "左に重ねる"
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:
matching:
waiting-for: "{}を待っています"
cancel: "キャンセル"
common/views/components/games/reversi/reversi.index.vue:
title: "Misskey Reversi"
sub-title: "他のMisskeyユーザーとリバーシで対戦しよう"
invite: "招待"
@ -136,9 +183,6 @@ common/views/components/games/reversi/reversi.vue:
game-state:
ended: "終了"
playing: "進行中"
matching:
waiting-for: "{}を待っています"
cacnel: "キャンセル"
common/views/components/games/reversi/reversi.room.vue:
settings-of-the-game: "ゲームの設定"
choose-map: "マップを選択"
@ -150,7 +194,7 @@ common/views/components/games/reversi/reversi.room.vue:
looped-map: "ループマップ"
can-put-everywhere: "どこでも置けるモード"
settings-of-the-bot: "Botの設定"
this-gane-is-started-soon: "ゲームは数秒後に開始されます"
this-game-is-started-soon: "ゲームは数秒後に開始されます"
waiting-for-other: "相手の準備が完了するのを待っています"
waiting-for-me: "あなたの準備が完了するのを待っています"
waiting-for-both: "準備中"
@ -751,8 +795,7 @@ desktop/views/pages/search.vue:
not-available: "検索機能を利用することができません。"
not-found: "「{}」に関する投稿は見つかりませんでした。"
desktop/views/pages/share.vue:
share-with: "Misskeyで共有"
close: "閉じる"
share-with: "{}で共有"
desktop/views/pages/tag.vue:
no-posts-found: "ハッシュタグ「{}」が付けられた投稿は見つかりませんでした。"
desktop/views/pages/user-list.users.vue:
@ -959,8 +1002,11 @@ mobile/views/pages/welcome.vue:
signup: "新規登録"
mobile/views/pages/widgets.vue:
dashboard: "ダッシュボード"
widgets-hints: "ウィジェットを追加/削除したり並べ替えたりできます。ウィジェットを移動するには「三」をドラッグします。ウィジェットを削除するには「x」をタップします。いくつかのウィジェットはタップすることで表示を変更できます。"
mobile/views/pages/widgets/activity.vue:
activity: "アクティビティ"
mobile/views/pages/share.vue:
share-with: "{}で共有"
mobile/views/pages/messaging.vue:
messaging: "メッセージ"
mobile/views/pages/messaging-room.vue:
@ -976,7 +1022,7 @@ mobile/views/pages/note.vue:
mobile/views/pages/notifications.vue:
notifications: "通知"
read-all: "すべての通知を既読にしますか?"
mobile/views/pages/reversi.vue:
mobile/views/pages/games/reversi.vue:
reversi: "リバーシ"
mobile/views/pages/settings/settings.profile.vue:
title: "プロフィール"

View File

@ -6,13 +6,26 @@ common:
misskey: "⭐ 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?"
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"
customization-tips:
title: "カスタマイズのヒント"
paragraph1: "ホームのカスタマイズでは、ウィジェットを追加/削除したり、ドラッグ&ドロップして並べ替えたりすることができます。"
title: "Wskazówki o dostosowywaniu"
paragraph1: "Dostosowywanie strony głównej pozwala na dodawanie, usuwanie, przeciąganie i zmienianie kolejności widżetów."
paragraph2: "一部のウィジェットは、<strong><strong>右</strong>クリック</strong>することで表示を変更することができます。"
paragraph3: "ウィジェットを削除するには、ヘッダーの<strong>「ゴミ箱」</strong>と書かれたエリアにウィジェットをドラッグ&ドロップします。"
paragraph4: "カスタマイズを終了するには、右上の「完了」をクリックします。"
gotit: "Got it!"
gotit: "Rozumiem!"
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 {}:"
name: "Misskey"
time:
unknown: "nieznany"
@ -25,7 +38,13 @@ common:
weeks_ago: "{} tyg. temu"
months_ago: "{} mies. temu"
years_ago: "{} lat temu"
trash: "ゴミ箱"
trash: "Kosz"
date:
full-year: "Rok"
month: "Miesiąc"
day: "Dzień"
hours: "Godzina"
minutes: "Minuty"
weekday-short:
sunday: "N"
monday: "Pn"
@ -35,13 +54,13 @@ common:
friday: "P"
saturday: "S"
weekday:
sunday: "日曜日"
monday: "月曜日"
tuesday: "火曜日"
wednesday: "水曜日"
thursday: "木曜日"
friday: "金曜日"
saturday: "土曜日"
sunday: "Niedziela"
monday: "Poniedziałek"
tuesday: "Wtorek"
wednesday: "Środa"
thursday: "Czwartek"
friday: "Piątek"
saturday: "Sobota"
reactions:
like: "Lubię"
love: "Kocham"
@ -76,10 +95,10 @@ common:
turn-of: "Kolej na {}"
past-turn-of: "Kolej {}"
won: "{}の勝ち"
black: ""
white: ""
total: "合計"
this-turn: "{}ターン目"
black: "Czarny"
white: "Biały"
total: "Łącznie"
this-turn: "Ruch {}"
widgets:
analog-clock: "Zegar analogowy"
profile: "Profil"
@ -121,7 +140,35 @@ common:
rename: "Zmień nazwę"
stack-left: "Przypnij do lewej"
pop-right: "Odepnij w prawo"
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:
matching:
waiting-for: "{}を待っています"
cancel: "キャンセル"
common/views/components/games/reversi/reversi.index.vue:
title: "Misskey Reversi"
sub-title: "他のMisskeyユーザーとリバーシで対戦しよう"
invite: "招待"
@ -136,9 +183,6 @@ common/views/components/games/reversi/reversi.vue:
game-state:
ended: "終了"
playing: "進行中"
matching:
waiting-for: "{}を待っています"
cacnel: "キャンセル"
common/views/components/games/reversi/reversi.room.vue:
settings-of-the-game: "ゲームの設定"
choose-map: "マップを選択"
@ -149,14 +193,14 @@ common/views/components/games/reversi/reversi.room.vue:
is-llotheo: "石の少ない方が勝ち(ロセオ)"
looped-map: "ループマップ"
can-put-everywhere: "どこでも置けるモード"
settings-of-the-bot: "Botの設定"
this-gane-is-started-soon: "ゲームは数秒後に開始されます"
settings-of-the-bot: "Ustawienia bota"
this-game-is-started-soon: "Gra rozpocznie się wkrótce"
waiting-for-other: "相手の準備が完了するのを待っています"
waiting-for-me: "あなたの準備が完了するのを待っています"
waiting-for-both: "準備中"
cancel: "キャンセル"
ready: "準備完了"
cancel-ready: "準備続行"
waiting-for-both: "Oczekiwanie na Ciebie"
cancel: "Anuluj"
ready: "Gotowy"
cancel-ready: "Cofnij „gotowy”"
common/views/components/connect-failed.vue:
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."
@ -287,12 +331,12 @@ common/views/widgets/broadcast.vue:
have-a-nice-day: "Miłego dnia!"
next: "Dalej"
common/views/widgets/calendar.vue:
year: "{}"
month: "{}"
day: "{}"
today: "今日:"
this-month: "今月:"
this-year: "今年:"
year: "Rok {}"
month: "Miesiąc {}"
day: "Dzień {}"
today: "Dzisiaj:"
this-month: "Ten miesiąc:"
this-year: "Ten rok:"
common/views/widgets/donation.vue:
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!"
@ -314,9 +358,9 @@ common/views/widgets/memo.vue:
memo: "Napisz tutaj!"
save: "Zapisz"
common/views/widgets/slideshow.vue:
folder-customize-mode: "フォルダを指定するには、カスタマイズモードを終了してください"
folder: "クリックしてフォルダを指定してください"
no-image: "このフォルダには画像がありません"
folder-customize-mode: "Aby określić katalog, opuść tryb dostosowywania"
folder: "Naciśnij i wybierz folder"
no-image: "Brak obrazu w tym folderze"
common/views/widgets/tips.vue:
tips-line1: "<kbd>t</kbd>でタイムラインにフォーカスできます"
tips-line2: "<kbd>p</kbd>または<kbd>n</kbd>で投稿フォームを開きます"
@ -325,8 +369,8 @@ common/views/widgets/tips.vue:
tips-line5: "ドライブにファイルをドラッグ&ドロップしてアップロードできます"
tips-line6: "ドライブでファイルをドラッグしてフォルダ移動できます"
tips-line7: "ドライブでフォルダをドラッグしてフォルダ移動できます"
tips-line8: "ホームは設定からカスタマイズできます"
tips-line9: "MisskeyAGPLv3です"
tips-line8: "Strona główna może zostać dostosowana w ustawieniach."
tips-line9: "Misskey jest dostępny na licencji AGPLv3."
tips-line10: "タイムマシンウィジェットを利用すると、簡単に過去のタイムラインに遡れます"
tips-line11: "投稿の ... をクリックして、投稿をユーザーページにピン留めできます"
tips-line13: "投稿に添付したファイルは全てドライブに保存されます"
@ -336,8 +380,8 @@ common/views/widgets/tips.vue:
tips-line20: "カレンダーウィジェットのパーセンテージは、経過の割合を示しています"
tips-line21: "APIを利用してbotの開発なども行えます"
tips-line23: "まゆかわいいよまゆ"
tips-line24: "Misskeyは2014年にサービスを開始しました"
tips-line25: "対応ブラウザではMisskeyを開いていなくても通知を受け取れます"
tips-line24: "Misskey zaczął działać w 2014."
tips-line25: "Możesz otrzymywać powiadomienia nawet jeżeli Misskey nie jest otwarty w obsługiwanej przeglądarce."
common/views/pages/follow.vue:
signed-in-as: "Zalogowany jako {}"
following: "Śledzisz"
@ -486,9 +530,9 @@ desktop/views/components/notifications.vue:
more: "Więcej"
empty: "Brak powiadomień"
desktop/views/components/post-form.vue:
add-visible-user: "+ユーザーを追加"
attach-location-information: "位置情報を添付する"
hide-contents: "内容を隠す"
add-visible-user: "+Dodaj użytkownika"
attach-location-information: "Załącz informacje o lokalizacji"
hide-contents: "Ukryj zawartość"
reply-placeholder: "Odpowiedz na ten wpis…"
quote-placeholder: "Zacytuj ten wpis…"
submit: "Wyślij"
@ -509,10 +553,10 @@ desktop/views/components/post-form.vue:
text-remain: "pozostałe znaki: {}"
recent-tags: "Ostatnie"
click-to-tagging: "Naciśnij aby oznaczyć"
visibility: "公開範囲"
geolocation-alert: "お使いの端末は位置情報に対応していません"
error: "エラー"
enter-username: "ユーザー名を入力してください"
visibility: "Widoczność"
geolocation-alert: "Twoje urządzenie nie obsługuje geolokalizacji."
error: "Bład"
enter-username: "Wprowadź nazwę użytkownika…"
desktop/views/components/post-form-window.vue:
note: "Nowy wpis"
reply: "Odpowiedz"
@ -634,8 +678,8 @@ desktop/views/components/settings.api.vue:
desktop/views/components/settings.apps.vue:
no-apps: "Brak zautoryzowanych aplikacji"
desktop/views/components/settings.drive.vue:
max: ""
in-use: "使用中"
max: "Maksymalnie"
in-use: " w użyciu."
desktop/views/components/settings.mute.vue:
no-users: "Brak wyciszonych użytkowników"
desktop/views/components/settings.password.vue:
@ -658,7 +702,7 @@ desktop/views/components/settings.profile.vue:
other: "Inne"
is-bot: "To konto jest prowadzone przez bota"
is-cat: "To konto jest prowadzone przez kota"
profile-updated: "プロフィールを更新しました"
profile-updated: "Zaktualizowano profil"
desktop/views/components/sub-note-content.vue:
private: "ten wpis jest prywatny"
deleted: "ten wpis został usunięty"
@ -732,7 +776,7 @@ desktop/views/pages/welcome.vue:
signin-button: "Zaloguj się"
signup-button: "Zarejestruj się"
timeline: "Oś czasu"
powered-by-misskey: "Powered by <b>Misskey</b>."
powered-by-misskey: "Oparto o <b>Misskey</b>."
desktop/views/pages/drive.vue:
title: "Dysk Misskey"
desktop/views/pages/favorites.vue:
@ -748,13 +792,12 @@ desktop/views/pages/selectdrive.vue:
cancel: "Anuluj"
upload: "Wyślij pliki z Twojego komputera"
desktop/views/pages/search.vue:
not-available: "検索機能を利用することができません。"
not-found: "「{}」に関する投稿は見つかりませんでした。"
not-available: "Funkcja wyszukiwania nie może zostać wykorzystywana."
not-found: "Nie znaleziono wpisów zawierających „{}”"
desktop/views/pages/share.vue:
share-with: "Misskeyで共有"
close: "閉じる"
share-with: "Udostępnij z {}."
desktop/views/pages/tag.vue:
no-posts-found: "ハッシュタグ「{}」が付けられた投稿は見つかりませんでした。"
no-posts-found: "Nie znaleziono wpisów zawierających „{}”."
desktop/views/pages/user-list.users.vue:
users: "Użytkownicy"
add-user: "Dodaj użytkownika"
@ -911,7 +954,7 @@ mobile/views/components/timeline.vue:
empty: "Brak wpisów"
load-more: "Więcej"
mobile/views/components/ui.header.vue:
welcome-back: "おかえりなさい、"
welcome-back: "Witaj ponownie, "
mobile/views/components/ui.nav.vue:
timeline: "Oś czasu"
notifications: "Powiadomienia"
@ -943,7 +986,7 @@ mobile/views/pages/drive.vue:
drive: "Dysk"
more: "Załaduj więcej"
mobile/views/pages/signup.vue:
lets-start: "📦 始めましょう"
lets-start: "Rozpocznijmy! 📦"
mobile/views/pages/followers.vue:
followers-of: "Śledzący {}"
mobile/views/pages/following.vue:
@ -954,13 +997,16 @@ mobile/views/pages/home.vue:
hybrid: "Społeczność"
global: "Globalne"
mobile/views/pages/tag.vue:
no-posts-found: "ハッシュタグ「{}」が付けられた投稿は見つかりませんでした。"
no-posts-found: "Nie znaleziono wpisów zawierających „{}”."
mobile/views/pages/welcome.vue:
signup: "新規登録"
signup: "Zarejestruj się"
mobile/views/pages/widgets.vue:
dashboard: "ダッシュボード"
dashboard: "Kokpit"
widgets-hints: "ウィジェットを追加/削除したり並べ替えたりできます。ウィジェットを移動するには「三」をドラッグします。ウィジェットを削除するには「x」をタップします。いくつかのウィジェットはタップすることで表示を変更できます。"
mobile/views/pages/widgets/activity.vue:
activity: "アクティビティ"
activity: "Aktywność"
mobile/views/pages/share.vue:
share-with: "Udostępnij z {}."
mobile/views/pages/messaging.vue:
messaging: "Wiadomości"
mobile/views/pages/messaging-room.vue:
@ -976,8 +1022,8 @@ mobile/views/pages/note.vue:
mobile/views/pages/notifications.vue:
notifications: "Powiadomienia"
read-all: "Czy na pewno chcesz oznaczyć wszystkie powiadomienia jako przeczytane?"
mobile/views/pages/reversi.vue:
reversi: "リバーシ"
mobile/views/pages/games/reversi.vue:
reversi: "Reversi"
mobile/views/pages/settings/settings.profile.vue:
title: "Profil"
name: "Nazwa"

View File

@ -6,6 +6,11 @@ common:
misskey: "A ⭐ of fediverse"
about-title: "A ⭐ of fediverse."
about: "Misskeyを見つけていただき、ありがとうございます。Misskeyは、地球で生まれた<b>分散マイクロブログSNS</b>です。Fediverse(様々なSNSで構成される宇宙)の中に存在するため、他のSNSと相互に繋がっています。暫し都会の喧騒から離れて、新しいインターネットにダイブしてみませんか。"
adblock:
detected: "広告ブロッカーを無効にしてください"
warning: "<strong>Misskeyは広告を掲載していません</strong>が、広告をブロックする機能が有効だと一部の機能が利用できなかったり、不具合が発生する場合があります。"
application-authorization: "アプリの連携"
close: "閉じる"
customization-tips:
title: "カスタマイズのヒント"
paragraph1: "ホームのカスタマイズでは、ウィジェットを追加/削除したり、ドラッグ&ドロップして並べ替えたりすることができます。"
@ -13,6 +18,14 @@ common:
paragraph3: "ウィジェットを削除するには、ヘッダーの<strong>「ゴミ箱」</strong>と書かれたエリアにウィジェットをドラッグ&ドロップします。"
paragraph4: "カスタマイズを終了するには、右上の「完了」をクリックします。"
gotit: "Got it!"
notification:
file-uploaded: "ファイルがアップロードされました"
message-from: "{}さんからメッセージ:"
reversi-invited: "対局への招待があります"
reversi-invited-by: "{}さんから"
notified-by: "{}さんから"
reply-from: "{}さんから返信:"
quoted-by: "{}さんが引用:"
name: "Misskey"
time:
unknown: "なぞのじかん"
@ -26,6 +39,12 @@ common:
months_ago: "{}ヶ月前"
years_ago: "{}年前"
trash: "ゴミ箱"
date:
full-year: "年"
month: "月"
day: "日"
hours: "時"
minutes: "分"
weekday-short:
sunday: "日"
monday: "月"
@ -121,7 +140,35 @@ common:
rename: "名前を変更"
stack-left: "左に重ねる"
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:
matching:
waiting-for: "{}を待っています"
cancel: "キャンセル"
common/views/components/games/reversi/reversi.index.vue:
title: "Misskey Reversi"
sub-title: "他のMisskeyユーザーとリバーシで対戦しよう"
invite: "招待"
@ -136,9 +183,6 @@ common/views/components/games/reversi/reversi.vue:
game-state:
ended: "終了"
playing: "進行中"
matching:
waiting-for: "{}を待っています"
cacnel: "キャンセル"
common/views/components/games/reversi/reversi.room.vue:
settings-of-the-game: "ゲームの設定"
choose-map: "マップを選択"
@ -150,7 +194,7 @@ common/views/components/games/reversi/reversi.room.vue:
looped-map: "ループマップ"
can-put-everywhere: "どこでも置けるモード"
settings-of-the-bot: "Botの設定"
this-gane-is-started-soon: "ゲームは数秒後に開始されます"
this-game-is-started-soon: "ゲームは数秒後に開始されます"
waiting-for-other: "相手の準備が完了するのを待っています"
waiting-for-me: "あなたの準備が完了するのを待っています"
waiting-for-both: "準備中"
@ -751,8 +795,7 @@ desktop/views/pages/search.vue:
not-available: "検索機能を利用することができません。"
not-found: "「{}」に関する投稿は見つかりませんでした。"
desktop/views/pages/share.vue:
share-with: "Misskeyで共有"
close: "閉じる"
share-with: "{}で共有"
desktop/views/pages/tag.vue:
no-posts-found: "ハッシュタグ「{}」が付けられた投稿は見つかりませんでした。"
desktop/views/pages/user-list.users.vue:
@ -959,8 +1002,11 @@ mobile/views/pages/welcome.vue:
signup: "新規登録"
mobile/views/pages/widgets.vue:
dashboard: "ダッシュボード"
widgets-hints: "ウィジェットを追加/削除したり並べ替えたりできます。ウィジェットを移動するには「三」をドラッグします。ウィジェットを削除するには「x」をタップします。いくつかのウィジェットはタップすることで表示を変更できます。"
mobile/views/pages/widgets/activity.vue:
activity: "アクティビティ"
mobile/views/pages/share.vue:
share-with: "{}で共有"
mobile/views/pages/messaging.vue:
messaging: "メッセージ"
mobile/views/pages/messaging-room.vue:
@ -976,7 +1022,7 @@ mobile/views/pages/note.vue:
mobile/views/pages/notifications.vue:
notifications: "通知"
read-all: "すべての通知を既読にしますか?"
mobile/views/pages/reversi.vue:
mobile/views/pages/games/reversi.vue:
reversi: "リバーシ"
mobile/views/pages/settings/settings.profile.vue:
title: "プロフィール"

View File

@ -6,6 +6,11 @@ common:
misskey: "A ⭐ of fediverse"
about-title: "A ⭐ of fediverse."
about: "Misskeyを見つけていただき、ありがとうございます。Misskeyは、地球で生まれた<b>分散マイクロブログSNS</b>です。Fediverse(様々なSNSで構成される宇宙)の中に存在するため、他のSNSと相互に繋がっています。暫し都会の喧騒から離れて、新しいインターネットにダイブしてみませんか。"
adblock:
detected: "広告ブロッカーを無効にしてください"
warning: "<strong>Misskeyは広告を掲載していません</strong>が、広告をブロックする機能が有効だと一部の機能が利用できなかったり、不具合が発生する場合があります。"
application-authorization: "アプリの連携"
close: "閉じる"
customization-tips:
title: "カスタマイズのヒント"
paragraph1: "ホームのカスタマイズでは、ウィジェットを追加/削除したり、ドラッグ&ドロップして並べ替えたりすることができます。"
@ -13,6 +18,14 @@ common:
paragraph3: "ウィジェットを削除するには、ヘッダーの<strong>「ゴミ箱」</strong>と書かれたエリアにウィジェットをドラッグ&ドロップします。"
paragraph4: "カスタマイズを終了するには、右上の「完了」をクリックします。"
gotit: "Got it!"
notification:
file-uploaded: "ファイルがアップロードされました"
message-from: "{}さんからメッセージ:"
reversi-invited: "対局への招待があります"
reversi-invited-by: "{}さんから"
notified-by: "{}さんから"
reply-from: "{}さんから返信:"
quoted-by: "{}さんが引用:"
name: "Misskey"
time:
unknown: "なぞのじかん"
@ -26,6 +39,12 @@ common:
months_ago: "{}ヶ月前"
years_ago: "{}年前"
trash: "ゴミ箱"
date:
full-year: "年"
month: "月"
day: "日"
hours: "時"
minutes: "分"
weekday-short:
sunday: "日"
monday: "月"
@ -121,7 +140,35 @@ common:
rename: "名前を変更"
stack-left: "左に重ねる"
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:
matching:
waiting-for: "{}を待っています"
cancel: "キャンセル"
common/views/components/games/reversi/reversi.index.vue:
title: "Misskey Reversi"
sub-title: "他のMisskeyユーザーとリバーシで対戦しよう"
invite: "招待"
@ -136,9 +183,6 @@ common/views/components/games/reversi/reversi.vue:
game-state:
ended: "終了"
playing: "進行中"
matching:
waiting-for: "{}を待っています"
cacnel: "キャンセル"
common/views/components/games/reversi/reversi.room.vue:
settings-of-the-game: "ゲームの設定"
choose-map: "マップを選択"
@ -150,7 +194,7 @@ common/views/components/games/reversi/reversi.room.vue:
looped-map: "ループマップ"
can-put-everywhere: "どこでも置けるモード"
settings-of-the-bot: "Botの設定"
this-gane-is-started-soon: "ゲームは数秒後に開始されます"
this-game-is-started-soon: "ゲームは数秒後に開始されます"
waiting-for-other: "相手の準備が完了するのを待っています"
waiting-for-me: "あなたの準備が完了するのを待っています"
waiting-for-both: "準備中"
@ -751,8 +795,7 @@ desktop/views/pages/search.vue:
not-available: "検索機能を利用することができません。"
not-found: "「{}」に関する投稿は見つかりませんでした。"
desktop/views/pages/share.vue:
share-with: "Misskeyで共有"
close: "閉じる"
share-with: "{}で共有"
desktop/views/pages/tag.vue:
no-posts-found: "ハッシュタグ「{}」が付けられた投稿は見つかりませんでした。"
desktop/views/pages/user-list.users.vue:
@ -959,8 +1002,11 @@ mobile/views/pages/welcome.vue:
signup: "新規登録"
mobile/views/pages/widgets.vue:
dashboard: "ダッシュボード"
widgets-hints: "ウィジェットを追加/削除したり並べ替えたりできます。ウィジェットを移動するには「三」をドラッグします。ウィジェットを削除するには「x」をタップします。いくつかのウィジェットはタップすることで表示を変更できます。"
mobile/views/pages/widgets/activity.vue:
activity: "アクティビティ"
mobile/views/pages/share.vue:
share-with: "{}で共有"
mobile/views/pages/messaging.vue:
messaging: "メッセージ"
mobile/views/pages/messaging-room.vue:
@ -976,7 +1022,7 @@ mobile/views/pages/note.vue:
mobile/views/pages/notifications.vue:
notifications: "通知"
read-all: "すべての通知を既読にしますか?"
mobile/views/pages/reversi.vue:
mobile/views/pages/games/reversi.vue:
reversi: "リバーシ"
mobile/views/pages/settings/settings.profile.vue:
title: "プロフィール"

View File

@ -6,6 +6,11 @@ common:
misskey: "A ⭐ of fediverse"
about-title: "A ⭐ of fediverse."
about: "Misskeyを見つけていただき、ありがとうございます。Misskeyは、地球で生まれた<b>分散マイクロブログSNS</b>です。Fediverse(様々なSNSで構成される宇宙)の中に存在するため、他のSNSと相互に繋がっています。暫し都会の喧騒から離れて、新しいインターネットにダイブしてみませんか。"
adblock:
detected: "広告ブロッカーを無効にしてください"
warning: "<strong>Misskeyは広告を掲載していません</strong>が、広告をブロックする機能が有効だと一部の機能が利用できなかったり、不具合が発生する場合があります。"
application-authorization: "アプリの連携"
close: "閉じる"
customization-tips:
title: "カスタマイズのヒント"
paragraph1: "ホームのカスタマイズでは、ウィジェットを追加/削除したり、ドラッグ&ドロップして並べ替えたりすることができます。"
@ -13,6 +18,14 @@ common:
paragraph3: "ウィジェットを削除するには、ヘッダーの<strong>「ゴミ箱」</strong>と書かれたエリアにウィジェットをドラッグ&ドロップします。"
paragraph4: "カスタマイズを終了するには、右上の「完了」をクリックします。"
gotit: "Got it!"
notification:
file-uploaded: "ファイルがアップロードされました"
message-from: "{}さんからメッセージ:"
reversi-invited: "対局への招待があります"
reversi-invited-by: "{}さんから"
notified-by: "{}さんから"
reply-from: "{}さんから返信:"
quoted-by: "{}さんが引用:"
name: "Misskey"
time:
unknown: "なぞのじかん"
@ -26,6 +39,12 @@ common:
months_ago: "{}ヶ月前"
years_ago: "{}年前"
trash: "ゴミ箱"
date:
full-year: "年"
month: "月"
day: "日"
hours: "時"
minutes: "分"
weekday-short:
sunday: "日"
monday: "月"
@ -121,7 +140,35 @@ common:
rename: "名前を変更"
stack-left: "左に重ねる"
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:
matching:
waiting-for: "{}を待っています"
cancel: "キャンセル"
common/views/components/games/reversi/reversi.index.vue:
title: "Misskey Reversi"
sub-title: "他のMisskeyユーザーとリバーシで対戦しよう"
invite: "招待"
@ -136,9 +183,6 @@ common/views/components/games/reversi/reversi.vue:
game-state:
ended: "終了"
playing: "進行中"
matching:
waiting-for: "{}を待っています"
cacnel: "キャンセル"
common/views/components/games/reversi/reversi.room.vue:
settings-of-the-game: "ゲームの設定"
choose-map: "マップを選択"
@ -150,7 +194,7 @@ common/views/components/games/reversi/reversi.room.vue:
looped-map: "ループマップ"
can-put-everywhere: "どこでも置けるモード"
settings-of-the-bot: "Botの設定"
this-gane-is-started-soon: "ゲームは数秒後に開始されます"
this-game-is-started-soon: "ゲームは数秒後に開始されます"
waiting-for-other: "相手の準備が完了するのを待っています"
waiting-for-me: "あなたの準備が完了するのを待っています"
waiting-for-both: "準備中"
@ -751,8 +795,7 @@ desktop/views/pages/search.vue:
not-available: "検索機能を利用することができません。"
not-found: "「{}」に関する投稿は見つかりませんでした。"
desktop/views/pages/share.vue:
share-with: "Misskeyで共有"
close: "閉じる"
share-with: "{}で共有"
desktop/views/pages/tag.vue:
no-posts-found: "ハッシュタグ「{}」が付けられた投稿は見つかりませんでした。"
desktop/views/pages/user-list.users.vue:
@ -959,8 +1002,11 @@ mobile/views/pages/welcome.vue:
signup: "新規登録"
mobile/views/pages/widgets.vue:
dashboard: "ダッシュボード"
widgets-hints: "ウィジェットを追加/削除したり並べ替えたりできます。ウィジェットを移動するには「三」をドラッグします。ウィジェットを削除するには「x」をタップします。いくつかのウィジェットはタップすることで表示を変更できます。"
mobile/views/pages/widgets/activity.vue:
activity: "アクティビティ"
mobile/views/pages/share.vue:
share-with: "{}で共有"
mobile/views/pages/messaging.vue:
messaging: "メッセージ"
mobile/views/pages/messaging-room.vue:
@ -976,7 +1022,7 @@ mobile/views/pages/note.vue:
mobile/views/pages/notifications.vue:
notifications: "通知"
read-all: "すべての通知を既読にしますか?"
mobile/views/pages/reversi.vue:
mobile/views/pages/games/reversi.vue:
reversi: "リバーシ"
mobile/views/pages/settings/settings.profile.vue:
title: "プロフィール"

View File

@ -1,8 +1,8 @@
{
"name": "misskey",
"author": "syuilo <i@syuilo.com>",
"version": "5.10.0",
"clientVersion": "1.0.7828",
"version": "5.13.0",
"clientVersion": "1.0.7963",
"codename": "nighthike",
"main": "./built/index.js",
"private": true,
@ -43,7 +43,6 @@
"@types/is-root": "1.0.0",
"@types/is-url": "1.2.28",
"@types/js-yaml": "3.11.2",
"@types/jsdom": "11.0.6",
"@types/koa": "2.0.46",
"@types/koa-bodyparser": "5.0.1",
"@types/koa-compress": "2.0.8",
@ -58,10 +57,9 @@
"@types/minio": "6.0.2",
"@types/mkdirp": "0.5.2",
"@types/mocha": "5.2.3",
"@types/mongodb": "3.1.2",
"@types/mongodb": "3.1.3",
"@types/ms": "0.7.30",
"@types/node": "10.5.5",
"@types/parse5": "5.0.0",
"@types/portscanner": "2.1.0",
"@types/pug": "2.0.4",
"@types/qrcode": "1.2.0",
@ -78,7 +76,7 @@
"@types/systeminformation": "3.23.0",
"@types/tmp": "0.0.33",
"@types/uuid": "3.4.3",
"@types/webpack": "4.4.8",
"@types/webpack": "4.4.9",
"@types/webpack-stream": "3.2.10",
"@types/websocket": "0.0.39",
"@types/ws": "5.1.2",
@ -189,7 +187,7 @@
"stylus": "0.54.5",
"stylus-loader": "3.0.2",
"summaly": "2.0.6",
"systeminformation": "3.42.4",
"systeminformation": "3.42.8",
"syuilo-password-strength": "0.0.1",
"textarea-caret": "3.1.0",
"tmp": "0.0.33",
@ -215,7 +213,7 @@
"vuex-persistedstate": "2.5.4",
"web-push": "3.3.2",
"webfinger.js": "2.6.6",
"webpack": "4.16.3",
"webpack": "4.16.4",
"webpack-cli": "3.1.0",
"websocket": "1.0.26",
"ws": "6.0.0",

View File

@ -15,7 +15,7 @@ import Index from './views/index.vue';
* init
*/
init(launch => {
document.title = 'Misskey | アプリの連携';
document.title = '%i18n:common.name% | %i18n:common.application-authorization%';
// Init router
const router = new VueRouter({

View File

@ -1,7 +1,7 @@
<template>
<div class="form">
<header>
<h1><i>{{ app.name }}</i>があなたのアカウントにアクセスすることを<b>許可</b>しますか</h1>
<h1>%i18n:@share-access%</h1>
<img :src="app.iconUrl"/>
</header>
<div class="app">
@ -11,25 +11,25 @@
<p class="description">{{ app.description }}</p>
</section>
<section>
<h2>このアプリは次の権限を要求しています:</h2>
<h2>%i18n:@permission-ask%</h2>
<ul>
<template v-for="p in app.permission">
<li v-if="p == 'account-read'">アカウントの情報を見る</li>
<li v-if="p == 'account-write'">アカウントの情報を操作する</li>
<li v-if="p == 'note-write'">投稿する</li>
<li v-if="p == 'like-write'">いいねしたりいいね解除する</li>
<li v-if="p == 'following-write'">フォローしたりフォロー解除する</li>
<li v-if="p == 'drive-read'">ドライブを見る</li>
<li v-if="p == 'drive-write'">ドライブを操作する</li>
<li v-if="p == 'notification-read'">通知を見る</li>
<li v-if="p == 'notification-write'">通知を操作する</li>
<li v-if="p == 'account-read'">%i18n:@account-read%</li>
<li v-if="p == 'account-write'">%i18n:@account-write%</li>
<li v-if="p == 'note-write'">%i18n:@note-write%</li>
<li v-if="p == 'like-write'">%i18n:@like-write%</li>
<li v-if="p == 'following-write'">%i18n:@following-write%</li>
<li v-if="p == 'drive-read'">%i18n:@drive-read%</li>
<li v-if="p == 'drive-write'">%i18n:@drive-write%</li>
<li v-if="p == 'notification-read'">%i18n:@notification-read%</li>
<li v-if="p == 'notification-write'">%i18n:@notification-write%</li>
</template>
</ul>
</section>
</div>
<div class="action">
<button @click="cancel">キャンセル</button>
<button @click="accept">アクセスを許可</button>
<button @click="cancel">%i18n:@cancel%</button>
<button @click="accept">%i18n:@accept%</button>
</div>
</div>
</template>

View File

@ -1,7 +1,7 @@
<template>
<div class="index">
<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
class="form"
ref="form"
@ -11,20 +11,20 @@
@accepted="accepted"
/>
<div class="denied" v-if="state == 'denied'">
<h1>アプリケーションの連携をキャンセルしました</h1>
<p>このアプリがあなたのアカウントにアクセスすることはありません</p>
<h1>%i18n:@denied%</h1>
<p>%i18n:@denied-paragraph%</p>
</div>
<div class="accepted" v-if="state == 'accepted'">
<h1>{{ session.app.isAuthorized ? 'このアプリは既に連携済みです' : 'アプリケーションの連携を許可しました' }}</h1>
<p v-if="session.app.callbackUrl">アプリケーションに戻っています<mk-ellipsis/></p>
<p v-if="!session.app.callbackUrl">アプリケーションに戻ってやっていってください</p>
<h1>{{ session.app.isAuthorized ? '%i18n:@already-authorized%' : '%i18n:@allowed%' }}</h1>
<p v-if="session.app.callbackUrl">%i18n:@callback-url%<mk-ellipsis/></p>
<p v-if="!session.app.callbackUrl">%i18n:@please-go-back%</p>
</div>
<div class="error" v-if="state == 'fetch-session-error'">
<p>セッションが存在しません</p>
<p>%i18n:@error%</p>
</div>
</main>
<main class="signin" v-if="!$store.getters.isSignedIn">
<h1>サインインしてください</h1>
<h1>%i18n:@sign-in%</h1>
<mk-signin/>
</main>
<footer><img src="/assets/auth/icon.svg" alt="Misskey"/></footer>

View File

@ -15,22 +15,22 @@ export default function(type, data): Notification {
switch (type) {
case 'drive_file_created':
return {
title: 'ファイルがアップロードされました',
title: '%i18n:common.notification.file-uploaded%',
body: data.name,
icon: data.url
};
case 'unread_messaging_message':
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),
icon: data.user.avatarUrl
};
case 'reversi_invited':
return {
title: '対局への招待があります',
body: `${getUserName(data.parent)}さんから`,
title: '%i18n:common.notification.reversi-invited%',
body: '%i18n:common.notification.reversi-invited-by%'.split("{}")[0] + `${getUserName(data.parent)}` + '%i18n:common.notification.reversi-invited-by%'.split("{}")[1],
icon: data.parent.avatarUrl
};
@ -38,21 +38,21 @@ export default function(type, data): Notification {
switch (data.type) {
case 'mention':
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),
icon: data.user.avatarUrl
};
case 'reply':
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),
icon: data.user.avatarUrl
};
case 'quote':
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),
icon: data.user.avatarUrl
};

View File

@ -1,12 +1,12 @@
export default date => {
if (typeof date == 'string') date = new Date(date);
return (
date.getFullYear() + '' +
(date.getMonth() + 1) + '' +
date.getDate() + '' +
date.getFullYear() + '%i18n:common.date.full-year%' +
(date.getMonth() + 1) + '%i18n:common.date.month%' +
date.getDate() + '%i18n:common.date.day%' +
' ' +
date.getHours() + '' +
date.getMinutes() + '' +
date.getHours() + '%i18n:common.date.hours%' +
date.getMinutes() + '%i18n:common.date.minutes%' +
' ' +
`(${['日', '月', '火', '水', '木', '金', '土'][date.getDay()]})`
);

View File

@ -5,8 +5,8 @@ declare const fuckAdBlock: any;
export default (os) => {
function adBlockDetected() {
os.apis.dialog({
title: '%fa:exclamation-triangle%広告ブロッカーを無効にしてください',
text: '<strong>Misskeyは広告を掲載していません</strong>が、広告をブロックする機能が有効だと一部の機能が利用できなかったり、不具合が発生する場合があります。',
title: '%fa:exclamation-triangle%%i18n:common.adblock.detected%',
text: '%i18n:common.adblock.warning%',
actins: [{
text: 'OK'
}]

View File

@ -1,14 +1,14 @@
<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>
<div style="overflow: hidden">
<p class="turn" v-if="!iAmPlayer && !game.isEnded">{{ '%i18n:common.reversi.turn-of%'.replace('{}', turnUser | userName) }}<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="!iAmPlayer && !game.isEnded">{{ '%i18n:common.reversi.turn-of%'.replace('{}', $options.filters.userName(turnUser)) }}<mk-ellipsis/></p>
<p class="turn" v-if="logPos != logs.length">{{ '%i18n:common.reversi.past-turn-of%'.replace('{}', $options.filters.userName(turnUser)) }}</p>
<p class="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="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">{{ '%i18n:common.reversi.won%'.replace('{}', $options.filters.userName(game.winner)) }}{{ game.settings.isLlotheo ? ' (ロセオ)' : '' }}</template>
<template v-else>%i18n:common.reversi.drawn%</template>
</p>
</div>
@ -258,12 +258,12 @@ export default Vue.extend({
<style lang="stylus" scoped>
@import '~const.styl'
.root
root(isDark)
text-align center
> header
padding 8px
border-bottom dashed 1px #c4cdd4
border-bottom dashed 1px isDark ? #4c5761 : #c4cdd4
> .board
width calc(100% - 16px)
@ -327,16 +327,16 @@ export default Vue.extend({
user-select none
&.empty
border solid 2px #eee
border solid 2px isDark ? #51595f : #eee
&.empty.can
background #eee
background isDark ? #51595f : #eee
&.empty.myTurn
border-color #ddd
border-color isDark ? #6a767f : #ddd
&.can
background #eee
background isDark ? #51595f : #eee
cursor pointer
&:hover
@ -350,7 +350,7 @@ export default Vue.extend({
box-shadow 0 0 0 4px rgba($theme-color, 0.7)
&.isEnded
border-color #ddd
border-color isDark ? #6a767f : #ddd
&.none
border-color transparent !important
@ -388,4 +388,11 @@ export default Vue.extend({
display inline-block
margin 0 8px
min-width 70px
.xqnhankfuuilcwvhgsopeqncafzsquya[data-darkmode]
root(true)
.xqnhankfuuilcwvhgsopeqncafzsquya:not([data-darkmode])
root(false)
</style>

View File

@ -0,0 +1,258 @@
<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 as any).api('games/reversi/games/show', {
gameId: game.id
}).then(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>

View File

@ -1,92 +1,118 @@
<template>
<div class="root">
<div class="urbixznjwwuukfsckrwzwsqzsxornqij">
<header><b>{{ game.user1 | userName }}</b> vs <b>{{ game.user2 | userName }}</b></header>
<div>
<p>%i18n:@settings-of-the-game%</p>
<el-card class="map">
<div slot="header">
<el-select :class="$style.mapSelect" v-model="mapName" placeholder="%i18n:@choose-map%" @change="onMapChange">
<el-option label="%i18n:@random%" :value="null"/>
<el-option-group v-for="c in mapCategories" :key="c" :label="c">
<el-option v-for="m in maps" v-if="m.category == c" :key="m.name" :label="m.name" :value="m.name">
<span style="float: left">{{ m.name }}</span>
<span style="float: right; color: #8492a6; font-size: 13px" v-if="m.author">(by <i>{{ m.author }}</i>)</span>
</el-option>
</el-option-group>
</el-select>
</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="card map">
<header>
<select v-model="mapName" placeholder="%i18n:@choose-map%" @change="onMapChange">
<option label="-Custom-" :value="mapName" v-if="mapName == '-Custom-'"/>
<option label="%i18n:@random%" :value="null"/>
<optgroup v-for="c in mapCategories" :key="c" :label="c">
<option v-for="m in maps" v-if="m.category == c" :key="m.name" :label="m.name" :value="m.name">{{ m.name }}</option>
</optgroup>
</select>
</header>
<div>
<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('')"
:data-none="x == ' '"
@click="onPixelClick(i, x)"
>
<template v-if="x == 'b'">%fa:circle%</template>
<template v-if="x == 'w'">%fa:circle R%</template>
@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 == 'w'"><template v-if="$store.state.device.darkmode">%fa:circle%</template><template v-else>%fa:circle R%</template></template>
</div>
</div>
</div>
</div>
</el-card>
<el-card class="bw">
<div slot="header">
<div class="card">
<header>
<span>%i18n:@black-or-white%</span>
</div>
<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>
</header>
<el-card class="rules">
<div slot="header">
<span>%i18n:@rules%</span>
<div>
<form-radio v-model="game.settings.bw" value="random" @change="updateSettings">%i18n:@random%</form-radio>
<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 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.loopedBoard" @change="updateSettings" text="%i18n:@looped-map%"/>
<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 class="card form" v-if="form">
<header>
<span>%i18n:@settings-of-the-bot%</span>
</header>
<div>
<el-alert v-for="message in messages"
:title="message.text"
:type="message.type"
:key="message.id"
/>
:key="message.id"/>
<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 slot="header">
<div class="card" v-if="item.type == 'radio'" :key="item.id">
<header>
<span>{{ item.label }}</span>
</div>
<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>
</header>
<el-card v-if="item.type == 'textbox'" :key="item.id">
<div slot="header">
<span>{{ item.label }}</span>
<div>
<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>
</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>
<el-input v-model="item.value" @change="onChangeForm($event, item)"/>
</el-card>
</template>
</el-card>
</div>
</div>
</div>
<footer>
<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-me%</template>
<template v-if="!isAccepted && !isOpAccepted">%i18n:@waiting-for-both%<mk-ellipsis/></template>
</p>
<div class="actions">
<el-button @click="exit">%i18n:@cancel%</el-button>
<el-button type="primary" @click="accept" v-if="!isAccepted">%i18n:@ready%</el-button>
<el-button type="primary" @click="cancel" v-if="isAccepted">%i18n:@cancel-ready%</el-button>
<form-button @click="exit">%i18n:@cancel%</form-button>
<form-button primary @click="accept" v-if="!isAccepted">%i18n:@ready%</form-button>
<form-button primary @click="cancel" v-if="isAccepted">%i18n:@cancel-ready%</form-button>
</div>
</footer>
</div>
@ -194,19 +220,19 @@ export default Vue.extend({
this.messages.unshift(x.message);
},
onChangeForm(v, item) {
onChangeForm(item) {
this.connection.send({
type: 'update-form',
id: item.id,
value: v
value: item.value
});
},
onMapChange(v) {
if (v == null) {
onMapChange() {
if (this.mapName == null) {
this.game.settings.map = null;
} 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.updateSettings();
@ -233,9 +259,9 @@ export default Vue.extend({
<style lang="stylus" scoped>
@import '~const.styl'
.root
root(isDark)
text-align center
background #f9f9f9
background isDark ? #191b22 : #f9f9f9
> header
padding 8px
@ -244,38 +270,48 @@ export default Vue.extend({
> div
padding 0 16px
> .map
> .bw
> .rules
> .bot-form
max-width 400px
> .card
margin 0 auto 16px auto
> footer
position sticky
bottom 0
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
&.map
> header
> select
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
grid-gap 4px
width 300px
height 300px
margin 0 auto
color isDark ? #fff : #444
> div
background transparent
border solid 2px #ddd
border solid 2px isDark ? #6a767f : #ddd
border-radius 6px
overflow hidden
cursor pointer
@ -289,9 +325,43 @@ export default Vue.extend({
&[data-none]
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>

View File

@ -1,58 +1,19 @@
<template>
<div class="mk-reversi">
<div class="vchtoekanapleubgzioubdtmlkribzfd">
<div v-if="game">
<x-gameroom :game="game"/>
</div>
<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>
<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 v-else-if="gameId">
...
</div>
<div class="index" v-else>
<h1>%i18n:@title%</h1>
<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>
<x-index @go="nav" @matching="onMatching"/>
</div>
</div>
</template>
@ -60,23 +21,26 @@
<script lang="ts">
import Vue from 'vue';
import XGameroom from './reversi.gameroom.vue';
import XIndex from './reversi.index.vue';
import Progress from '../../../../scripts/loading';
export default Vue.extend({
components: {
XGameroom
XGameroom,
XIndex
},
props: ['initGame'],
props: {
gameId: {
type: String,
required: false
}
},
data() {
return {
game: null,
games: [],
gamesFetching: true,
gamesMoreFetching: false,
myGames: [],
matching: null,
invitations: [],
connection: null,
connectionId: null,
pingClock: null
@ -84,34 +48,19 @@ export default Vue.extend({
},
watch: {
game(g) {
this.$emit('gamed', g);
}
},
created() {
if (this.initGame) {
this.game = this.initGame;
gameId() {
this.fetch();
}
},
mounted() {
this.fetch();
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('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(() => {
if (this.matching) {
@ -122,17 +71,11 @@ export default Vue.extend({
}
}, 3000);
}
(this as any).api('games/reversi/games').then(games => {
this.games = games;
this.gamesFetching = false;
});
},
beforeDestroy() {
if (this.connection) {
this.connection.off('matched', this.onMatched);
this.connection.off('invited', this.onInvited);
(this as any).os.streams.reversiStream.dispose(this.connectionId);
clearInterval(this.pingClock);
@ -140,33 +83,31 @@ export default Vue.extend({
},
methods: {
go(game) {
fetch() {
if (this.gameId == null) {
this.game = null;
} else {
Progress.start();
(this as any).api('games/reversi/games/show', {
gameId: game.id
gameId: this.gameId
}).then(game => {
this.matching = null;
this.game = game;
this.nav(game, true);
Progress.done();
});
}
},
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.matching = user;
} else {
this.game = res;
nav(game, silent) {
this.matching = null;
this.game = game;
if (!silent) {
this.$emit('nav', this.game);
}
});
});
});
},
onMatching(user) {
this.matching = user;
},
cancel() {
@ -188,10 +129,6 @@ export default Vue.extend({
onMatched(game) {
this.matching = null;
this.game = game;
},
onInvited(invite) {
this.invitations.unshift(invite);
}
}
});
@ -200,9 +137,9 @@ export default Vue.extend({
<style lang="stylus" scoped>
@import '~const.styl'
.mk-reversi
color #677f84
background #fff
root(isDark)
color isDark ? #fff : #677f84
background isDark ? #191b22 : #fff
> .matching
> h1
@ -219,109 +156,10 @@ export default Vue.extend({
text-align center
border-top dashed 1px #c4cdd4
> .index
> h1
margin 0
padding 24px
font-size 24px
text-align center
font-weight normal
color #fff
background linear-gradient(to bottom, #8bca3e, #d6cf31)
.vchtoekanapleubgzioubdtmlkribzfd[data-darkmode]
root(true)
& + p
margin 0
padding 12px
margin-bottom 12px
text-align center
font-size 14px
border-bottom solid 1px #d3d9dc
.vchtoekanapleubgzioubdtmlkribzfd:not([data-darkmode])
root(false)
> .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>

View File

@ -37,6 +37,8 @@ import uiTextarea from './ui/textarea.vue';
import uiSwitch from './ui/switch.vue';
import uiRadio from './ui/radio.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-menu', menu);
@ -75,3 +77,5 @@ Vue.component('ui-textarea', uiTextarea);
Vue.component('ui-switch', uiSwitch);
Vue.component('ui-radio', uiRadio);
Vue.component('ui-select', uiSelect);
Vue.component('form-button', formButton);
Vue.component('form-radio', formRadio);

View File

@ -56,7 +56,18 @@ export default Vue.component('misskey-flavored-markdown', {
}
case 'bold':
return createElement('strong', token.bold);
return createElement('b', token.bold);
case 'big':
return (createElement as any)('strong', {
attrs: {
style: 'display: inline-block; font-size: 200%;'
},
directives: [{
name: 'animate-css',
value: { classes: 'tada', iteration: 'infinite' }
}]
}, token.big);
case 'url':
return createElement(MkUrl, {

View File

@ -0,0 +1,86 @@
<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
&: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>

View 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>

View File

@ -71,7 +71,7 @@ export default Vue.extend({
this.user = user;
this.fetching = false;
Progress.done();
document.title = getUserName(this.user) + ' | Misskey';
document.title = getUserName(this.user) + ' | %i18n:common.name%';
});
},

View File

@ -34,7 +34,7 @@ import MkMessagingRoom from './views/pages/messaging-room.vue';
import MkNote from './views/pages/note.vue';
import MkSearch from './views/pages/search.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 MkFollow from '../common/views/pages/follow.vue';
@ -65,8 +65,7 @@ init(async (launch) => {
{ path: '/search', component: MkSearch },
{ path: '/tags/:tag', component: MkTag },
{ path: '/share', component: MkShare },
{ path: '/reversi', component: MkReversi },
{ path: '/reversi/:game', component: MkReversi },
{ path: '/reversi/:game?', component: MkReversi },
{ path: '/@:user', component: MkUser },
{ path: '/notes/:note', component: MkNote },
{ path: '/authorize-follow', component: MkFollow }

View File

@ -187,7 +187,7 @@ export default Vue.extend({
clearNotification() {
this.unreadCount = 0;
document.title = 'Misskey';
document.title = '%i18n:common.name%';
},
onVisibilitychange() {

View File

@ -0,0 +1,22 @@
<template>
<component :is="ui ? 'mk-ui' : 'div'">
<mk-reversi :game-id="$route.params.game" @nav="nav"/>
</component>
</template>
<script lang="ts">
import Vue from 'vue';
export default Vue.extend({
props: {
ui: {
default: false
}
},
methods: {
nav(game) {
history.pushState(null, null, '/reversi/' + game.id);
},
}
});
</script>

View File

@ -6,7 +6,7 @@
import Vue from 'vue';
export default Vue.extend({
mounted() {
document.title = 'Misskey - %i18n:@title%';
document.title = '%i18n:common.name% - %i18n:@title%';
}
});
</script>

View File

@ -16,7 +16,7 @@ export default Vue.extend({
}
},
mounted() {
document.title = 'Misskey';
document.title = '%i18n:common.name%';
Progress.start();
},

View File

@ -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>

View File

@ -1,12 +1,12 @@
<template>
<div class="pptjhabgjtt7kwskbfv4y3uml6fpuhmr">
<h1>%i18n:@share-with%</h1>
<h1>{{'%i18n:@share-with%'.split("{}")[0] + '%i18n:common.name%' + '%i18n:@share-with%'.split("{}")[1]}}</h1>
<div>
<mk-signin v-if="!$store.getters.isSignedIn"/>
<mk-post-form v-else-if="!posted" :initial-text="text" :instant="true" @posted="posted = true"/>
<p v-if="posted" class="posted">%fa:check%</p>
</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>
</template>

View File

@ -68,7 +68,7 @@ export default Vue.extend({
this.user = user;
this.fetching = false;
Progress.done();
document.title = getUserName(this.user) + ' | Misskey';
document.title = getUserName(this.user) + ' | %i18n:common.name%';
});
},

View File

@ -17,7 +17,7 @@
<main>
<div class="about">
<h1 v-if="name">{{ 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="%i18n:common.name%"></h1>
<p class="powerd-by" v-if="name">%i18n:@powered-by-misskey%</p>
<p class="desc" v-html="description || '%i18n:common.about%'"></p>
<a ref="signup" @click="signup">📦 %i18n:@signup%</a>
@ -32,7 +32,7 @@
<mk-nav class="nav"/>
</div>
<mk-forkit class="forkit"/>
<img src="assets/title.dark.svg" alt="Misskey">
<img src="assets/title.dark.svg" alt="%i18n:common.name%">
</div>
<div class="tl">
<mk-welcome-timeline :max="20"/>

View File

@ -6,8 +6,8 @@
<div class="mkw-polls--body" :data-darkmode="$store.state.device.darkmode">
<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">%fa:link%</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>
<mk-poll :note="poll"/>
</div>
<p class="empty" v-if="!fetching && poll == null">%i18n:@nothing%</p>

View File

@ -1,7 +1,7 @@
<template>
<div>
<b-navbar toggleable="md" type="dark" variant="info">
<b-navbar-brand>Misskey Developers</b-navbar-brand>
<b-navbar-brand>%i18n:common.name% Developers</b-navbar-brand>
<b-navbar-nav>
<b-nav-item to="/">Home</b-nav-item>
<b-nav-item to="/apps">Apps</b-nav-item>

View File

@ -35,7 +35,7 @@ import MkFavorites from './views/pages/favorites.vue';
import MkUserLists from './views/pages/user-lists.vue';
import MkUserList from './views/pages/user-list.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 MkShare from './views/pages/share.vue';
import MkFollow from '../common/views/pages/follow.vue';
@ -76,8 +76,7 @@ init((launch) => {
{ path: '/search', component: MkSearch },
{ path: '/tags/:tag', component: MkTag },
{ path: '/share', component: MkShare },
{ path: '/reversi', name: 'reversi', component: MkReversi },
{ path: '/reversi/:game', component: MkReversi },
{ path: '/reversi/:game?', name: 'reversi', component: MkReversi },
{ path: '/@:user', component: MkUser },
{ path: '/@:user/followers', component: MkFollowers },
{ path: '/@:user/following', component: MkFollowing },

View File

@ -183,7 +183,7 @@ export default Vue.extend({
clearNotification() {
this.unreadCount = 0;
document.title = 'Misskey';
document.title = '%i18n:common.name%';
},
onVisibilitychange() {

View File

@ -43,7 +43,7 @@ export default Vue.extend({
window.addEventListener('popstate', this.onPopState);
},
mounted() {
document.title = 'Misskey Drive';
document.title = '%i18n:common.name% Drive';
document.documentElement.style.background = '#fff';
},
beforeDestroy() {
@ -63,7 +63,7 @@ export default Vue.extend({
(this.$refs as any).browser.openContextMenu();
},
onMoveRoot(silent) {
const title = 'Misskey Drive';
const title = '%i18n:common.name% Drive';
if (!silent) {
// Rewrite URL
@ -76,7 +76,7 @@ export default Vue.extend({
this.folder = null;
},
onOpenFolder(folder, silent) {
const title = folder.name + ' | Misskey Drive';
const title = folder.name + ' | %i18n:common.name% Drive';
if (!silent) {
// Rewrite URL
@ -89,7 +89,7 @@ export default Vue.extend({
this.folder = folder;
},
onOpenFile(file, silent) {
const title = file.name + ' | Misskey Drive';
const title = file.name + ' | %i18n:common.name% Drive';
if (!silent) {
// Rewrite URL

View File

@ -28,7 +28,7 @@ export default Vue.extend({
this.fetch();
},
mounted() {
document.title = 'Misskey | %i18n:@notifications%';
document.title = '%i18n:common.name% | %i18n:@notifications%';
},
methods: {
fetch() {

View File

@ -49,7 +49,7 @@ export default Vue.extend({
this.user = user;
this.fetching = false;
document.title = '%i18n:@followers-of%'.replace('{}', this.name) + ' | Misskey';
document.title = '%i18n:@followers-of%'.replace('{}', this.name) + ' | %i18n:common.name%';
});
},
onLoaded() {

View File

@ -48,7 +48,7 @@ export default Vue.extend({
this.user = user;
this.fetching = false;
document.title = '%i18n:@followers-of%'.replace('{}', this.name) + ' | Misskey';
document.title = '%i18n:@followers-of%'.replace('{}', this.name) + ' | %i18n:common.name%';
});
},
onLoaded() {

View File

@ -0,0 +1,22 @@
<template>
<mk-ui>
<span slot="header">%fa:gamepad%%i18n:@reversi%</span>
<mk-reversi :game-id="$route.params.game" @nav="nav"/>
</mk-ui>
</template>
<script lang="ts">
import Vue from 'vue';
export default Vue.extend({
mounted() {
document.title = '%i18n:common.name% %i18n:@reversi%';
document.documentElement.style.background = '#fff';
},
methods: {
nav(game) {
history.pushState(null, null, '/reversi/' + game.id);
}
}
});
</script>

View File

@ -96,7 +96,7 @@ export default Vue.extend({
},
mounted() {
document.title = 'Misskey';
document.title = '%i18n:common.name%';
Progress.start();

View File

@ -47,7 +47,7 @@ export default Vue.extend({
this.user = user;
this.fetching = false;
document.title = `%i18n:@messaging%: ${Vue.filter('userName')(this.user)} | Misskey`;
document.title = `%i18n:@messaging%: ${Vue.filter('userName')(this.user)} | %i18n:common.name%`;
});
}
}

View File

@ -11,7 +11,7 @@ import getAcct from '../../../../../misc/acct/render';
export default Vue.extend({
mounted() {
document.title = 'Misskey %i18n:@messaging%';
document.title = '%i18n:common.name% %i18n:@messaging%';
},
methods: {
navigate(user) {

View File

@ -31,7 +31,7 @@ export default Vue.extend({
this.fetch();
},
mounted() {
document.title = 'Misskey';
document.title = '%i18n:common.name%';
},
methods: {
fetch() {

View File

@ -15,7 +15,7 @@ import Progress from '../../../common/scripts/loading';
export default Vue.extend({
mounted() {
document.title = 'Misskey | %i18n:@notifications%';
document.title = '%i18n:common.name% | %i18n:@notifications%';
Progress.start();
},

View File

@ -25,7 +25,7 @@ export default Vue.extend({
};
},
mounted() {
document.title = 'Misskey | %i18n:@title%';
document.title = '%i18n:common.name% | %i18n:@title%';
Progress.start();

View File

@ -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>

View File

@ -34,7 +34,7 @@ export default Vue.extend({
}
},
mounted() {
document.title = `%i18n:@search%: ${this.q} | Misskey`;
document.title = `%i18n:@search%: ${this.q} | %i18n:common.name%`;
this.fetch();
},

View File

@ -142,7 +142,7 @@ export default Vue.extend({
},
mounted() {
document.title = 'Misskey | %i18n:@settings%';
document.title = '%i18n:common.name% | %i18n:@settings%';
},
methods: {

View File

@ -1,6 +1,6 @@
<template>
<div class="azibmfpleajagva420swmu4c3r7ni7iw">
<h1>Misskeyで共有</h1>
<h1>{{'%i18n:@share-with%'.split("{}")[0] + '%i18n:common.name%' + '%i18n:@share-with%'.split("{}")[1]}}</h1>
<div>
<mk-signin v-if="!$store.getters.isSignedIn"/>
<mk-post-form v-else-if="!posted" :initial-text="text" :instant="true" @posted="posted = true"/>

View File

@ -23,7 +23,7 @@ export default Vue.extend({
};
},
mounted() {
document.title = 'Misskey | %i18n:@title%';
document.title = '%i18n:common.name% | %i18n:@title%';
Progress.start();

View File

@ -106,7 +106,7 @@ export default Vue.extend({
this.fetching = false;
Progress.done();
document.title = Vue.filter('userName')(this.user) + ' | Misskey';
document.title = Vue.filter('userName')(this.user) + ' | %i18n:common.name%';
});
}
}

View File

@ -1,7 +1,7 @@
<template>
<div class="welcome">
<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="%i18n:common.name%">
<p class="host">{{ host }}</p>
<div class="about">
<h2>{{ name || 'unidentified' }}</h2>

View File

@ -102,12 +102,12 @@ export default Vue.extend({
},
mounted() {
document.title = 'Misskey';
document.title = '%i18n:common.name%';
},
methods: {
hint() {
alert('ウィジェットを追加/削除したり並べ替えたりできます。ウィジェットを移動するには「三」をドラッグします。ウィジェットを削除するには「x」をタップします。いくつかのウィジェットはタップすることで表示を変更できます。');
alert('%i18n:@widgets-hints%');
},
widgetFunc(id) {

View File

@ -1,15 +1,15 @@
# MisskeyリバーシBotの開発
Misskeyのリバーシ機能に対応したBotの開発方法をここに記します。
1. `reversi`ストリームに以下のパラメータを付けて接続する:
1. `games/reversi`ストリームに以下のパラメータを付けて接続する:
* `i`: botアカウントのAPIキー
2. 対局への招待が来たら、ストリームから`invited`イベントが流れてくる
* イベントの中身に、`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キー
* `game`: `game``id`
@ -96,8 +96,8 @@ y = Math.floor(pos / mapWidth)
フォームコントロールは、次のようなオブジェクトです:
```javascript
{
id: 'button1',
type: 'button',
id: 'switch1',
type: 'switch',
label: 'Enable hoge',
value: false
}
@ -110,21 +110,21 @@ y = Math.floor(pos / mapWidth)
### フォームの操作を受け取る
ユーザーがフォームを操作すると、ストリームから`update-form`イベントが流れてきます。
イベントの中身には、コントロールのIDと、ユーザーが設定した値が含まれています。
例えば、上で示したボタンをユーザーがオンにしたとすると、次のイベントが流れてきます:
例えば、上で示したスイッチをユーザーがオンにしたとすると、次のイベントが流れてきます:
```javascript
{
id: 'button1',
id: 'switch1',
value: true
}
```
### フォームコントロールの種類
#### ボタン
type: `button`
ボタンを表示します。何かの機能をオン/オフさせたい場合に有用です。
#### スイッチ
type: `switch`
スイッチを表示します。何かの機能をオン/オフさせたい場合に有用です。
##### プロパティ
`desc` ... ボタンの詳細な説明。
`desc` ... スイッチの詳細な説明。
#### ラジオボタン
type: `radio`
@ -145,6 +145,15 @@ items: [{
}]
```
#### スライダー
type: `slider`
スライダーを表示します。
##### プロパティ
`min` ... スライダーの下限。
`max` ... スライダーの上限。
`step` ... 入力欄で刻むステップ値。
#### テキストボックス
type: `textbox`
テキストボックスを表示します。ユーザーになにか入力させる一般的な用途に利用できます。

View 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": {}
}

View 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"
]
}

View File

@ -1,5 +1,5 @@
const { lib: emojilib } = require('emojilib');
import { JSDOM } from 'jsdom';
const JSDOM = require('jsdom');
import config from '../config';
import { INote } from '../models/note';
import { TextElement } from './parse';
@ -11,6 +11,12 @@ const handlers: { [key: string]: (window: any, token: any, mentionedRemoteUsers:
document.body.appendChild(b);
},
big({ document }, { big }) {
const b = document.createElement('strong');
b.textContent = big;
document.body.appendChild(b);
},
code({ document }, { code }) {
const pre = document.createElement('pre');
const inner = document.createElement('code');

View File

@ -0,0 +1,20 @@
/**
* Bold
*/
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;
}

View File

@ -3,6 +3,7 @@
*/
import { TextElementBold } from './elements/bold';
import { TextElementBig } from './elements/big';
import { TextElementCode } from './elements/code';
import { TextElementEmoji } from './elements/emoji';
import { TextElementHashtag } from './elements/hashtag';
@ -15,6 +16,7 @@ import { TextElementTitle } from './elements/title';
import { TextElementUrl } from './elements/url';
const elements = [
require('./elements/big'),
require('./elements/bold'),
require('./elements/title'),
require('./elements/url'),
@ -30,6 +32,7 @@ const elements = [
export type TextElement = { type: 'text', content: string }
| TextElementBold
| TextElementBig
| TextElementCode
| TextElementEmoji
| TextElementHashtag

View File

@ -20,20 +20,15 @@ export default (user: ILocalUser, url: string, object: any) => new Promise((reso
method: 'POST',
path: pathname + search,
}, res => {
res.on('end', () => {
log(`${url} --> ${res.statusCode}`);
if (res.statusCode >= 200 && res.statusCode < 300) {
resolve();
if (res.statusCode >= 400) {
reject();
} else {
reject(res);
resolve();
}
});
res.on('data', () => {});
res.on('error', reject);
});
sign(req, {
authorizationHeaderName: 'Signature',
key: user.keypair,

View File

@ -103,6 +103,10 @@ export default async (user: IUser, data: Option, silent = false) => new Promise<
data.visibleUsers = data.visibleUsers.filter(x => x != null);
}
if (data.text) {
data.text = data.text.trim();
}
// Parse MFM
const tokens = data.text ? parse(data.text) : [];

View File

@ -31,6 +31,14 @@ describe('Text', () => {
], tokens);
});
it('big', () => {
const tokens = analyze('***Strawberry*** Pasta');
assert.deepEqual([
{ type: 'big', content: '***Strawberry***', bold: 'Strawberry' },
{ type: 'text', content: ' Pasta' }
], tokens);
});
it('mention', () => {
const tokens = analyze('@himawari お腹ペコい');
assert.deepEqual([