diff --git a/locales/ja.yml b/locales/ja.yml
index 44fa0ef538..c02422e81a 100644
--- a/locales/ja.yml
+++ b/locales/ja.yml
@@ -39,6 +39,13 @@ common:
     confused: "こまこまのこまり"
     pudding: "Pudding"
 
+  note-placeholders:
+    a: "今どうしてる?"
+    b: "何かありましたか?"
+    c: "言いたいことは?"
+    d: "ここに書いてください"
+    e: "あなたが書くのを待っています..."
+
   delete: "削除"
   loading: "読み込み中"
   ok: "わかった"
@@ -393,10 +400,9 @@ desktop/views/components/notifications.vue:
   empty: "ありません!"
 
 desktop/views/components/post-form.vue:
-  note-placeholder: "いまどうしてる?"
   reply-placeholder: "この投稿への返信..."
   quote-placeholder: "この投稿を引用..."
-  note: "投稿"
+  submit: "投稿"
   reply: "返信"
   renote: "Renote"
   posted: "投稿しました!"
@@ -718,7 +724,6 @@ desktop/views/widgets/polls.vue:
 desktop/views/widgets/post-form.vue:
   title: "投稿"
   note: "投稿"
-  placeholder: "いまどうしてる?"
 
 desktop/views/widgets/profile.vue:
   update-banner: "クリックでバナー編集"
@@ -819,7 +824,6 @@ mobile/views/components/post-form.vue:
   renote: "Renote"
   renote-placeholder: "この投稿を引用... (オプション)"
   reply-placeholder: "この投稿への返信..."
-  note-placeholder: "いまどうしてる?"
   cw-placeholder: "内容への注釈 (オプション)"
   location-alert: "お使いの端末は位置情報に対応していません"
   error: "エラー"
diff --git a/src/client/app/desktop/views/components/post-form.vue b/src/client/app/desktop/views/components/post-form.vue
index 8eec677b06..ad829065b0 100644
--- a/src/client/app/desktop/views/components/post-form.vue
+++ b/src/client/app/desktop/views/components/post-form.vue
@@ -86,11 +86,19 @@ export default Vue.extend({
 		},
 
 		placeholder(): string {
+			const x = [
+				'%i18n:common.note-placeholders.a%',
+				'%i18n:common.note-placeholders.b%',
+				'%i18n:common.note-placeholders.c%',
+				'%i18n:common.note-placeholders.d%',
+				'%i18n:common.note-placeholders.e%'
+			][Math.floor(Math.random() * 5)];
+
 			return this.renote
 				? '%i18n:@quote-placeholder%'
 				: this.reply
 					? '%i18n:@reply-placeholder%'
-					: '%i18n:@note-placeholder%';
+					: x;
 		},
 
 		submitText(): string {
@@ -98,7 +106,7 @@ export default Vue.extend({
 				? '%i18n:@renote%'
 				: this.reply
 					? '%i18n:@reply%'
-					: '%i18n:@note%';
+					: '%i18n:@submit%';
 		},
 
 		canPost(): boolean {
diff --git a/src/client/app/desktop/views/widgets/post-form.vue b/src/client/app/desktop/views/widgets/post-form.vue
index 69b21ad37a..fb4adf70b8 100644
--- a/src/client/app/desktop/views/widgets/post-form.vue
+++ b/src/client/app/desktop/views/widgets/post-form.vue
@@ -3,7 +3,7 @@
 	<template v-if="props.design == 0">
 		<p class="title">%fa:pencil-alt%%i18n:@title%</p>
 	</template>
-	<textarea :disabled="posting" v-model="text" @keydown="onKeydown" placeholder="%i18n:@placeholder%"></textarea>
+	<textarea :disabled="posting" v-model="text" @keydown="onKeydown" :placeholder="placeholder"></textarea>
 	<button @click="post" :disabled="posting">%i18n:@note%</button>
 </div>
 </template>
@@ -22,6 +22,17 @@ export default define({
 			text: ''
 		};
 	},
+	computed: {
+		placeholder(): string {
+			return [
+				'%i18n:common.note-placeholders.a%',
+				'%i18n:common.note-placeholders.b%',
+				'%i18n:common.note-placeholders.c%',
+				'%i18n:common.note-placeholders.d%',
+				'%i18n:common.note-placeholders.e%'
+			][Math.floor(Math.random() * 5)];
+		}
+	},
 	methods: {
 		func() {
 			if (this.props.design == 1) {
diff --git a/src/client/app/mobile/views/components/post-form.vue b/src/client/app/mobile/views/components/post-form.vue
index f5badb48cc..61f0462659 100644
--- a/src/client/app/mobile/views/components/post-form.vue
+++ b/src/client/app/mobile/views/components/post-form.vue
@@ -5,11 +5,7 @@
 		<div>
 			<span class="text-count" :class="{ over: text.length > 1000 }">{{ 1000 - text.length }}</span>
 			<span class="geo" v-if="geo">%fa:map-marker-alt%</span>
-			<button class="submit" :disabled="posting" @click="post">
-				<template v-if="reply">%i18n:@reply%</template>
-				<template v-else-if="renote">%i18n:@renote%</template>
-				<template v-else>%i18n:@submit%</template>
-			</button>
+			<button class="submit" :disabled="posting" @click="post">{{ submitText }}</button>
 		</div>
 	</header>
 	<div class="form">
@@ -20,7 +16,7 @@
 			<a @click="addVisibleUser">+%i18n:@add-visible-user%</a>
 		</div>
 		<input v-show="useCw" v-model="cw" placeholder="%i18n:@cw-placeholder%">
-		<textarea v-model="text" ref="text" :disabled="posting" :placeholder="reply ? '%i18n:@reply-placeholder%' : renote ? '%i18n:@renote-placeholder%' : '%i18n:@note-placeholder%'"></textarea>
+		<textarea v-model="text" ref="text" :disabled="posting" :placeholder="placeholder"></textarea>
 		<div class="attaches" v-show="files.length != 0">
 			<x-draggable class="files" :list="files" :options="{ animation: 150 }">
 				<div class="file" v-for="file in files" :key="file.id">
@@ -74,6 +70,44 @@ export default Vue.extend({
 		};
 	},
 
+	computed: {
+		draftId(): string {
+			return this.renote
+				? 'renote:' + this.renote.id
+				: this.reply
+					? 'reply:' + this.reply.id
+					: 'note';
+		},
+
+		placeholder(): string {
+			const x = [
+				'%i18n:common.note-placeholders.a%',
+				'%i18n:common.note-placeholders.b%',
+				'%i18n:common.note-placeholders.c%',
+				'%i18n:common.note-placeholders.d%',
+				'%i18n:common.note-placeholders.e%'
+			][Math.floor(Math.random() * 5)];
+
+			return this.renote
+				? '%i18n:@quote-placeholder%'
+				: this.reply
+					? '%i18n:@reply-placeholder%'
+					: x;
+		},
+
+		submitText(): string {
+			return this.renote
+				? '%i18n:@renote%'
+				: this.reply
+					? '%i18n:@reply%'
+					: '%i18n:@submit%';
+		},
+
+		canPost(): boolean {
+			return !this.posting && (this.text.length != 0 || this.files.length != 0 || this.poll || this.renote);
+		}
+	},
+
 	mounted() {
 		if (this.reply && this.reply.user.host != null) {
 			this.text = `@${this.reply.user.username}@${this.reply.user.host} `;