mirror of
https://iceshrimp.dev/limepotato/jormungandr-bite.git
synced 2024-11-14 14:07:38 -07:00
i18n reversi
This commit is contained in:
parent
7a3210bd62
commit
afc26dc48d
4 changed files with 79 additions and 39 deletions
|
@ -83,6 +83,10 @@ common:
|
||||||
turn-of: "{}のターンです"
|
turn-of: "{}のターンです"
|
||||||
past-turn-of: "{}のターン"
|
past-turn-of: "{}のターン"
|
||||||
won: "{}の勝ち"
|
won: "{}の勝ち"
|
||||||
|
black: "黒"
|
||||||
|
white: "白"
|
||||||
|
total: "合計"
|
||||||
|
this-turn: "{}ターン目"
|
||||||
|
|
||||||
widgets:
|
widgets:
|
||||||
analog-clock: "アナログ時計"
|
analog-clock: "アナログ時計"
|
||||||
|
@ -127,6 +131,44 @@ common:
|
||||||
stack-left: "左に重ねる"
|
stack-left: "左に重ねる"
|
||||||
pop-right: "右に出す"
|
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:
|
common/views/components/connect-failed.vue:
|
||||||
title: "サーバーに接続できません"
|
title: "サーバーに接続できません"
|
||||||
description: "インターネット回線に問題があるか、サーバーがダウンまたはメンテナンスしている可能性があります。しばらくしてから{再度お試し}ください。"
|
description: "インターネット回線に問題があるか、サーバーがダウンまたはメンテナンスしている可能性があります。しばらくしてから{再度お試し}ください。"
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<template>
|
<template>
|
||||||
<div class="root">
|
<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">
|
<div style="overflow: hidden">
|
||||||
<p class="turn" v-if="!iAmPlayer && !game.isEnded">{{ '%i18n:common.reversi.turn-of%'.replace('{}', turnUser.name) }}<mk-ellipsis/></p>
|
<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>
|
||||||
</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">
|
<div class="player" v-if="game.isEnded">
|
||||||
<el-button-group>
|
<el-button-group>
|
||||||
|
|
|
@ -3,12 +3,12 @@
|
||||||
<header><b>{{ game.user1.name }}</b> vs <b>{{ game.user2.name }}</b></header>
|
<header><b>{{ game.user1.name }}</b> vs <b>{{ game.user2.name }}</b></header>
|
||||||
|
|
||||||
<div>
|
<div>
|
||||||
<p>ゲームの設定</p>
|
<p>%i18n:@settings-of-the-game%</p>
|
||||||
|
|
||||||
<el-card class="map">
|
<el-card class="map">
|
||||||
<div slot="header">
|
<div slot="header">
|
||||||
<el-select :class="$style.mapSelect" v-model="mapName" placeholder="マップを選択" @change="onMapChange">
|
<el-select :class="$style.mapSelect" v-model="mapName" placeholder="%i18n:@choose-map%" @change="onMapChange">
|
||||||
<el-option label="ランダム" :value="null"/>
|
<el-option label="%i18n:@random%" :value="null"/>
|
||||||
<el-option-group v-for="c in mapCategories" :key="c" :label="c">
|
<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">
|
<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: left">{{ m.name }}</span>
|
||||||
|
@ -30,25 +30,25 @@
|
||||||
|
|
||||||
<el-card class="bw">
|
<el-card class="bw">
|
||||||
<div slot="header">
|
<div slot="header">
|
||||||
<span>先手/後手</span>
|
<span>%i18n:@black-or-white%</span>
|
||||||
</div>
|
</div>
|
||||||
<el-radio v-model="game.settings.bw" label="random" @change="updateSettings">ランダム</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">{{ game.user1.name }}が黒</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">{{ game.user2.name }}が黒</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>
|
||||||
|
|
||||||
<el-card class="rules">
|
<el-card class="rules">
|
||||||
<div slot="header">
|
<div slot="header">
|
||||||
<span>ルール</span>
|
<span>%i18n:@rules%</span>
|
||||||
</div>
|
</div>
|
||||||
<mk-switch v-model="game.settings.isLlotheo" @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="ループマップ"/>
|
<mk-switch v-model="game.settings.loopedBoard" @change="updateSettings" text="%i18n:@looped-map%"/>
|
||||||
<mk-switch v-model="game.settings.canPutEverywhere" @change="updateSettings" text="どこでも置けるモード"/>
|
<mk-switch v-model="game.settings.canPutEverywhere" @change="updateSettings" text="%i18n:@can-put-everywhere%"/>
|
||||||
</el-card>
|
</el-card>
|
||||||
|
|
||||||
<el-card class="bot-form" v-if="form">
|
<el-card class="bot-form" v-if="form">
|
||||||
<div slot="header">
|
<div slot="header">
|
||||||
<span>Botの設定</span>
|
<span>%i18n:@settings-of-the-bot%</span>
|
||||||
</div>
|
</div>
|
||||||
<el-alert v-for="message in messages"
|
<el-alert v-for="message in messages"
|
||||||
:title="message.text"
|
:title="message.text"
|
||||||
|
@ -77,16 +77,16 @@
|
||||||
|
|
||||||
<footer>
|
<footer>
|
||||||
<p class="status">
|
<p class="status">
|
||||||
<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">相手の準備が完了するのを待っています<mk-ellipsis/></template>
|
<template v-if="isAccepted && !isOpAccepted">%i18n:@waiting-for-other%<mk-ellipsis/></template>
|
||||||
<template v-if="!isAccepted && isOpAccepted">あなたの準備が完了するのを待っています</template>
|
<template v-if="!isAccepted && isOpAccepted">%i18n:@waiting-for-me%</template>
|
||||||
<template v-if="!isAccepted && !isOpAccepted">準備中<mk-ellipsis/></template>
|
<template v-if="!isAccepted && !isOpAccepted">%i18n:@waiting-for-both%<mk-ellipsis/></template>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<div class="actions">
|
<div class="actions">
|
||||||
<el-button @click="exit">キャンセル</el-button>
|
<el-button @click="exit">%i18n:@cancel%</el-button>
|
||||||
<el-button type="primary" @click="accept" v-if="!isAccepted">準備完了</el-button>
|
<el-button type="primary" @click="accept" v-if="!isAccepted">%i18n:@ready%</el-button>
|
||||||
<el-button type="primary" @click="cancel" v-if="isAccepted">準備続行</el-button>
|
<el-button type="primary" @click="cancel" v-if="isAccepted">%i18n:@cancel-ready%</el-button>
|
||||||
</div>
|
</div>
|
||||||
</footer>
|
</footer>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -4,32 +4,30 @@
|
||||||
<x-gameroom :game="game"/>
|
<x-gameroom :game="game"/>
|
||||||
</div>
|
</div>
|
||||||
<div class="matching" v-else-if="matching">
|
<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">
|
<div class="cancel">
|
||||||
<el-button round @click="cancel">キャンセル</el-button>
|
<el-button round @click="cancel">%i18n:@matching.cancel%</el-button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="index" v-else>
|
<div class="index" v-else>
|
||||||
<h1>Misskey Reversi</h1>
|
<h1>%i18n:@title%</h1>
|
||||||
<p>他のMisskeyユーザーとリバーシで対戦しよう</p>
|
<p>%i18n:@sub-title%</p>
|
||||||
<div class="play">
|
<div class="play">
|
||||||
<el-button round>フリーマッチ(準備中)</el-button>
|
<!--<el-button round>フリーマッチ(準備中)</el-button>-->
|
||||||
<el-button type="primary" round @click="match">指名</el-button>
|
<el-button type="primary" round @click="match">%i18n:@invite%</el-button>
|
||||||
<details>
|
<details>
|
||||||
<summary>遊び方</summary>
|
<summary>%i18n:@rule%</summary>
|
||||||
<div>
|
<div>
|
||||||
<p>リバーシは、相手と交互に石をボードに置いてゆき、相手の石を挟んでひっくり返しながら、最終的に残った石が多い方が勝ちというボードゲームです。</p>
|
<p>%i18n:@rule-desc%</p>
|
||||||
<dl>
|
<dl>
|
||||||
<dt><b>フリーマッチ</b></dt>
|
<dt><b>%i18n:@mode-invite%</b></dt>
|
||||||
<dd>ランダムなユーザーと対戦するモードです。</dd>
|
<dd>%i18n:@mode-invite-desc%</dd>
|
||||||
<dt><b>指名</b></dt>
|
|
||||||
<dd>指定したユーザーと対戦するモードです。</dd>
|
|
||||||
</dl>
|
</dl>
|
||||||
</div>
|
</div>
|
||||||
</details>
|
</details>
|
||||||
</div>
|
</div>
|
||||||
<section v-if="invitations.length > 0">
|
<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)">
|
<div class="invitation" v-for="i in invitations" tabindex="-1" @click="accept(i)">
|
||||||
<mk-avatar class="avatar" :user="i.parent"/>
|
<mk-avatar class="avatar" :user="i.parent"/>
|
||||||
<span class="name"><b>{{ i.parent.name }}</b></span>
|
<span class="name"><b>{{ i.parent.name }}</b></span>
|
||||||
|
@ -38,21 +36,21 @@
|
||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
<section v-if="myGames.length > 0">
|
<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}`">
|
<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.user1"/>
|
||||||
<mk-avatar class="avatar" :user="g.user2"/>
|
<mk-avatar class="avatar" :user="g.user2"/>
|
||||||
<span><b>{{ g.user1.name }}</b> vs <b>{{ g.user2.name }}</b></span>
|
<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>
|
</a>
|
||||||
</section>
|
</section>
|
||||||
<section v-if="games.length > 0">
|
<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}`">
|
<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.user1"/>
|
||||||
<mk-avatar class="avatar" :user="g.user2"/>
|
<mk-avatar class="avatar" :user="g.user2"/>
|
||||||
<span><b>{{ g.user1.name }}</b> vs <b>{{ g.user2.name }}</b></span>
|
<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>
|
</a>
|
||||||
</section>
|
</section>
|
||||||
</div>
|
</div>
|
||||||
|
@ -153,7 +151,7 @@ export default Vue.extend({
|
||||||
|
|
||||||
match() {
|
match() {
|
||||||
(this as any).apis.input({
|
(this as any).apis.input({
|
||||||
title: 'ユーザー名を入力してください'
|
title: '%i18n:@enter-username%'
|
||||||
}).then(username => {
|
}).then(username => {
|
||||||
(this as any).api('users/show', {
|
(this as any).api('users/show', {
|
||||||
username
|
username
|
||||||
|
|
Loading…
Reference in a new issue