Merge branch 'master' into l10n_master
This commit is contained in:
		
						commit
						7f08d84989
					
				|  | @ -917,6 +917,19 @@ mobile/views/pages/signup.vue: | |||
|   lets-start: "Let's start! 📦" | ||||
| mobile/views/pages/followers.vue: | ||||
|   followers-of: "Followers of {}" | ||||
| mobile/views/pages/signup.vue: | ||||
|   lets-start: "Let's start! 📦" | ||||
| mobile/views/pages/tag.vue: | ||||
|   no-posts-found-japanese: "" | ||||
|   no-posts-found-english: "No posts were found for " | ||||
|   left-quote: "\"" | ||||
|   right-quote: "\"." | ||||
| mobile/views/pages/welcome.vue: | ||||
|   signup: "Sign up." | ||||
| mobile/views/pages/widgets.vue: | ||||
|   dashboard: "Dashboard" | ||||
| mobile/views/pages/widgets/activity.vue: | ||||
|   activity: "Activity" | ||||
| mobile/views/pages/following.vue: | ||||
|   following-of: "Following of {}" | ||||
| mobile/views/pages/home.vue: | ||||
|  |  | |||
							
								
								
									
										141
									
								
								locales/ja.yml
								
								
								
								
							
							
						
						
									
										141
									
								
								locales/ja.yml
								
								
								
								
							|  | @ -6,7 +6,6 @@ common: | |||
|   misskey: "A ⭐ of fediverse" | ||||
|   about-title: "A ⭐ of fediverse." | ||||
|   about: "Misskeyを見つけていただき、ありがとうございます。Misskeyは、地球で生まれた<b>分散マイクロブログSNS</b>です。Fediverse(様々なSNSで構成される宇宙)の中に存在するため、他のSNSと相互に繋がっています。暫し都会の喧騒から離れて、新しいインターネットにダイブしてみませんか。" | ||||
|    | ||||
|   customization-tips: | ||||
|     title: "カスタマイズのヒント" | ||||
|     paragraph1: "ホームのカスタマイズでは、ウィジェットを追加/削除したり、ドラッグ&ドロップして並べ替えたりすることができます。" | ||||
|  | @ -14,7 +13,7 @@ common: | |||
|     paragraph3: "ウィジェットを削除するには、ヘッダーの<strong>「ゴミ箱」</strong>と書かれたエリアにウィジェットをドラッグ&ドロップします。" | ||||
|     paragraph4: "カスタマイズを終了するには、右上の「完了」をクリックします。" | ||||
|     gotit: "Got it!" | ||||
| 
 | ||||
|   name: "Misskey" | ||||
|   time: | ||||
|     unknown: "なぞのじかん" | ||||
|     future: "未来" | ||||
|  | @ -38,6 +37,15 @@ common: | |||
|     friday: "金" | ||||
|     saturday: "土" | ||||
| 
 | ||||
|   weekday: | ||||
|     sunday: "日曜日" | ||||
|     monday: "月曜日" | ||||
|     tuesday: "火曜日" | ||||
|     wednesday: "水曜日" | ||||
|     thursday: "木曜日" | ||||
|     friday: "金曜日" | ||||
|     saturday: "土曜日" | ||||
| 
 | ||||
|   reactions: | ||||
|     like: "いいね" | ||||
|     love: "しゅき" | ||||
|  | @ -75,6 +83,10 @@ common: | |||
|     turn-of: "{}のターンです" | ||||
|     past-turn-of: "{}のターン" | ||||
|     won: "{}の勝ち" | ||||
|     black: "黒" | ||||
|     white: "白" | ||||
|     total: "合計" | ||||
|     this-turn: "{}ターン目" | ||||
| 
 | ||||
|   widgets: | ||||
|     analog-clock: "アナログ時計" | ||||
|  | @ -119,6 +131,44 @@ common: | |||
|     stack-left: "左に重ねる" | ||||
|     pop-right: "右に出す" | ||||
| 
 | ||||
| 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: "キャンセル" | ||||
| 
 | ||||
| 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: "準備続行" | ||||
| 
 | ||||
| common/views/components/connect-failed.vue: | ||||
|   title: "サーバーに接続できません" | ||||
|   description: "インターネット回線に問題があるか、サーバーがダウンまたはメンテナンスしている可能性があります。しばらくしてから{再度お試し}ください。" | ||||
|  | @ -267,6 +317,19 @@ common/views/widgets/broadcast.vue: | |||
|   have-a-nice-day: "良い一日を!" | ||||
|   next: "次" | ||||
| 
 | ||||
| common/views/widgets/calendar.vue: | ||||
|   year-english: "" | ||||
|   year-japanese: "年" | ||||
|   month-english: "" | ||||
|   month-japanese: "月" | ||||
|   day-english: "" | ||||
|   day-japanese: "日" | ||||
|   weekday-english: "" | ||||
|   weekday-japanese: "曜日" | ||||
|   today: "今日:" | ||||
|   this-month: "今月:" | ||||
|   this-year: "今年:" | ||||
| 
 | ||||
| common/views/widgets/donation.vue: | ||||
|   title: "寄付のお願い" | ||||
|   text: "Misskeyの運営にはドメイン、サーバー等のコストが掛かります。Misskeyは広告を掲載したりしないため、収入を皆様からの寄付に頼っています。もしご興味があれば、{}までご連絡ください。ご協力ありがとうございます。" | ||||
|  | @ -292,12 +355,34 @@ common/views/widgets/memo.vue: | |||
|   title: "付箋" | ||||
|   memo: "ここに書いて!" | ||||
|   save: "保存" | ||||
|    | ||||
| 
 | ||||
| common/views/widgets/slideshow.vue: | ||||
|   folder-customize-mode: "フォルダを指定するには、カスタマイズモードを終了してください" | ||||
|   folder: "クリックしてフォルダを指定してください" | ||||
|   no-image: "このフォルダには画像がありません" | ||||
| 
 | ||||
| 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: "MisskeyはAGPLv3です" | ||||
|   tips-line10: "タイムマシンウィジェットを利用すると、簡単に過去のタイムラインに遡れます" | ||||
|   tips-line11: "投稿の ... をクリックして、投稿をユーザーページにピン留めできます" | ||||
|   tips-line13: "投稿に添付したファイルは全てドライブに保存されます" | ||||
|   tips-line14: "ホームのカスタマイズ中、ウィジェットを右クリックしてデザインを変更できます" | ||||
|   tips-line17: "「**」でテキストを囲むと**強調表示**されます" | ||||
|   tips-line19: "いくつかのウィンドウはブラウザの外に切り離すことができます" | ||||
|   tips-line20: "カレンダーウィジェットのパーセンテージは、経過の割合を示しています" | ||||
|   tips-line21: "APIを利用してbotの開発なども行えます" | ||||
|   tips-line23: "まゆかわいいよまゆ" | ||||
|   tips-line24: "Misskeyは2014年にサービスを開始しました" | ||||
|   tips-line25: "対応ブラウザではMisskeyを開いていなくても通知を受け取れます" | ||||
| 
 | ||||
| common/views/pages/follow.vue: | ||||
|   signed-in-as: "{}としてサインイン中" | ||||
|   following: "フォロー中" | ||||
|  | @ -502,7 +587,7 @@ desktop/views/components/post-form.vue: | |||
|   geolocation-alert: "お使いの端末は位置情報に対応していません" | ||||
|   error: "エラー" | ||||
|   enter-username: "ユーザー名を入力してください" | ||||
|    | ||||
| 
 | ||||
| desktop/views/components/post-form-window.vue: | ||||
|   note: "新規投稿" | ||||
|   reply: "返信" | ||||
|  | @ -642,6 +727,10 @@ desktop/views/components/settings.api.vue: | |||
| desktop/views/components/settings.apps.vue: | ||||
|   no-apps: "連携しているアプリケーションはありません" | ||||
| 
 | ||||
| desktop/views/components/settings.drive.vue: | ||||
|   max: "中" | ||||
|   in-use: "使用中" | ||||
| 
 | ||||
| desktop/views/components/settings.mute.vue: | ||||
|   no-users: "ミュートしているユーザーはいません" | ||||
| 
 | ||||
|  | @ -718,6 +807,8 @@ desktop/views/components/received-follow-requests-window.vue: | |||
|   accept: "承認" | ||||
|   reject: "拒否" | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| desktop/views/components/user-lists-window.vue: | ||||
|   title: "リスト" | ||||
|   create-list: "リストを作成" | ||||
|  | @ -758,6 +849,7 @@ desktop/views/pages/welcome.vue: | |||
|   signin-button: "やってる" | ||||
|   signup-button: "やる" | ||||
|   timeline: "タイムライン" | ||||
|   powered-by-misskey: "Powered by <b>Misskey</b>." | ||||
| 
 | ||||
| desktop/views/pages/drive.vue: | ||||
|   title: "Misskey Drive" | ||||
|  | @ -778,6 +870,23 @@ desktop/views/pages/selectdrive.vue: | |||
|   cancel: "キャンセル" | ||||
|   upload: "PCからドライブにファイルをアップロード" | ||||
| 
 | ||||
| desktop/views/pages/search.vue: | ||||
|   not-available: "検索機能を利用することができません。" | ||||
|   not-found-quotes1: "「" | ||||
|   not-found-quotes2: "」" | ||||
|   not-found-text-english: "" | ||||
|   not-found-text-japanese: "に関する投稿は見つかりませんでした。" | ||||
| 
 | ||||
| desktop/views/pages/share.vue: | ||||
|   share-with: "Misskeyで共有" | ||||
|   close: "閉じる" | ||||
| 
 | ||||
| desktop/views/pages/tag.vue: | ||||
|   no-posts-found-english: "" | ||||
|   no-posts-found-japanese: "に関する投稿は見つかりませんでした。" | ||||
|   left-quote: "「" | ||||
|   right-quote: "」" | ||||
| 
 | ||||
| desktop/views/pages/user-list.users.vue: | ||||
|   users: "ユーザー" | ||||
|   add-user: "ユーザーを追加" | ||||
|  | @ -967,6 +1076,9 @@ mobile/views/components/timeline.vue: | |||
|   empty: "投稿がありません" | ||||
|   load-more: "もっと" | ||||
| 
 | ||||
| mobile/views/components/ui.header.vue: | ||||
|   welcome-back: "おかえりなさい、" | ||||
| 
 | ||||
| mobile/views/components/ui.nav.vue: | ||||
|   timeline: "タイムライン" | ||||
|   notifications: "通知" | ||||
|  | @ -1003,6 +1115,9 @@ mobile/views/pages/drive.vue: | |||
|   drive: "ドライブ" | ||||
|   more: "もっと見る" | ||||
| 
 | ||||
| mobile/views/pages/signup.vue: | ||||
|   lets-start: "📦 始めましょう" | ||||
| 
 | ||||
| mobile/views/pages/followers.vue: | ||||
|   followers-of: "{}のフォロワー" | ||||
| 
 | ||||
|  | @ -1015,6 +1130,21 @@ mobile/views/pages/home.vue: | |||
|   hybrid: "ソーシャル" | ||||
|   global: "グローバル" | ||||
| 
 | ||||
| mobile/views/pages/tag.vue: | ||||
|   no-posts-found-japanese: "に関する投稿は見つかりませんでした。" | ||||
|   no-posts-found-english: "" | ||||
|   left-quote: "「" | ||||
|   right-quote: "」" | ||||
| 
 | ||||
| mobile/views/pages/welcome.vue: | ||||
|   signup: "新規登録" | ||||
| 
 | ||||
| mobile/views/pages/widgets.vue: | ||||
|   dashboard: "ダッシュボード" | ||||
| 
 | ||||
| mobile/views/pages/widgets/activity.vue: | ||||
|   activity: "アクティビティ" | ||||
| 
 | ||||
| mobile/views/pages/messaging.vue: | ||||
|   messaging: "メッセージ" | ||||
| 
 | ||||
|  | @ -1035,6 +1165,9 @@ mobile/views/pages/notifications.vue: | |||
|   notifications: "通知" | ||||
|   read-all: "すべての通知を既読にしますか?" | ||||
| 
 | ||||
| mobile/views/pages/reversi.vue: | ||||
|   reversi: "リバーシ" | ||||
| 
 | ||||
| mobile/views/pages/settings/settings.profile.vue: | ||||
|   title: "プロフィール" | ||||
|   name: "名前" | ||||
|  |  | |||
							
								
								
									
										12
									
								
								package.json
								
								
								
								
							
							
						
						
									
										12
									
								
								package.json
								
								
								
								
							|  | @ -1,8 +1,8 @@ | |||
| { | ||||
| 	"name": "misskey", | ||||
| 	"author": "syuilo <i@syuilo.com>", | ||||
| 	"version": "5.8.0", | ||||
| 	"clientVersion": "1.0.7664", | ||||
| 	"version": "5.9.0", | ||||
| 	"clientVersion": "1.0.7726", | ||||
| 	"codename": "nighthike", | ||||
| 	"main": "./built/index.js", | ||||
| 	"private": true, | ||||
|  | @ -60,7 +60,7 @@ | |||
| 		"@types/mocha": "5.2.3", | ||||
| 		"@types/mongodb": "3.1.2", | ||||
| 		"@types/ms": "0.7.30", | ||||
| 		"@types/node": "10.5.4", | ||||
| 		"@types/node": "10.5.5", | ||||
| 		"@types/parse5": "5.0.0", | ||||
| 		"@types/portscanner": "2.1.0", | ||||
| 		"@types/pug": "2.0.4", | ||||
|  | @ -178,7 +178,7 @@ | |||
| 		"rimraf": "2.6.2", | ||||
| 		"rndstr": "1.0.0", | ||||
| 		"s-age": "1.1.2", | ||||
| 		"sass-loader": "7.0.3", | ||||
| 		"sass-loader": "7.1.0", | ||||
| 		"seedrandom": "2.4.3", | ||||
| 		"sharp": "0.20.5", | ||||
| 		"showdown": "1.8.6", | ||||
|  | @ -202,14 +202,14 @@ | |||
| 		"url-loader": "1.0.1", | ||||
| 		"uuid": "3.3.2", | ||||
| 		"v-animate-css": "0.0.2", | ||||
| 		"vue": "2.5.16", | ||||
| 		"vue": "2.5.17", | ||||
| 		"vue-cropperjs": "2.2.1", | ||||
| 		"vue-js-modal": "1.3.16", | ||||
| 		"vue-json-tree-view": "2.1.4", | ||||
| 		"vue-loader": "15.2.6", | ||||
| 		"vue-router": "3.0.1", | ||||
| 		"vue-style-loader": "4.1.1", | ||||
| 		"vue-template-compiler": "2.5.16", | ||||
| 		"vue-template-compiler": "2.5.17", | ||||
| 		"vuedraggable": "2.16.0", | ||||
| 		"vuex": "3.0.1", | ||||
| 		"vuex-persistedstate": "2.5.4", | ||||
|  |  | |||
|  | @ -1,6 +1,6 @@ | |||
| <template> | ||||
| <div class="root"> | ||||
| 	<header><b>{{ blackUser.name }}</b>(黒) vs <b>{{ whiteUser.name }}</b>(白)</header> | ||||
| 	<header><b>{{ blackUser.name }}</b>(%i18n:common.reversi.black%) vs <b>{{ whiteUser.name }}</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.name) }}<mk-ellipsis/></p> | ||||
|  | @ -39,7 +39,7 @@ | |||
| 		</div> | ||||
| 	</div> | ||||
| 
 | ||||
| 	<p class="status"><b>{{ logPos }}ターン目</b> 黒:{{ o.blackCount }} 白:{{ o.whiteCount }} 合計:{{ o.blackCount + o.whiteCount }}</p> | ||||
| 	<p class="status"><b>{{ '%i18n:common.reversi.this-turn%'.split('{}')[0] }}{{ logPos }}{{ '%i18n:common.reversi.this-turn%'.split('{}')[1] }}</b> %i18n:common.reversi.black%:{{ o.blackCount }} %i18n:common.reversi.white%:{{ o.whiteCount }} %i18n:common.reversi.total%:{{ o.blackCount + o.whiteCount }}</p> | ||||
| 
 | ||||
| 	<div class="player" v-if="game.isEnded"> | ||||
| 		<el-button-group> | ||||
|  |  | |||
|  | @ -3,12 +3,12 @@ | |||
| 	<header><b>{{ game.user1.name }}</b> vs <b>{{ game.user2.name }}</b></header> | ||||
| 
 | ||||
| 	<div> | ||||
| 		<p>ゲームの設定</p> | ||||
| 		<p>%i18n:@settings-of-the-game%</p> | ||||
| 
 | ||||
| 		<el-card class="map"> | ||||
| 			<div slot="header"> | ||||
| 				<el-select :class="$style.mapSelect" v-model="mapName" placeholder="マップを選択" @change="onMapChange"> | ||||
| 					<el-option label="ランダム" :value="null"/> | ||||
| 				<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> | ||||
|  | @ -30,25 +30,25 @@ | |||
| 
 | ||||
| 		<el-card class="bw"> | ||||
| 			<div slot="header"> | ||||
| 				<span>先手/後手</span> | ||||
| 				<span>%i18n:@black-or-white%</span> | ||||
| 			</div> | ||||
| 			<el-radio v-model="game.settings.bw" label="random" @change="updateSettings">ランダム</el-radio> | ||||
| 			<el-radio v-model="game.settings.bw" :label="1" @change="updateSettings">{{ game.user1.name }}が黒</el-radio> | ||||
| 			<el-radio v-model="game.settings.bw" :label="2" @change="updateSettings">{{ game.user2.name }}が黒</el-radio> | ||||
| 			<el-radio v-model="game.settings.bw" label="random" @change="updateSettings">%i18n:@random%</el-radio> | ||||
| 			<el-radio v-model="game.settings.bw" :label="1" @change="updateSettings">{{ '%i18n:@black-is%'.split('{}')[0] }}{{ game.user1.name }}{{ '%i18n:@black-is%'.split('{}')[1] }}</el-radio> | ||||
| 			<el-radio v-model="game.settings.bw" :label="2" @change="updateSettings">{{ '%i18n:@black-is%'.split('{}')[0] }}{{ game.user2.name }}{{ '%i18n:@black-is%'.split('{}')[1] }}</el-radio> | ||||
| 		</el-card> | ||||
| 
 | ||||
| 		<el-card class="rules"> | ||||
| 			<div slot="header"> | ||||
| 				<span>ルール</span> | ||||
| 				<span>%i18n:@rules%</span> | ||||
| 			</div> | ||||
| 			<mk-switch v-model="game.settings.isLlotheo" @change="updateSettings" text="石の少ない方が勝ち(ロセオ)"/> | ||||
| 			<mk-switch v-model="game.settings.loopedBoard" @change="updateSettings" text="ループマップ"/> | ||||
| 			<mk-switch v-model="game.settings.canPutEverywhere" @change="updateSettings" text="どこでも置けるモード"/> | ||||
| 			<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>Botの設定</span> | ||||
| 				<span>%i18n:@settings-of-the-bot%</span> | ||||
| 			</div> | ||||
| 			<el-alert v-for="message in messages" | ||||
| 				:title="message.text" | ||||
|  | @ -77,16 +77,16 @@ | |||
| 
 | ||||
| 	<footer> | ||||
| 		<p class="status"> | ||||
| 			<template v-if="isAccepted && isOpAccepted">ゲームは数秒後に開始されます<mk-ellipsis/></template> | ||||
| 			<template v-if="isAccepted && !isOpAccepted">相手の準備が完了するのを待っています<mk-ellipsis/></template> | ||||
| 			<template v-if="!isAccepted && isOpAccepted">あなたの準備が完了するのを待っています</template> | ||||
| 			<template v-if="!isAccepted && !isOpAccepted">準備中<mk-ellipsis/></template> | ||||
| 			<template v-if="isAccepted && isOpAccepted">%i18n:@this-gane-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">キャンセル</el-button> | ||||
| 			<el-button type="primary" @click="accept" v-if="!isAccepted">準備完了</el-button> | ||||
| 			<el-button type="primary" @click="cancel" v-if="isAccepted">準備続行</el-button> | ||||
| 			<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> | ||||
| 		</div> | ||||
| 	</footer> | ||||
| </div> | ||||
|  |  | |||
|  | @ -4,32 +4,30 @@ | |||
| 		<x-gameroom :game="game"/> | ||||
| 	</div> | ||||
| 	<div class="matching" v-else-if="matching"> | ||||
| 		<h1><b>{{ matching.name }}</b>を待っています<mk-ellipsis/></h1> | ||||
| 		<h1>{{ '%i18n:@matching.waiting-for%'.split('{}')[0] }}<b>{{ matching.name }}</b>{{ '%i18n:@matching.waiting-for%'.split('{}')[1] }}<mk-ellipsis/></h1> | ||||
| 		<div class="cancel"> | ||||
| 			<el-button round @click="cancel">キャンセル</el-button> | ||||
| 			<el-button round @click="cancel">%i18n:@matching.cancel%</el-button> | ||||
| 		</div> | ||||
| 	</div> | ||||
| 	<div class="index" v-else> | ||||
| 		<h1>Misskey Reversi</h1> | ||||
| 		<p>他のMisskeyユーザーとリバーシで対戦しよう</p> | ||||
| 		<h1>%i18n:@title%</h1> | ||||
| 		<p>%i18n:@sub-title%</p> | ||||
| 		<div class="play"> | ||||
| 			<el-button round>フリーマッチ(準備中)</el-button> | ||||
| 			<el-button type="primary" round @click="match">指名</el-button> | ||||
| 			<!--<el-button round>フリーマッチ(準備中)</el-button>--> | ||||
| 			<el-button type="primary" round @click="match">%i18n:@invite%</el-button> | ||||
| 			<details> | ||||
| 				<summary>遊び方</summary> | ||||
| 				<summary>%i18n:@rule%</summary> | ||||
| 				<div> | ||||
| 					<p>リバーシは、相手と交互に石をボードに置いてゆき、相手の石を挟んでひっくり返しながら、最終的に残った石が多い方が勝ちというボードゲームです。</p> | ||||
| 					<p>%i18n:@rule-desc%</p> | ||||
| 					<dl> | ||||
| 						<dt><b>フリーマッチ</b></dt> | ||||
| 						<dd>ランダムなユーザーと対戦するモードです。</dd> | ||||
| 						<dt><b>指名</b></dt> | ||||
| 						<dd>指定したユーザーと対戦するモードです。</dd> | ||||
| 						<dt><b>%i18n:@mode-invite%</b></dt> | ||||
| 						<dd>%i18n:@mode-invite-desc%</dd> | ||||
| 					</dl> | ||||
| 				</div> | ||||
| 			</details> | ||||
| 		</div> | ||||
| 		<section v-if="invitations.length > 0"> | ||||
| 			<h2>対局の招待があります!:</h2> | ||||
| 			<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.name }}</b></span> | ||||
|  | @ -38,21 +36,21 @@ | |||
| 			</div> | ||||
| 		</section> | ||||
| 		<section v-if="myGames.length > 0"> | ||||
| 			<h2>自分の対局</h2> | ||||
| 			<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.name }}</b> vs <b>{{ g.user2.name }}</b></span> | ||||
| 				<span class="state">{{ g.isEnded ? '終了' : '進行中' }}</span> | ||||
| 				<span class="state">{{ g.isEnded ? '%i18n:@game-state.ended%' : '%i18n:@game-state.playing%' }}</span> | ||||
| 			</a> | ||||
| 		</section> | ||||
| 		<section v-if="games.length > 0"> | ||||
| 			<h2>みんなの対局</h2> | ||||
| 			<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.name }}</b> vs <b>{{ g.user2.name }}</b></span> | ||||
| 				<span class="state">{{ g.isEnded ? '終了' : '進行中' }}</span> | ||||
| 				<span class="state">{{ g.isEnded ? '%i18n:@game-state.ended%' : '%i18n:@game-state.playing%' }}</span> | ||||
| 			</a> | ||||
| 		</section> | ||||
| 	</div> | ||||
|  | @ -153,7 +151,7 @@ export default Vue.extend({ | |||
| 
 | ||||
| 		match() { | ||||
| 			(this as any).apis.input({ | ||||
| 				title: 'ユーザー名を入力してください' | ||||
| 				title: '%i18n:@enter-username%' | ||||
| 			}).then(username => { | ||||
| 				(this as any).api('users/show', { | ||||
| 					username | ||||
|  |  | |||
|  | @ -4,27 +4,27 @@ | |||
| 		<div class="mkw-calendar--body"> | ||||
| 			<div class="calendar" :data-is-holiday="isHoliday"> | ||||
| 				<p class="month-and-year"> | ||||
| 					<span class="year">{{ year }}年</span> | ||||
| 					<span class="month">{{ month }}月</span> | ||||
| 					<span class="year">%i18n:@year-english%{{ year }}%i18n:@year-japanese%</span> | ||||
| 					<span class="month">%i18n:@month-english%{{ month }}%i18n:@month-japanese%</span> | ||||
| 				</p> | ||||
| 				<p class="day">{{ day }}日</p> | ||||
| 				<p class="week-day">{{ weekDay }}曜日</p> | ||||
| 				<p class="day">%i18n:@day-english%{{ day }}%i18n:@day-japanese%</p> | ||||
| 				<p class="week-day">{{ weekDay }}</p> | ||||
| 			</div> | ||||
| 			<div class="info"> | ||||
| 				<div> | ||||
| 					<p>今日:<b>{{ dayP.toFixed(1) }}%</b></p> | ||||
| 					<p>%i18n:@today%<b>{{ dayP.toFixed(1) }}%</b></p> | ||||
| 					<div class="meter"> | ||||
| 						<div class="val" :style="{ width: `${dayP}%` }"></div> | ||||
| 					</div> | ||||
| 				</div> | ||||
| 				<div> | ||||
| 					<p>今月:<b>{{ monthP.toFixed(1) }}%</b></p> | ||||
| 					<p>%i18n:@this-month%<b>{{ monthP.toFixed(1) }}%</b></p> | ||||
| 					<div class="meter"> | ||||
| 						<div class="val" :style="{ width: `${monthP}%` }"></div> | ||||
| 					</div> | ||||
| 				</div> | ||||
| 				<div> | ||||
| 					<p>今年:<b>{{ yearP.toFixed(1) }}%</b></p> | ||||
| 					<p>%i18n:@this-year%<b>{{ yearP.toFixed(1) }}%</b></p> | ||||
| 					<div class="meter"> | ||||
| 						<div class="val" :style="{ width: `${yearP}%` }"></div> | ||||
| 					</div> | ||||
|  | @ -84,7 +84,15 @@ export default define({ | |||
| 			this.year = ny; | ||||
| 			this.month = nm + 1; | ||||
| 			this.day = nd; | ||||
| 			this.weekDay = ['日', '月', '火', '水', '木', '金', '土'][now.getDay()]; | ||||
| 			this.weekDay = [ | ||||
| 				'%i18n:common.weekday.sunday%', | ||||
| 				'%i18n:common.weekday.monday%', | ||||
| 				'%i18n:common.weekday.tuesday%', | ||||
| 				'%i18n:common.weekday.wednesday%', | ||||
| 				'%i18n:common.weekday.thursday%', | ||||
| 				'%i18n:common.weekday.friday%', | ||||
| 				'%i18n:common.weekday.saturday%' | ||||
| 			][now.getDay()]; | ||||
| 
 | ||||
| 			const dayNumer   = now.getTime() - new Date(ny, nm, nd).getTime(); | ||||
| 			const dayDenom   = 1000/*ms*/ * 60/*s*/ * 60/*m*/ * 24/*h*/; | ||||
|  |  | |||
|  | @ -9,31 +9,26 @@ import * as anime from 'animejs'; | |||
| import define from '../../../common/define-widget'; | ||||
| 
 | ||||
| const tips = [ | ||||
| 	'<kbd>t</kbd>でタイムラインにフォーカスできます', | ||||
| 	'<kbd>p</kbd>または<kbd>n</kbd>で投稿フォームを開きます', | ||||
| 	'投稿フォームにはファイルをドラッグ&ドロップできます', | ||||
| 	'投稿フォームにクリップボードにある画像データをペーストできます', | ||||
| 	'ドライブにファイルをドラッグ&ドロップしてアップロードできます', | ||||
| 	'ドライブでファイルをドラッグしてフォルダ移動できます', | ||||
| 	'ドライブでフォルダをドラッグしてフォルダ移動できます', | ||||
| 	'ホームは設定からカスタマイズできます', | ||||
| 	'MisskeyはAGPLv3です', | ||||
| 	'タイムマシンウィジェットを利用すると、簡単に過去のタイムラインに遡れます', | ||||
| 	'投稿の ... をクリックして、投稿をユーザーページにピン留めできます', | ||||
| 	'ドライブの容量は(デフォルトで)1GBです', | ||||
| 	'投稿に添付したファイルは全てドライブに保存されます', | ||||
| 	'ホームのカスタマイズ中、ウィジェットを右クリックしてデザインを変更できます', | ||||
| 	'タイムライン上部にもウィジェットを設置できます', | ||||
| 	'投稿をダブルクリックすると詳細が見れます', | ||||
| 	'「**」でテキストを囲むと**強調表示**されます', | ||||
| 	'チャンネルウィジェットを利用すると、よく利用するチャンネルを素早く確認できます', | ||||
| 	'いくつかのウィンドウはブラウザの外に切り離すことができます', | ||||
| 	'カレンダーウィジェットのパーセンテージは、経過の割合を示しています', | ||||
| 	'APIを利用してbotの開発なども行えます', | ||||
| 	'MisskeyはLINEを通じてでも利用できます', | ||||
| 	'まゆかわいいよまゆ', | ||||
| 	'Misskeyは2014年にサービスを開始しました', | ||||
| 	'対応ブラウザではMisskeyを開いていなくても通知を受け取れます' | ||||
| 	'%i18n:@tips-line1%', | ||||
| 	'%i18n:@tips-line2%', | ||||
| 	'%i18n:@tips-line3%', | ||||
| 	'%i18n:@tips-line4%', | ||||
| 	'%i18n:@tips-line5%', | ||||
| 	'%i18n:@tips-line6%', | ||||
| 	'%i18n:@tips-line7%', | ||||
| 	'%i18n:@tips-line8%', | ||||
| 	'%i18n:@tips-line9%', | ||||
| 	'%i18n:@tips-line10%', | ||||
| 	'%i18n:@tips-line11%', | ||||
| 	'%i18n:@tips-line13%', | ||||
| 	'%i18n:@tips-line14%', | ||||
| 	'%i18n:@tips-line17%', | ||||
| 	'%i18n:@tips-line19%', | ||||
| 	'%i18n:@tips-line20%', | ||||
| 	'%i18n:@tips-line21%', | ||||
| 	'%i18n:@tips-line23%', | ||||
| 	'%i18n:@tips-line24%', | ||||
| 	'%i18n:@tips-line25%' | ||||
| ] | ||||
| 
 | ||||
| export default define({ | ||||
|  |  | |||
|  | @ -2,7 +2,7 @@ | |||
| <div class="root"> | ||||
| 	<template v-if="!fetching"> | ||||
| 		<el-progress :text-inside="true" :stroke-width="18" :percentage="Math.floor((usage / capacity) * 100)"/> | ||||
| 		<p><b>{{ capacity | bytes }}</b>中<b>{{ usage | bytes }}</b>使用中</p> | ||||
| 		<p><b>{{ capacity | bytes }}</b>%i18n:max%<b>{{ usage | bytes }}</b>%i18n:in-use%</p> | ||||
| 	</template> | ||||
| </div> | ||||
| </template> | ||||
|  |  | |||
|  | @ -6,8 +6,8 @@ | |||
| 	<div :class="$style.loading" v-if="fetching"> | ||||
| 		<mk-ellipsis-icon/> | ||||
| 	</div> | ||||
| 	<p :class="$style.notAvailable" v-if="!fetching && notAvailable">検索機能を利用することができません。</p> | ||||
| 	<p :class="$style.empty" v-if="!fetching && empty">%fa:search%「{{ q }}」に関する投稿は見つかりませんでした。</p> | ||||
| 	<p :class="$style.notAvailable" v-if="!fetching && notAvailable">%i18n:@not-available%</p> | ||||
| 	<p :class="$style.empty" v-if="!fetching && empty">%fa:search%%i18n:@not-found-text-english%%i18n:@not-found-quotes1%{{ q }}%i18n:@not-found-quotes2%%i18n:@not-found-text-japanese%</p> | ||||
| 	<mk-notes ref="timeline" :class="$style.notes" :more="existMore ? more : null"/> | ||||
| </mk-ui> | ||||
| </template> | ||||
|  |  | |||
|  | @ -1,12 +1,12 @@ | |||
| <template> | ||||
| <div class="pptjhabgjtt7kwskbfv4y3uml6fpuhmr"> | ||||
| 	<h1>Misskeyで共有</h1> | ||||
| 	<h1>%i18n:@share-with%</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">閉じる</button> | ||||
| 	<button v-if="posted" class="ui button" @click="close">%i18n:@close%</button> | ||||
| </div> | ||||
| </template> | ||||
| 
 | ||||
|  |  | |||
|  | @ -6,7 +6,7 @@ | |||
| 	<div :class="$style.loading" v-if="fetching"> | ||||
| 		<mk-ellipsis-icon/> | ||||
| 	</div> | ||||
| 	<p :class="$style.empty" v-if="!fetching && empty">%fa:search%「{{ q }}」に関する投稿は見つかりませんでした。</p> | ||||
| 	<p :class="$style.empty" v-if="!fetching && empty">%i18n:no-posts-found-english%%fa:search%%i18n:left-quote%{{ q }}%i18n:right-quote%%i18n:no-posts-found-japanese%</p> | ||||
| 	<mk-notes ref="timeline" :class="$style.notes" :more="existMore ? more : null"/> | ||||
| </mk-ui> | ||||
| </template> | ||||
|  |  | |||
|  | @ -8,7 +8,7 @@ | |||
| 	<div class="body" :style="{ backgroundImage: `url('${ welcomeBgUrl }')` }"> | ||||
| 		<div class="container"> | ||||
| 			<div class="info"> | ||||
| 				<span>%i18n:common.misskey% <b>{{ host }}</b></span> | ||||
| 				<span>%i18n:common.name% <b>{{ host }}</b></span> | ||||
| 				<span class="stats" v-if="stats"> | ||||
| 					<span>%fa:user% {{ stats.originalUsersCount | number }}</span> | ||||
| 					<span>%fa:pencil-alt% {{ stats.originalNotesCount | number }}</span> | ||||
|  | @ -18,7 +18,7 @@ | |||
| 				<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> | ||||
| 					<p class="powerd-by" v-if="name">powerd by <b>Misskey</b></p> | ||||
| 					<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> | ||||
| 				</div> | ||||
|  |  | |||
|  | @ -3,12 +3,12 @@ | |||
| 	<mk-special-message/> | ||||
| 	<div class="main" ref="main"> | ||||
| 		<div class="backdrop"></div> | ||||
| 		<p ref="welcomeback" v-if="$store.getters.isSignedIn">おかえりなさい、<b>{{ $store.state.i | userName }}</b>さん</p> | ||||
| 		<p ref="welcomeback" v-if="$store.getters.isSignedIn">%i18n:@welcome-back%<b>{{ $store.state.i | userName }}</b>さん</p> | ||||
| 		<div class="content" ref="mainContainer"> | ||||
| 			<button class="nav" @click="$parent.isDrawerOpening = true">%fa:bars%</button> | ||||
| 			<template v-if="hasUnreadNotification || hasUnreadMessagingMessage || hasGameInvitation">%fa:circle%</template> | ||||
| 			<h1> | ||||
| 				<slot>Misskey</slot> | ||||
| 				<slot>%i18n:common.name%</slot> | ||||
| 			</h1> | ||||
| 			<slot name="func"></slot> | ||||
| 		</div> | ||||
|  |  | |||
|  | @ -1,6 +1,6 @@ | |||
| <template> | ||||
| <mk-ui> | ||||
| 	<span slot="header">%fa:gamepad%リバーシ</span> | ||||
| 	<span slot="header">%fa:gamepad%%i18n:@reversi%</span> | ||||
| 	<mk-reversi v-if="!fetching" :init-game="game" @gamed="onGamed"/> | ||||
| </mk-ui> | ||||
| </template> | ||||
|  | @ -23,7 +23,7 @@ export default Vue.extend({ | |||
| 		this.fetch(); | ||||
| 	}, | ||||
| 	mounted() { | ||||
| 		document.title = 'Misskey リバーシ'; | ||||
| 		document.title = '%i18n:common.name% %i18n:@reversi%'; | ||||
| 		document.documentElement.style.background = '#fff'; | ||||
| 	}, | ||||
| 	methods: { | ||||
|  |  | |||
|  | @ -1,6 +1,6 @@ | |||
| <template> | ||||
| <div class="signup"> | ||||
| 	<h1>📦 始めましょう</h1> | ||||
| 	<h1>%i18n:@lets-start%</h1> | ||||
| 	<mk-signup/> | ||||
| </div> | ||||
| </template> | ||||
|  |  | |||
|  | @ -3,7 +3,7 @@ | |||
| 	<span slot="header">%fa:hashtag%{{ $route.params.tag }}</span> | ||||
| 
 | ||||
| 	<main> | ||||
| 		<p v-if="!fetching && empty">%fa:search%「{{ q }}」に関する投稿は見つかりませんでした。</p> | ||||
| 		<p v-if="!fetching && empty">%fa:search%%i18n:@no-posts-found-english%%i18n:@left-quote%{{ q }}%i18n:@right-quote%%i18n:@no-posts-found-japanese%</p> | ||||
| 		<mk-notes ref="timeline" :more="existMore ? more : null"/> | ||||
| 	</main> | ||||
| </mk-ui> | ||||
|  |  | |||
|  | @ -6,7 +6,7 @@ | |||
| 		<div class="about"> | ||||
| 			<h2>{{ name || 'unidentified' }}</h2> | ||||
| 			<p v-html="description || '%i18n:common.about%'"></p> | ||||
| 			<router-link class="signup" to="/signup">新規登録</router-link> | ||||
| 			<router-link class="signup" to="/signup">%i18n:@signup%</router-link> | ||||
| 		</div> | ||||
| 		<div class="login"> | ||||
| 			<mk-signin :with-avatar="false"/> | ||||
|  |  | |||
|  | @ -1,6 +1,6 @@ | |||
| <template> | ||||
| <mk-ui> | ||||
| 	<span slot="header">%fa:home%ダッシュボード</span> | ||||
| 	<span slot="header">%fa:home%%i18n:@dashboard%</span> | ||||
| 	<template slot="func"> | ||||
| 		<button @click="customizing = !customizing">%fa:cog%</button> | ||||
| 	</template> | ||||
|  |  | |||
|  | @ -1,7 +1,7 @@ | |||
| <template> | ||||
| <div class="mkw-activity"> | ||||
| 	<mk-widget-container :show-header="!props.compact"> | ||||
| 		<template slot="header">%fa:chart-bar%アクティビティ</template> | ||||
| 		<template slot="header">%fa:chart-bar%%i18n:@activity%</template> | ||||
| 		<div :class="$style.body"> | ||||
| 			<mk-activity :user="$store.state.i"/> | ||||
| 		</div> | ||||
|  |  | |||
|  | @ -9,7 +9,6 @@ import { pack } from '../../../../../models/messaging-message'; | |||
| import { publishUserStream } from '../../../../../stream'; | ||||
| import { publishMessagingStream, publishMessagingIndexStream } from '../../../../../stream'; | ||||
| import pushSw from '../../../../../push-sw'; | ||||
| import config from '../../../../../config'; | ||||
| 
 | ||||
| export const meta = { | ||||
| 	desc: { | ||||
|  | @ -123,20 +122,6 @@ export default (params: any, user: ILocalUser) => new Promise(async (res, rej) = | |||
| 		} | ||||
| 	}, 3000); | ||||
| 
 | ||||
| 	// Register to search database
 | ||||
| 	if (message.text && config.elasticsearch) { | ||||
| 		const es = require('../../../db/elasticsearch'); | ||||
| 
 | ||||
| 		es.index({ | ||||
| 			index: 'misskey', | ||||
| 			type: 'messaging_message', | ||||
| 			id: message._id.toString(), | ||||
| 			body: { | ||||
| 				text: message.text | ||||
| 			} | ||||
| 		}); | ||||
| 	} | ||||
| 
 | ||||
| 	// 履歴作成(自分)
 | ||||
| 	History.update({ | ||||
| 		userId: user._id, | ||||
|  |  | |||
|  | @ -8,6 +8,6 @@ export default function(request: websocket.request, connection: websocket.connec | |||
| 
 | ||||
| 	// Subscribe stream
 | ||||
| 	subscriber.on(`user-list-stream:${listId}`, data => { | ||||
| 		connection.send(data); | ||||
| 		connection.send(JSON.stringify(data)); | ||||
| 	}); | ||||
| } | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue