mirror of
https://github.com/byulmaru/quesdon
synced 2024-11-30 15:58:01 +09:00
한글화
This commit is contained in:
parent
75a25b145f
commit
f491b45c27
@ -5,20 +5,20 @@ import { gitVersion, upstreamUrl, usingDarkTheme } from "../initial-state"
|
||||
export class Footer extends React.Component {
|
||||
render() {
|
||||
return <footer className="container">
|
||||
<p>Quesdon は AGPL-3.0 で提供されています。<a href={upstreamUrl}>ソースコード</a>
|
||||
(<a href={`${upstreamUrl}/commits/${gitVersion}`}>{gitVersion.slice(0, 7)}</a>)</p>
|
||||
<p>
|
||||
公式アカウント: <a href="https://mstdn.jp/@quesdon">@quesdon@mstdn.jp</a>
|
||||
|
||||
<a href="https://twitter.com/quesdon">@Quesdon on Twitter</a>
|
||||
|
||||
<Link to="/@quesdon@mstdn.jp">公式Quesdon (要望や不具合報告もこちらへどうぞ)</Link>
|
||||
Quesdon@Planet은 <a href="https://quesdon.rinsuki.net/">Quesdon</a>의 포크로,
|
||||
AGPL-3.0 라이센스로 제공되고 있어요.
|
||||
<a href={upstreamUrl}>소스 코드</a>
|
||||
<a href="https://github.com/rinsuki/quesdon">원본 소스 코드 (rinsuki/quesdon)</a>
|
||||
(<a href={`${upstreamUrl}/commits/${gitVersion}`}>{gitVersion.slice(0, 7)}</a>)</p>
|
||||
<p>
|
||||
플래닛 공식 계정: <a href="https://planet.moe/@planet">@planet@planet.moe</a>
|
||||
</p>
|
||||
<p>開発者: <a href="https://mstdn.maud.io/@rinsuki">@rinsuki@mstdn.maud.io</a></p>
|
||||
<p>원작자: <a href="https://mstdn.maud.io/@rinsuki">@rinsuki@mstdn.maud.io</a></p>
|
||||
<p>
|
||||
{usingDarkTheme
|
||||
? <a href="#" onClick={this.leaveDarkTheme.bind(this)}>ダークテーマから戻す</a>
|
||||
: <a href="#" onClick={this.enterDarkTheme.bind(this)}>ダークテーマにする(β)</a>
|
||||
? <a href="#" onClick={this.leaveDarkTheme.bind(this)}>밝은 배경</a>
|
||||
: <a href="#" onClick={this.enterDarkTheme.bind(this)}>어두운 배경(β)</a>
|
||||
}
|
||||
</p>
|
||||
</footer>
|
||||
|
@ -20,14 +20,14 @@ export class Header extends React.Component<{}, State> {
|
||||
}
|
||||
render() {
|
||||
return <Navbar light expand="md" color="light"><Container>
|
||||
<NavbarBrand to="/">Quesdon</NavbarBrand>
|
||||
<NavbarBrand to="/">Quesdon@Planet</NavbarBrand>
|
||||
<NavbarToggler onClick={this.toggle.bind(this)} />
|
||||
<Collapse navbar isOpen={this.state.isOpen}>
|
||||
<Nav className="mr-auto" navbar>
|
||||
<NavItem>
|
||||
{me
|
||||
? <NavLink to="/my">@{me.acctDisplay}<QuestionRemaining/></NavLink>
|
||||
: <NavLink to="/login">ログイン</NavLink>}
|
||||
: <NavLink to="/login">로그인</NavLink>}
|
||||
</NavItem>
|
||||
</Nav>
|
||||
</Collapse>
|
||||
|
@ -6,13 +6,10 @@ import { PageLatest } from "./latest"
|
||||
export class PageIndex extends React.Component {
|
||||
render() {
|
||||
return <div>
|
||||
<title>Quesdon</title>
|
||||
<h1>Quesdon</h1>
|
||||
<p>ザ・インタビューズとかaskfmとかそんなかんじのやつのMastodonアカウントで使えるやつです</p>
|
||||
<p><strong>
|
||||
2018年1月21日よりTwitterアカウントでも使えるようになりました。ログイン画面で「Twitterでログイン」をクリックするとTwitterアカウントで利用できます。
|
||||
</strong></p>
|
||||
<p>{me ? <Link to="/my">マイページ</Link> : <Link to="/login">ログイン</Link>}</p>
|
||||
<title>Quesdon@Planet</title>
|
||||
<h1>Quesdon@Planet</h1>
|
||||
<p>Mastodon에서 사용할 수 있는 askfm스러운 무언가</p>
|
||||
<p>{me ? <Link to="/my">마이페이지</Link> : <Link to="/login">로그인</Link>}</p>
|
||||
<PageLatest />
|
||||
</div>
|
||||
}
|
||||
|
@ -28,13 +28,13 @@ export class PageLatest extends React.Component<{}, State> {
|
||||
questions,
|
||||
} = this.state
|
||||
return <div>
|
||||
<Title>最近の回答 - Quesdon</Title>
|
||||
<h2>最近の回答 <Button color="white" onClick={this.load.bind(this)} disabled={loading}>再読み込み</Button></h2>
|
||||
<Title>최근 답변 - Quesdon</Title>
|
||||
<h2>최근 올라온 답변들 <Button color="white" onClick={this.load.bind(this)} disabled={loading}>새로고침</Button></h2>
|
||||
{ loading
|
||||
? <Loading/>
|
||||
: loadFailed
|
||||
? <span>
|
||||
読み込みに失敗しました。上の再読み込みボタンを押して再度お試しください。
|
||||
불러오기에 실패했어요. 위쪽 새로고침 버튼을 눌러서 다시 시도해 주세요.
|
||||
({loadFailed < 0 ? loadFailed : "HTTP-" + loadFailed})
|
||||
</span>
|
||||
: questions.map((question) => <Question {...question} key={question._id}/>)
|
||||
|
@ -19,33 +19,18 @@ export class PageLogin extends React.Component<{}, State> {
|
||||
render() {
|
||||
const { loading } = this.state
|
||||
return <div>
|
||||
<Title>ログイン</Title>
|
||||
<h1>ログイン</h1>
|
||||
<p>あなたのMastodonアカウントがあるインスタンスを入力してください。</p>
|
||||
<Title>로그인</Title>
|
||||
<h1>로그인</h1>
|
||||
<p>사용중인 Mastodon 계정이 있는 인스턴스를 입력해 주세요.</p>
|
||||
<form action="javascript://" onSubmit={this.send.bind(this)}>
|
||||
<FormGroup>
|
||||
<Input name="instance" placeholder="mastodon.social" list="major-instances"/>
|
||||
<Input name="instance" placeholder="planet.moe" list="major-instances"/>
|
||||
<datalist id="major-instances">
|
||||
{majorInstances.map((instance) => <option value={instance} />)}
|
||||
</datalist>
|
||||
</FormGroup>
|
||||
<Button type="submit" color="primary" disabled={loading}>{ loading ? "読み込み中" : "ログイン" }</Button>
|
||||
<span> もしくは </span>
|
||||
<Button type="button" color="secondary" disabled={loading} onClick={this.twitterLogin.bind(this)}>
|
||||
{ loading ? "読み込み中" : "Twitterでログイン" }
|
||||
</Button>
|
||||
<Button type="submit" color="primary" disabled={loading}>{ loading ? "불러오는 중" : "로그인" }</Button>
|
||||
</form>
|
||||
<Alert color="danger" className="mt-3">
|
||||
<h5>Twitterアカウントでのサービス提供終了について</h5>
|
||||
<p>Twitterの開発者向けポリシー改定の影響で、QuesdonでのTwitterアカウントを利用したサービス提供を<strong>2018年9月30日</strong>に停止します。</p>
|
||||
<p>これ以降は、TwitterアカウントでQuesdonにログインできなくなり、またTwitterアカウントで開設した質問箱で回答した質問等も閲覧できなくなります。</p>
|
||||
<p>Mastodonアカウントへの質問データの移行は、該当するTwitterアカウントからTwitter
|
||||
<a href="https://twitter.com/quesdon">@quesdon</a>
|
||||
までダイレクトメッセージでお問い合わせください。
|
||||
</p>
|
||||
<p>ご利用ありがとうございました。</p>
|
||||
<strong>なお、Mastodonアカウントでログインされているユーザーの皆様には影響はありません。</strong>これまで通りサービスをご利用いただけます。
|
||||
</Alert>
|
||||
</div>
|
||||
}
|
||||
|
||||
@ -58,7 +43,7 @@ export class PageLogin extends React.Component<{}, State> {
|
||||
loading: true,
|
||||
})
|
||||
function errorMsg(code: number | string) {
|
||||
return "ログインに失敗しました。入力内容をご確認の上、再度お試しください (" + code + ")"
|
||||
return "로그인에 실패했어요. 입력한 내용을 확인하신 후 다시 시도해 주세요. (" + code + ")"
|
||||
}
|
||||
const req = await apiFetch("/api/web/oauth/get_url", {
|
||||
method: "POST",
|
||||
@ -86,10 +71,4 @@ export class PageLogin extends React.Component<{}, State> {
|
||||
if (!urlRes) return
|
||||
location.href = urlRes.url
|
||||
}
|
||||
|
||||
twitterLogin() {
|
||||
const form = new FormData()
|
||||
form.append("instance", "twitter.com")
|
||||
this.callApi(form)
|
||||
}
|
||||
}
|
||||
|
@ -23,14 +23,14 @@ export class PageMyFollowers extends React.Component<{}, State> {
|
||||
|
||||
render() {
|
||||
return <div>
|
||||
<Title>Quesdonを利用しているフォロワー一覧 - マイページ</Title>
|
||||
<h1>Quesdonを利用しているフォロワー一覧</h1>
|
||||
<Title>Quesdon@Planet을 사용 중인 팔로워 목록 - 마이페이지</Title>
|
||||
<h1>Quesdon@Planet을 사용 중인 팔로워 목록</h1>
|
||||
<ul>
|
||||
{this.state.accounts.map((user) => <li><UserLink {...user} /></li>)}
|
||||
</ul>
|
||||
<Button disabled={this.state.loading || !this.state.maxId}
|
||||
onClick={this.readMore.bind(this)}>
|
||||
{this.state.loading ? "読み込み中" : this.state.maxId ? "もっと" : "これで全部です"}
|
||||
{this.state.loading ? "불러오는 중" : this.state.maxId ? "더 보기" : "이게 끝이에요 0_0"}
|
||||
</Button>
|
||||
</div>
|
||||
}
|
||||
@ -41,7 +41,7 @@ export class PageMyFollowers extends React.Component<{}, State> {
|
||||
|
||||
async readMore() {
|
||||
function errorMsg(code: number | string) {
|
||||
return "読み込みに失敗しました。再度お試しください (" + code + ")"
|
||||
return "불러오기에 실패했어요. 다시 시도해 주세요. (" + code + ")"
|
||||
}
|
||||
this.setState({loading: true})
|
||||
const param = this.state.maxId ? "?max_id=" + this.state.maxId : ""
|
||||
|
@ -10,20 +10,20 @@ export class PageMyIndex extends React.Component {
|
||||
render() {
|
||||
if (!me) return null
|
||||
return <div>
|
||||
<Title>マイページ</Title>
|
||||
<h1>マイページ</h1>
|
||||
<p>こんにちは、{me.name}さん!</p>
|
||||
<Title>마이페이지</Title>
|
||||
<h1>마이페이지</h1>
|
||||
<p>반가워요, {me.name}님!</p>
|
||||
<ul>
|
||||
<li><Link to={`/@${me.acct}`}>あなたのプロフィール</Link></li>
|
||||
<li><Link to="/my/questions">あなた宛ての質問<QuestionRemaining/></Link></li>
|
||||
{!me.isTwitter && <li><Link to="/my/followers">Quesdonを利用しているフォロワー一覧</Link></li>}
|
||||
<li><Link to="/my/settings">設定</Link></li>
|
||||
<li><a href="javascript://" onClick={this.logoutConfirm.bind(this)}>ログアウト</a></li>
|
||||
<li><Link to={`/@${me.acct}`}>프로필 페이지</Link></li>
|
||||
<li><Link to="/my/questions">받은 질문<QuestionRemaining/></Link></li>
|
||||
{!me.isTwitter && <li><Link to="/my/followers">Quesdon@Planet을 사용중인 팔로워 목록</Link></li>}
|
||||
<li><Link to="/my/settings">설정</Link></li>
|
||||
<li><a href="javascript://" onClick={this.logoutConfirm.bind(this)}>로그아웃</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
}
|
||||
logoutConfirm() {
|
||||
if (!confirm("ログアウトしていい?")) return
|
||||
if (!confirm("정말 로그아웃 하실 건가요?")) return
|
||||
apiFetch("/api/web/logout")
|
||||
.then((r) => r.json())
|
||||
.then((r) => {
|
||||
|
@ -27,24 +27,24 @@ export class PageMyQuestions extends React.Component<{}, State> {
|
||||
questions,
|
||||
} = this.state
|
||||
return <div>
|
||||
<Title>質問一覧 - マイページ</Title>
|
||||
<h1>質問一覧</h1>
|
||||
<Link to="/my">マイページへ</Link>
|
||||
<Title>질문 목록 - 마이페이지</Title>
|
||||
<h1>질문 목록</h1>
|
||||
<Link to="/my">마이페이지로 돌아가기</Link>
|
||||
<div className="mt-3">
|
||||
{loading
|
||||
? <Loading/>
|
||||
: loadFailed
|
||||
? <span>
|
||||
読み込みに失敗しました({ loadFailed < 0 ? loadFailed : "HTTP-" + loadFailed })。
|
||||
<a href="javascript://" onClick={this.load.bind(this)}>再度読み込む</a>
|
||||
불러오기에 실패했어요.({ loadFailed < 0 ? loadFailed : "HTTP-" + loadFailed })。
|
||||
<a href="javascript://" onClick={this.load.bind(this)}>새로고침</a>
|
||||
</span>
|
||||
: questions.map((q) => <Question {...q} hideAnswerUser key={q._id}/>)
|
||||
}
|
||||
</div>
|
||||
<Button href={this.getShareUrl()} color="secondary" target="_blank">
|
||||
自分の質問箱のページを共有
|
||||
Mastodon에 질문상자 페이지를 공유
|
||||
<wbr />
|
||||
(新しいページで開きます)
|
||||
(새 창으로 열릴 거에요)
|
||||
</Button>
|
||||
</div>
|
||||
}
|
||||
@ -86,7 +86,7 @@ export class PageMyQuestions extends React.Component<{}, State> {
|
||||
}
|
||||
getShareUrl() {
|
||||
const user = (window as any).USER as APIUser
|
||||
const text = `私の${user.questionBoxName || "質問箱"}です #quesdon ${location.origin}/@${user.acct}`
|
||||
const text = `저의 ${user.questionBoxName || "질문 상자"}에요! #quesdon ${location.origin}/@${user.acct}`
|
||||
return `https://${user.hostName}/${user.isTwitter ? "intent/tweet" : "share"}?text=${encodeURIComponent(text)}`
|
||||
}
|
||||
}
|
||||
|
@ -22,54 +22,54 @@ export class PageMySettings extends React.Component<{}, State> {
|
||||
descriptionMax: 200,
|
||||
questionBoxNameMax: 10,
|
||||
descriptionCount: (me.description || "").length,
|
||||
questionBoxNameCount: (me.questionBoxName || "質問箱").length,
|
||||
questionBoxNameCount: (me.questionBoxName || "질문 상자").length,
|
||||
saving: false,
|
||||
}
|
||||
}
|
||||
render() {
|
||||
if (!me) return null
|
||||
return <div>
|
||||
<Title>設定</Title>
|
||||
<h1>設定</h1>
|
||||
<Link to="/my">マイページに戻る</Link>
|
||||
<Title>설정</Title>
|
||||
<h1>설정</h1>
|
||||
<Link to="/my">마이페이지로 돌아가기</Link>
|
||||
<form action="javascript://" onSubmit={this.onSubmit.bind(this)}>
|
||||
<FormGroup>
|
||||
<label>ちょっとした説明</label>
|
||||
<label>간단한 설명</label>
|
||||
<Input type="textarea" name="description"
|
||||
placeholder="しぶやのりんさんがすき"
|
||||
placeholder="이루어져라, 우리들의 꿈!"
|
||||
onInput={this.inputDescription.bind(this)}
|
||||
defaultValue={me.description}/>
|
||||
<FormText>あと{this.descriptionRemaining()}文字 改行は表示時に反映されません</FormText>
|
||||
<FormText>최대 {this.descriptionRemaining()}자, 줄바꿈은 표시되지 않아요</FormText>
|
||||
</FormGroup>
|
||||
<FormGroup>
|
||||
<label>「質問箱」の名称変更</label>
|
||||
<label>'질문 상자'의 이름</label>
|
||||
<InputGroup>
|
||||
<InputGroupAddon addonType="prepend">◯◯◯さんの</InputGroupAddon>
|
||||
<Input type="text" name="questionBoxName" placeholder="質問箱"
|
||||
<InputGroupAddon addonType="prepend">누구누구 님의 </InputGroupAddon>
|
||||
<Input type="text" name="questionBoxName" placeholder="질문 상자"
|
||||
onInput={this.inputQuestionBoxName.bind(this)}
|
||||
defaultValue={me.questionBoxName || "質問箱"}/>
|
||||
defaultValue={me.questionBoxName || "질문 상자"}/>
|
||||
</InputGroup>
|
||||
<FormText>あと{this.questionBoxNameRemaining()}文字 改行は表示時に反映されません</FormText>
|
||||
<FormText>최대 {this.questionBoxNameRemaining()}자, 줄바꿈은 표시되지 않아요</FormText>
|
||||
</FormGroup>
|
||||
<FormGroup>
|
||||
<Checkbox name="allAnon" value="1" checked={me.allAnon}>自分宛ての質問では名乗らせない</Checkbox>
|
||||
<Checkbox name="allAnon" value="1" checked={me.allAnon}>질문을 익명으로만 받기</Checkbox>
|
||||
</FormGroup>
|
||||
<FormGroup>
|
||||
<Checkbox name="stopNewQuestion" value="1" checked={me.stopNewQuestion}>新たな質問を受け付けない</Checkbox>
|
||||
<Checkbox name="stopNewQuestion" value="1" checked={me.stopNewQuestion}>더 이상 질문을 안 받기</Checkbox>
|
||||
</FormGroup>
|
||||
<Button type="submit" color="primary" disabled={this.sendableForm()}>
|
||||
保存{this.state.saving && "しています..."}
|
||||
저장{this.state.saving && "중이에요..."}
|
||||
</Button>
|
||||
</form>
|
||||
<h2 className="mt-3 mb-2">プッシュ通知</h2>
|
||||
<h2 className="mt-3 mb-2">푸시 알림</h2>
|
||||
{me.pushbulletEnabled
|
||||
? <Button color="warning" onClick={this.pushbulletDisconnect.bind(this)}>Pushbulletとの接続を解除する</Button>
|
||||
? <Button color="warning" onClick={this.pushbulletDisconnect.bind(this)}>Pushbullet과 연결 해제</Button>
|
||||
: <Button href="/api/web/accounts/pushbullet/redirect" color="success">
|
||||
Pushbulletと接続して新しい質問が来た際に通知を受け取る
|
||||
Pushbullet과 연결해서 새로운 질문이 들어왔을 때 알림 받기
|
||||
</Button>
|
||||
}
|
||||
<h2 className="mt-3 mb-2">やばいゾーン</h2>
|
||||
<Button color="danger" onClick={this.allDeleteQuestions.bind(this)}>自分宛ての質問を(回答済みのものも含めて)すべて削除</Button>
|
||||
<h2 className="mt-3 mb-2">짱 위험한 곳</h2>
|
||||
<Button color="danger" onClick={this.allDeleteQuestions.bind(this)}>받았던 질문들을(이미 답변한거까지 포함해서!) 싹 다 날려버리기!!!</Button>
|
||||
</div>
|
||||
}
|
||||
|
||||
|
@ -7,8 +7,8 @@ export class PageNotFound extends React.Component {
|
||||
return <div>
|
||||
<Title>Not Found</Title>
|
||||
<h1>Not Found</h1>
|
||||
<p>指定されたページが見つかりませんでした。</p>
|
||||
<p><Link to="/">トップに戻る</Link></p>
|
||||
<p>페이지를 찾을 수 없어요.</p>
|
||||
<p><Link to="/">메인으로 돌아가기</Link></p>
|
||||
</div>
|
||||
}
|
||||
}
|
||||
|
@ -35,27 +35,27 @@ export class PageUserIndex extends React.Component<Props, State> {
|
||||
const { user } = this.state
|
||||
if (!user) return <Loading/>
|
||||
return <div>
|
||||
<Title>{user.name} @{user.acctDisplay} さんの{user.questionBoxName}</Title>
|
||||
<Title>{user.name}님의 {user.questionBoxName || "질문함"}</Title>
|
||||
<Jumbotron><div style={{textAlign: "center"}}>
|
||||
<img src={user.avatarUrl} style={{maxWidth: "8em", height: "8em"}}/>
|
||||
<h1>{user.name}</h1>
|
||||
<p>
|
||||
さんの{user.questionBoxName || "質問箱"}
|
||||
님의 {user.questionBoxName || "질문함"}
|
||||
<a href={user.url || `https://${user.hostName}/@${user.acct.split("@")[0]}`}
|
||||
rel="nofollow">
|
||||
{user.isTwitter ? "Twitter" : "Mastodon"}のプロフィール
|
||||
Mastodon 프로필
|
||||
</a>
|
||||
</p>
|
||||
<p>{user.description}</p>
|
||||
{ user.stopNewQuestion ? <p>このユーザーは新しい質問を受け付けていません</p> :
|
||||
{ user.stopNewQuestion ? <p>지금은 더 이상 질문을 안 받고 있어요.</p> :
|
||||
<form action="javascript://" onSubmit={this.questionSubmit.bind(this)}>
|
||||
<Input type="textarea" name="question"
|
||||
placeholder="質問する内容を入力"
|
||||
placeholder="질문 내용을 입력해 주세요:"
|
||||
onInput={this.questionInput.bind(this)}
|
||||
/>
|
||||
<div className="d-flex mt-1">
|
||||
{me && !user.allAnon && <div className="p-1">
|
||||
<Checkbox name="noAnon" value="true">名乗る</Checkbox>
|
||||
<Checkbox name="noAnon" value="true">작성자 공개</Checkbox>
|
||||
</div>}
|
||||
<div className="ml-auto">
|
||||
<span className={"mr-3 " +
|
||||
@ -69,14 +69,14 @@ export class PageUserIndex extends React.Component<Props, State> {
|
||||
|| this.state.questionLength > QUESTION_TEXT_MAX_LENGTH
|
||||
|| this.state.questionNow
|
||||
}>
|
||||
質問{this.state.questionNow ? "中..." : "する"}
|
||||
질문{this.state.questionNow ? "중..." : "하기"}
|
||||
</Button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
}
|
||||
</div></Jumbotron>
|
||||
<h2>回答 {this.state.questions && <Badge pill>{this.state.questions.length}</Badge>}</h2>
|
||||
<h2>답변 {this.state.questions && <Badge pill>{this.state.questions.length}</Badge>}</h2>
|
||||
{this.state.questions
|
||||
? <div>
|
||||
{this.state.questions.map((question) =>
|
||||
@ -106,7 +106,7 @@ export class PageUserIndex extends React.Component<Props, State> {
|
||||
body: form,
|
||||
}).then((r) => r.json()).then((r) => {
|
||||
this.setState({questionNow: false})
|
||||
alert("質問しました!")
|
||||
alert("질문을 보냈어요!")
|
||||
location.reload()
|
||||
})
|
||||
}
|
||||
|
@ -32,7 +32,7 @@ export class PageUserQuestion extends React.Component<Props, State> {
|
||||
render() {
|
||||
if (!this.state.question) return <Loading/>
|
||||
return <div>
|
||||
<Title>{this.state.question.user.name} さん宛ての質問: 「{this.state.question.question}」</Title>
|
||||
<Title>{this.state.question.user.name}님이 보낸 질문: "{this.state.question.question}"</Title>
|
||||
<Question {...this.state.question} noNsfwGuard/>
|
||||
</div>
|
||||
}
|
||||
|
@ -42,9 +42,9 @@ export class Question extends React.Component<Props, State> {
|
||||
</CardBody>
|
||||
{ this.state.nsfwGuard && <div className="nsfw-guard" onClick={this.nsfwGuardClick.bind(this)}>
|
||||
<div>
|
||||
<div>閲覧注意</div>
|
||||
{ !this.props.hideAnswerUser && <div>回答者: @{this.props.user.acctDisplay}</div>}
|
||||
<div>クリック/タップで表示</div>
|
||||
<div>열람 주의</div>
|
||||
{ !this.props.hideAnswerUser && <div>답변자: @{this.props.user.acctDisplay}</div>}
|
||||
<div>눌러서 표시</div>
|
||||
</div>
|
||||
</div> }
|
||||
</Card>
|
||||
@ -53,7 +53,7 @@ export class Question extends React.Component<Props, State> {
|
||||
renderAnswerUser() {
|
||||
if (this.props.hideAnswerUser) return null
|
||||
return <span className="mr-2">
|
||||
回答者:
|
||||
답변자:
|
||||
<UserLink {...this.props.user}/>
|
||||
</span>
|
||||
}
|
||||
@ -61,7 +61,7 @@ export class Question extends React.Component<Props, State> {
|
||||
renderQuestionUser() {
|
||||
if (!this.props.questionUser) return null
|
||||
return <span className="mr-2">
|
||||
質問者:
|
||||
질문자:
|
||||
<UserLink {...this.props.questionUser}/>
|
||||
</span>
|
||||
}
|
||||
@ -73,18 +73,18 @@ export class Question extends React.Component<Props, State> {
|
||||
renderAnswerForm() {
|
||||
return <form action="javascript://" onSubmit={this.onSubmit.bind(this)}>
|
||||
<FormGroup>
|
||||
<Input type="textarea" name="answer" placeholder="回答内容を入力" onInput={this.onInput.bind(this)}/>
|
||||
<Input type="textarea" name="answer" placeholder="답변 내용을 입력해 주세요:" onInput={this.onInput.bind(this)}/>
|
||||
</FormGroup>
|
||||
<Button type="submit" color="primary" disabled={!this.state.isNotEmpty}>回答</Button>
|
||||
<span className="ml-3">公開範囲: </span>
|
||||
<Button type="submit" color="primary" disabled={!this.state.isNotEmpty}>답변</Button>
|
||||
<span className="ml-3">공개 범위: </span>
|
||||
<Input type="select" name="visibility" style={{width: "inherit", display: "inline-block"}}>
|
||||
<option value="public">公開</option>
|
||||
<option value="unlisted">未収録</option>
|
||||
<option value="private">非公開</option>
|
||||
<option value="no">投稿しない</option>
|
||||
<option value="public">공개</option>
|
||||
<option value="unlisted">타임라인에 비표시</option>
|
||||
<option value="private">비공개</option>
|
||||
<option value="no">안 올릴 건데요!</option>
|
||||
</Input>
|
||||
<Checkbox name="isNSFW" value="true" className="ml-2">NSFW</Checkbox>
|
||||
<Button type="button" color="danger" style={{float: "right"}} onClick={this.onDelete.bind(this)}>削除</Button>
|
||||
<Button type="button" color="danger" style={{float: "right"}} onClick={this.onDelete.bind(this)}>삭제</Button>
|
||||
</form>
|
||||
}
|
||||
|
||||
@ -98,17 +98,17 @@ export class Question extends React.Component<Props, State> {
|
||||
method: "POST",
|
||||
body: form,
|
||||
}).then((r) => r.json()).then((r) => {
|
||||
alert("答えました")
|
||||
alert("답변했어요!")
|
||||
location.reload()
|
||||
})
|
||||
}
|
||||
|
||||
onDelete(e: any) {
|
||||
if (!confirm("質問を削除します。\n削除した質問は二度と元に戻せません。\n本当に質問を削除しますか?")) return
|
||||
if (!confirm("질문을 삭제하려고요?\n삭제한 질문은 다시 되돌릴 수 없어요.\n정말로 삭제하실 건가요?")) return
|
||||
apiFetch("/api/web/questions/" + this.props._id + "/delete", {
|
||||
method: "POST",
|
||||
}).then((r) => r.json()).then((r) => {
|
||||
alert("削除しました")
|
||||
alert("삭제했어요.")
|
||||
location.reload()
|
||||
})
|
||||
}
|
||||
|
@ -12,14 +12,13 @@ html
|
||||
script(src="/assets/bundle.js?version="+GIT_COMMIT)
|
||||
body
|
||||
#root
|
||||
p ...あれ、もしかしてページが表示されてませんか?
|
||||
p ご迷惑をおかけしています。何回かリロードしていただいた後、それでもこの画面が表示されるようでしたら、以下の動作環境を満たしていることを確認した後、Mastodon @quesdon@mstdn.jp もしくは Twitter @quesdon までお問い合わせください。
|
||||
p: strong 2018年1月20日深夜に大幅アップデートを行いました。以前は閲覧できていたのに1月20日以降に閲覧できなくなった場合は、こちらのミスである可能性が非常に高いです。お手数ですが、 Mastodonの @quesdon@mstdn.jp もしくは Twitter @quesdon までお問い合わせください。
|
||||
h2 動作環境
|
||||
p ...어? 혹시 페이지가 나오지 않나요??
|
||||
p 불편을 끼쳐 드려 죄송해요. 새로고침을 해 보시고, 만약 그래도 이 화면만 계속 뜬다면 아래 동작 환경을 충족하는지 확인 후 Mastodon @planet@planet.moe 에 문의해 주세요.
|
||||
h2 동작 환경
|
||||
ul
|
||||
li iOS
|
||||
del 9.3.5
|
||||
| 10以上 (推奨: iOS 11.2.2以上)
|
||||
li Chrome 63以上
|
||||
li Firefox 57以上
|
||||
p Edge, Internet Explorerは動作対象外です。Google Chrome、もしくはFirefoxをお使いください。
|
||||
| 10 이상 (추천: iOS 11.2.2 이상)
|
||||
li Chrome 63 이상
|
||||
li Firefox 57 이상
|
||||
p Edge, Internet Explorer는 지원 대상이 아니라서 오류가 발생할 수 있어요. Firefox나 Google Chrome을 추천드려요.
|
Loading…
Reference in New Issue
Block a user