From e965b57dc25fcea390135f7bcbb4dc0decf39e22 Mon Sep 17 00:00:00 2001
From: syuilo <Syuilotan@yahoo.co.jp>
Date: Tue, 27 Jul 2021 00:01:21 +0900
Subject: [PATCH 01/70] Update PULL_REQUEST_TEMPLATE.md

---
 .github/PULL_REQUEST_TEMPLATE.md | 43 +++++++++++++++++++++++---------
 1 file changed, 31 insertions(+), 12 deletions(-)

diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md
index 5ae21482a7..ba46dfdc72 100644
--- a/.github/PULL_REQUEST_TEMPLATE.md
+++ b/.github/PULL_REQUEST_TEMPLATE.md
@@ -1,13 +1,32 @@
-## Summary
+<!-- ℹ お読みください
+PRありがとうございます! PRを作成する前に、以下をご確認ください:
+可能であればタイトルに、以下で示すようなPRの種類が分かるキーワードをプリフィクスしてください。
+fix / refactor / feat / enhance / perf / chore
+また、PRの粒度が適切であることを確認してください。ひとつのPRに複数の種類の変更や関心を含めることは避けてください。
+このPRによって解決されるIssueがある場合は、そのIssue IDを本文内に記入してください。
+CHANGELOG.mdに変更点を追記してください。リファクタリングなど、利用者に影響を与えない変更についてはこの限りではありません。
+機能追加やバグ修正をした場合は、可能であればテストケースを追加してください。
+ご協力ありがとうございます🤗
+-->
+<!-- ℹ README
+Thank you for your PR! Before creating a PR, please check the following:
+If possible, prefix the title with a keyword that identifies the type of this PR, as shown below.
+fix / refactor / feat / enhance / perf / chore
+Also, make sure that the granularity of this PR is appropriate. Please do not include more than one type of change or interest in a single PR.
+If there is an issue to be resolved by this PR, please include the Issue ID in the text.
+Please add the summary of the changes to CHANGELOG.md. However, this is not necessary for changes that do not affect the users, such as refactoring.
+If you have added a feature or fixed a bug, please add a test case if possible.
+Thanks for your cooperation 🤗
+-->
 
-<!--
-  -
-  - * Please describe your changes here *
-  -
-  - If you are going to resolve some issue, please add this context.
-  - Resolve #ISSUE_NUMBER
-  -
-  - If you are going to fix some bug issue, please add this context.
-  - Fix #ISSUE_NUMBER
-  -
-  -->
+# What
+<!-- このPRで何をしたのか? どう変わるのか? -->
+<!-- What did you do with this PR? How will it change things? -->
+
+# Why
+<!-- なぜそうするのか? どういう意図なのか? 何が困っているのか? -->
+<!-- Why do you do it? What are your intentions? What is the problem? -->
+
+# Additional info (optional)
+<!-- テスト観点など -->
+<!-- Test perspective, etc -->
-- 
GitLab


From f220e4183f184290982e7049cc45cb7a126332fe Mon Sep 17 00:00:00 2001
From: syuilo <Syuilotan@yahoo.co.jp>
Date: Tue, 27 Jul 2021 21:37:32 +0900
Subject: [PATCH 02/70] :art:

---
 src/client/style.scss                 |  5 ++---
 src/client/themes/_dark.json5         |  3 +--
 src/client/themes/_light.json5        |  3 +--
 src/client/themes/d-astro.json5       |  3 +--
 src/client/themes/d-black.json5       |  1 -
 src/client/themes/d-dark.json5        |  1 -
 src/client/themes/d-persimmon.json5   |  1 -
 src/client/themes/l-light.json5       |  1 -
 src/client/themes/l-vivid.json5       |  3 +--
 src/client/ui/deck/widgets-column.vue |  2 +-
 src/client/ui/default.vue             | 12 ++++--------
 11 files changed, 11 insertions(+), 24 deletions(-)

diff --git a/src/client/style.scss b/src/client/style.scss
index 578e7543c7..02f794fba4 100644
--- a/src/client/style.scss
+++ b/src/client/style.scss
@@ -239,8 +239,7 @@ hr {
 ._panel {
 	background: var(--panel);
 	border-radius: var(--radius);
-	//border: var(--panelBorder);
-	box-shadow: var(--panelShadow);
+	border: var(--panelBorder);
 	overflow: clip;
 }
 
@@ -357,7 +356,7 @@ hr {
 ._flat_ {
 	--root-margin: 0px;
 	--baseContentWidth: 100%;
-	--panelShadow: none;
+	--panelBorder: none;
 
 	._block {
 		//border-top: solid 0.5px var(--divider);
diff --git a/src/client/themes/_dark.json5 b/src/client/themes/_dark.json5
index 6414a7ad42..fb0fe80146 100644
--- a/src/client/themes/_dark.json5
+++ b/src/client/themes/_dark.json5
@@ -26,8 +26,7 @@
 		panelHeaderBg: ':lighten<3<@panel',
 		panelHeaderFg: '@fg',
 		panelHeaderDivider: 'rgba(0, 0, 0, 0)',
-		panelBorder: 'rgba(0, 0, 0, 0)',
-		panelShadow: '" 0 8px 24px rgba(0, 0, 0, 0.12)',
+		panelBorder: '" solid 1px var(--divider)',
 		acrylicPanel: ':alpha<0.5<@panel',
 		shadow: 'rgba(0, 0, 0, 0.3)',
 		header: ':alpha<0.7<@panel',
diff --git a/src/client/themes/_light.json5 b/src/client/themes/_light.json5
index 0438b54a49..db971ba0e4 100644
--- a/src/client/themes/_light.json5
+++ b/src/client/themes/_light.json5
@@ -26,8 +26,7 @@
 		panelHeaderBg: ':lighten<3<@panel',
 		panelHeaderFg: '@fg',
 		panelHeaderDivider: 'rgba(0, 0, 0, 0)',
-		panelBorder: 'rgba(0, 0, 0, 0)',
-		panelShadow: '" 0 8px 24px rgb(21 43 75 / 8%)',
+		panelBorder: '" solid 1px var(--divider)',
 		acrylicPanel: ':alpha<0.5<@panel',
 		shadow: 'rgba(0, 0, 0, 0.1)',
 		header: ':alpha<0.7<@panel',
diff --git a/src/client/themes/d-astro.json5 b/src/client/themes/d-astro.json5
index a88e949c3c..c9818f2c5c 100644
--- a/src/client/themes/d-astro.json5
+++ b/src/client/themes/d-astro.json5
@@ -39,8 +39,7 @@
 		navHoverFg: ':lighten<17<@fg',
 		dateLabelFg: '@fg',
 		inputBorder: '#959da2',
-		panelBorder: 'rgba(0, 0, 0, 0)',
-		panelShadow: '" 0 8px 24px rgba(0, 0, 0, 0.12)',
+		panelBorder: '" solid 1px var(--divider)',
 		accentDarken: ':darken<10<@accent',
 		acrylicPanel: ':alpha<0.5<@panel',
 		navIndicator: '@accent',
diff --git a/src/client/themes/d-black.json5 b/src/client/themes/d-black.json5
index 2608891e73..f4b93cdcbc 100644
--- a/src/client/themes/d-black.json5
+++ b/src/client/themes/d-black.json5
@@ -11,7 +11,6 @@
 		panel: '#131313',
 		panelHeaderBg: '@panel',
 		panelHeaderDivider: '@divider',
-		panelShadow: '" 0 8px 24px rgb(0 0 0 / 25%)',
 		shadow: 'rgba(255, 255, 255, 0.05)',
 		modalBg: 'rgba(255, 255, 255, 0.1)',
 		messageBg: '#1d1d1d',
diff --git a/src/client/themes/d-dark.json5 b/src/client/themes/d-dark.json5
index fba7fe7582..d24ce4df69 100644
--- a/src/client/themes/d-dark.json5
+++ b/src/client/themes/d-dark.json5
@@ -13,7 +13,6 @@
 		fgHighlighted: '#fff',
 		divider: 'rgba(255, 255, 255, 0.14)',
 		panel: '#2d2d2d',
-		panelShadow: '" 0 8px 24px rgb(0 0 0 / 25%)',
 		panelHeaderBg: '@panel',
 		panelHeaderDivider: '@divider',
 		header: ':alpha<0.7<@panel',
diff --git a/src/client/themes/d-persimmon.json5 b/src/client/themes/d-persimmon.json5
index a1ebaf59eb..11e9994f5e 100644
--- a/src/client/themes/d-persimmon.json5
+++ b/src/client/themes/d-persimmon.json5
@@ -13,7 +13,6 @@
 		fgHighlighted: '#fff',
 		divider: 'rgba(255, 255, 255, 0.14)',
 		panel: 'rgb(41, 43, 41)',
-		panelShadow: '" 0 8px 24px rgb(0 0 0 / 25%)',
 		infoFg: '@fg',
 		infoBg: '#333c3b',
 		navBg: '#141714',
diff --git a/src/client/themes/l-light.json5 b/src/client/themes/l-light.json5
index 27a973c88a..f85bee3b06 100644
--- a/src/client/themes/l-light.json5
+++ b/src/client/themes/l-light.json5
@@ -14,7 +14,6 @@
 		header: ':alpha<0.7<@panel',
 		navBg: '#fff',
 		panel: '#fff',
-		panelShadow: '" 0 8px 24px rgb(21 43 75 / 8%)',
 		panelHeaderDivider: '@divider',
 		messageBg: '#dedede',
 	},
diff --git a/src/client/themes/l-vivid.json5 b/src/client/themes/l-vivid.json5
index a21e053b0a..0d6255d300 100644
--- a/src/client/themes/l-vivid.json5
+++ b/src/client/themes/l-vivid.json5
@@ -42,8 +42,7 @@
 		navHoverFg: ':darken<17<@fg',
 		dateLabelFg: '@fg',
 		inputBorder: '#dae0e4',
-		panelBorder: 'rgba(0, 0, 0, 0)',
-		panelShadow: '" 0 8px 24px rgb(21 43 75 / 8%)',
+		panelBorder: '" solid 1px var(--divider)',
 		accentDarken: ':darken<10<@accent',
 		acrylicPanel: ':alpha<0.5<@panel',
 		navIndicator: '@accent',
diff --git a/src/client/ui/deck/widgets-column.vue b/src/client/ui/deck/widgets-column.vue
index 69aaaffa88..22b1a38287 100644
--- a/src/client/ui/deck/widgets-column.vue
+++ b/src/client/ui/deck/widgets-column.vue
@@ -64,7 +64,7 @@ export default defineComponent({
 <style lang="scss" scoped>
 .wtdtxvec {
 	--margin: 8px;
-	--panelShadow: none;
+	--panelBorder: none;
 
 	padding: 0 var(--margin);
 }
diff --git a/src/client/ui/default.vue b/src/client/ui/default.vue
index 5e79cd3830..d257b048d0 100644
--- a/src/client/ui/default.vue
+++ b/src/client/ui/default.vue
@@ -143,7 +143,7 @@ export default defineComponent({
 		},
 
 		attachSticky(ref) {
-			const sticky = new StickySidebar(this.$refs[ref], this.$store.state.menuDisplay === 'top' ? 1 : 16, this.$store.state.menuDisplay === 'top' ? 60 : 0); // TODO: ヘッダーの高さを60pxと決め打ちしているのを直す
+			const sticky = new StickySidebar(this.$refs[ref], this.$store.state.menuDisplay === 'top' ? 0 : 16, this.$store.state.menuDisplay === 'top' ? 60 : 0); // TODO: ヘッダーの高さを60pxと決め打ちしているのを直す
 			window.addEventListener('scroll', () => {
 				sticky.calc(window.scrollY);
 			}, { passive: true });
@@ -230,8 +230,6 @@ export default defineComponent({
 	$widgets-hide-threshold: 1200px;
 	$nav-icon-only-width: 78px; // TODO: どこかに集約したい
 
-	--panelShadow: 0 0 0 1px var(--divider);
-
 	// ほんとは単に 100vh と書きたいところだが... https://css-tricks.com/the-trick-to-viewport-units-on-mobile/
 	min-height: calc(var(--vh, 1vh) * 100);
 	box-sizing: border-box;
@@ -290,7 +288,6 @@ export default defineComponent({
 			width: 750px;
 			margin: 0 16px 0 0;
 			background: var(--bg);
-			box-shadow: 0 0 0 1px var(--divider);
 			border-radius: 0;
 			--margin: 12px;
 
@@ -321,7 +318,7 @@ export default defineComponent({
 		}
 
 		> .widgets {
-			//--panelShadow: none;
+			//--panelBorder: none;
 			width: 300px;
 			margin-top: 16px;
 
@@ -342,14 +339,13 @@ export default defineComponent({
 			--globalHeaderHeight: 60px; // TODO: 60pxと決め打ちしているのを直す
 
 			> .main {
-				margin-top: 1px;
+				margin-top: 0;
 				border-radius: var(--radius);
-				box-shadow: 0 0 0 1px var(--divider);
 			}
 
 			> .widgets {
 				--stickyTop: var(--globalHeaderHeight);
-				margin-top: 1px;
+				margin-top: 0;
 			}
 		}
 
-- 
GitLab


From 1bec25e8e67094b5e8c9511717576b1938fba12b Mon Sep 17 00:00:00 2001
From: syuilo <Syuilotan@yahoo.co.jp>
Date: Wed, 28 Jul 2021 14:45:56 +0900
Subject: [PATCH 03/70] =?UTF-8?q?=E3=83=91=E3=82=B9=E3=83=AF=E3=83=BC?=
 =?UTF-8?q?=E3=83=89=E3=83=AA=E3=82=BB=E3=83=83=E3=83=88=E3=81=97=E3=81=A6?=
 =?UTF-8?q?=E3=82=82=E6=96=B0=E3=81=97=E3=81=84=E3=83=91=E3=82=B9=E3=83=AF?=
 =?UTF-8?q?=E3=83=BC=E3=83=89=E3=81=8C=E8=A1=A8=E7=A4=BA=E3=81=95=E3=82=8C?=
 =?UTF-8?q?=E3=81=AA=E3=81=84=E5=95=8F=E9=A1=8C=E3=82=92=E4=BF=AE=E6=AD=A3?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 src/client/pages/user-info.vue | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/src/client/pages/user-info.vue b/src/client/pages/user-info.vue
index 51bd5016bb..503982652b 100644
--- a/src/client/pages/user-info.vue
+++ b/src/client/pages/user-info.vue
@@ -167,13 +167,13 @@ export default defineComponent({
 		},
 
 		async resetPassword() {
-			os.apiWithDialog('admin/reset-password', {
+			const { password } = await os.api('admin/reset-password', {
 				userId: this.user.id,
-			}, undefined, ({ password }) => {
-				os.dialog({
-					type: 'success',
-					text: this.$t('newPasswordIs', { password })
-				});
+			});
+
+			os.dialog({
+				type: 'success',
+				text: this.$t('newPasswordIs', { password })
 			});
 		},
 
-- 
GitLab


From 998936651a7c81fdd1db219f6ee1fe7e331e868f Mon Sep 17 00:00:00 2001
From: syuilo <Syuilotan@yahoo.co.jp>
Date: Wed, 28 Jul 2021 14:46:25 +0900
Subject: [PATCH 04/70] fix style

---
 src/client/ui/chat/index.vue | 9 ++-------
 src/client/ui/chat/side.vue  | 2 +-
 2 files changed, 3 insertions(+), 8 deletions(-)

diff --git a/src/client/ui/chat/index.vue b/src/client/ui/chat/index.vue
index d45369e8b0..fed2b803b7 100644
--- a/src/client/ui/chat/index.vue
+++ b/src/client/ui/chat/index.vue
@@ -64,7 +64,7 @@
 			</div>
 			<div class="right">
 				<button class="_button item search" @click="search" v-tooltip="$ts.search">
-					<i class="fas fa-search"></i>
+					<i class="fas fa-search icon"></i>
 				</button>
 				<MkA class="item" to="/settings" v-tooltip="$ts.settings"><i class="fas fa-cog icon"></i></MkA>
 			</div>
@@ -373,7 +373,7 @@ export default defineComponent({
 
 			> .left, > .right {
 				> .item, > .menu {
-					display: inline-block;
+					display: inline-flex;
 					vertical-align: middle;
 					height: ($header-height - ($padding * 2));
 					width: ($header-height - ($padding * 2));
@@ -387,11 +387,6 @@ export default defineComponent({
 					}
 
 					> .icon {
-						position: absolute;
-						top: 0;
-						left: 0;
-						right: 0;
-						bottom: 0;
 						margin: auto;
 					}
 
diff --git a/src/client/ui/chat/side.vue b/src/client/ui/chat/side.vue
index 8cc69fee8c..7ad39c7a19 100644
--- a/src/client/ui/chat/side.vue
+++ b/src/client/ui/chat/side.vue
@@ -5,7 +5,7 @@
 		<XHeader class="title" :info="pageInfo" :with-back="false" :center="false"/>
 		<button class="_button" @click="close()"><i class="fas fa-times"></i></button>
 	</header>
-	<component :is="component" v-bind="props" :ref="changePage"/>
+	<component :is="component" v-bind="props" :ref="changePage" class="_flat_"/>
 </div>
 </template>
 
-- 
GitLab


From 0d276d0d61aadc26d77429ad69b3786a4a0bdd8c Mon Sep 17 00:00:00 2001
From: syuilo <Syuilotan@yahoo.co.jp>
Date: Thu, 29 Jul 2021 17:10:16 +0900
Subject: [PATCH 05/70] Improve usability

---
 src/client/components/drive.vue | 15 ++++++++++++---
 1 file changed, 12 insertions(+), 3 deletions(-)

diff --git a/src/client/components/drive.vue b/src/client/components/drive.vue
index 16aa9dc1a8..98f7b54828 100644
--- a/src/client/components/drive.vue
+++ b/src/client/components/drive.vue
@@ -10,6 +10,7 @@
 			<span class="separator" v-if="folder != null"><i class="fas fa-angle-right"></i></span>
 			<span class="folder current" v-if="folder != null">{{ folder.name }}</span>
 		</div>
+		<button @click="showMenu" class="menu _button"><i class="fas fa-ellipsis-h"></i></button>
 	</nav>
 	<div class="main" :class="{ uploading: uploadings.length > 0, fetching }"
 		ref="main"
@@ -627,8 +628,12 @@ export default defineComponent({
 			}];
 		},
 
-		onContextmenu(e) {
-			os.contextMenu(this.getMenu(), e);
+		showMenu(ev) {
+			os.modalMenu(this.getMenu(), ev.currentTarget || ev.target);
+		},
+
+		onContextmenu(ev) {
+			os.contextMenu(this.getMenu(), ev);
 		},
 	}
 });
@@ -641,7 +646,7 @@ export default defineComponent({
 	height: 100%;
 
 	> nav {
-		display: block;
+		display: flex;
 		z-index: 2;
 		width: 100%;
 		padding: 0 8px;
@@ -696,6 +701,10 @@ export default defineComponent({
 				}
 			}
 		}
+
+		> .menu {
+			margin-left: auto;
+		}
 	}
 
 	> .main {
-- 
GitLab


From b1e6a33d6b7d24ee8bb21bf2b01e5ffc3f6dc931 Mon Sep 17 00:00:00 2001
From: syuilo <Syuilotan@yahoo.co.jp>
Date: Thu, 29 Jul 2021 23:59:45 +0900
Subject: [PATCH 06/70] tweak style

---
 src/client/pages/drive.vue                 |  1 -
 src/client/pages/user/index.vue            |  1 -
 src/client/scripts/paging.ts               | 12 ++++++++++--
 src/client/ui/chat/date-separated-list.vue | 22 ++++++++++++++++++----
 src/client/ui/chat/index.vue               |  9 +++++++--
 src/client/ui/chat/notes.vue               |  2 +-
 6 files changed, 36 insertions(+), 11 deletions(-)

diff --git a/src/client/pages/drive.vue b/src/client/pages/drive.vue
index 753114f725..9ee1ea8859 100644
--- a/src/client/pages/drive.vue
+++ b/src/client/pages/drive.vue
@@ -20,7 +20,6 @@ export default defineComponent({
 			[symbols.PAGE_INFO]: {
 				title: computed(() => this.folder ? this.folder.name : this.$ts.drive),
 				icon: 'fas fa-cloud',
-				menu: () => this.$refs.drive.getMenu()
 			},
 			folder: null,
 		};
diff --git a/src/client/pages/user/index.vue b/src/client/pages/user/index.vue
index f5c5a0694c..f614910782 100644
--- a/src/client/pages/user/index.vue
+++ b/src/client/pages/user/index.vue
@@ -282,7 +282,6 @@ export default defineComponent({
 				share: {
 					title: this.user.name,
 				},
-				menu: () => getUserMenu(this.user),
 			} : null),
 			user: null,
 			error: null,
diff --git a/src/client/scripts/paging.ts b/src/client/scripts/paging.ts
index bcb0d7f2b0..194c2e8003 100644
--- a/src/client/scripts/paging.ts
+++ b/src/client/scripts/paging.ts
@@ -94,7 +94,11 @@ export default (opts) => ({
 				for (let i = 0; i < items.length; i++) {
 					const item = items[i];
 					markRaw(item);
-					if (i === 3) item._shouldInsertAd_ = true;
+					if (this.pagination.reversed) {
+						if (i === items.length - 2) item._shouldInsertAd_ = true;
+					} else {
+						if (i === 3) item._shouldInsertAd_ = true;
+					}
 				}
 				if (!this.pagination.noPaging && (items.length > (this.pagination.limit || 10))) {
 					items.pop();
@@ -133,7 +137,11 @@ export default (opts) => ({
 				for (let i = 0; i < items.length; i++) {
 					const item = items[i];
 					markRaw(item);
-					if (i === 10) item._shouldInsertAd_ = true;
+					if (this.pagination.reversed) {
+						if (i === items.length - 9) item._shouldInsertAd_ = true;
+					} else {
+						if (i === 10) item._shouldInsertAd_ = true;
+					}
 				}
 				if (items.length > SECOND_FETCH_LIMIT) {
 					items.pop();
diff --git a/src/client/ui/chat/date-separated-list.vue b/src/client/ui/chat/date-separated-list.vue
index bc7fc91d38..12638cd230 100644
--- a/src/client/ui/chat/date-separated-list.vue
+++ b/src/client/ui/chat/date-separated-list.vue
@@ -1,17 +1,23 @@
 <script lang="ts">
-import { defineComponent, h, TransitionGroup } from 'vue';
+import { defineComponent, h, PropType, TransitionGroup } from 'vue';
+import MkAd from '@client/components/global/ad.vue';
 
 export default defineComponent({
 	props: {
 		items: {
-			type: Array,
+			type: Array as PropType<{ id: string; createdAt: string; _shouldInsertAd_: boolean; }[]>,
 			required: true,
 		},
 		reversed: {
 			type: Boolean,
 			required: false,
 			default: false
-		}
+		},
+		ad: {
+			type: Boolean,
+			required: false,
+			default: false
+		},
 	},
 
 	methods: {
@@ -66,7 +72,15 @@ export default defineComponent({
 
 				return [el, separator];
 			} else {
-				return el;
+				if (this.ad && item._shouldInsertAd_) {
+					return [h(MkAd, {
+						class: 'a', // advertiseの意(ブロッカー対策)
+						key: item.id + ':ad',
+						prefer: ['horizontal', 'horizontal-big'],
+					}), el];
+				} else {
+					return el;
+				}
 			}
 		}));
 	},
diff --git a/src/client/ui/chat/index.vue b/src/client/ui/chat/index.vue
index fed2b803b7..6e433de126 100644
--- a/src/client/ui/chat/index.vue
+++ b/src/client/ui/chat/index.vue
@@ -55,6 +55,7 @@
 					<MkA to="/my/favorites" class="item"><i class="fas fa-star icon"></i>{{ $ts.favorites }}</MkA>
 				</div>
 			</div>
+			<MkAd class="a" prefer="square"/>
 		</div>
 		<footer class="footer">
 			<div class="left">
@@ -351,7 +352,7 @@ export default defineComponent({
 		flex-direction: column;
 		width: 250px;
 		height: 100vh;
-		border-right: solid 0.5px var(--divider);
+		border-right: solid 4px var(--divider);
 
 		> .header, > .footer {
 			$padding: 8px;
@@ -498,6 +499,10 @@ export default defineComponent({
 					}
 				}
 			}
+
+			> .a {
+				margin: 12px;
+			}
 		}
 	}
 
@@ -591,7 +596,7 @@ export default defineComponent({
 
 	> .side {
 		width: 350px;
-		border-left: solid 0.5px var(--divider);
+		border-left: solid 4px var(--divider);
 
 		&.widgets.sideViewOpening {
 			@media (max-width: 1400px) {
diff --git a/src/client/ui/chat/notes.vue b/src/client/ui/chat/notes.vue
index 3ced6d8b3c..6690baf584 100644
--- a/src/client/ui/chat/notes.vue
+++ b/src/client/ui/chat/notes.vue
@@ -16,7 +16,7 @@
 		</MkButton>
 	</div>
 
-	<XList ref="notes" :items="notes" v-slot="{ item: note }" :direction="reversed ? 'up' : 'down'" :reversed="reversed">
+	<XList ref="notes" :items="notes" v-slot="{ item: note }" :direction="reversed ? 'up' : 'down'" :reversed="reversed" :ad="true">
 		<XNote :note="note" @update:note="updated(note, $event)" :key="note._featuredId_ || note._prId_ || note.id"/>
 	</XList>
 
-- 
GitLab


From d2da459dd8e11c74b05ecebf0190b9cca28b9066 Mon Sep 17 00:00:00 2001
From: syuilo <Syuilotan@yahoo.co.jp>
Date: Sun, 1 Aug 2021 14:45:40 +0900
Subject: [PATCH 07/70] refactor

---
 src/client/pages/user/index.vue | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/client/pages/user/index.vue b/src/client/pages/user/index.vue
index f614910782..ab92407a55 100644
--- a/src/client/pages/user/index.vue
+++ b/src/client/pages/user/index.vue
@@ -237,8 +237,8 @@ import Progress from '@client/scripts/loading';
 import { parseAcct } from '@/misc/acct';
 import { getScrollPosition } from '@client/scripts/scroll';
 import { getUserMenu } from '@client/scripts/get-user-menu';
-import number from '../../filters/number';
-import { userPage, acct as getAcct } from '../../filters/user';
+import number from '@client/filters/number';
+import { userPage, acct as getAcct } from '@client/filters/user';
 import * as os from '@client/os';
 import * as symbols from '@client/symbols';
 
-- 
GitLab


From e044d11782b0f7237b7f1354aba0f00365d91885 Mon Sep 17 00:00:00 2001
From: syuilo <Syuilotan@yahoo.co.jp>
Date: Thu, 5 Aug 2021 00:15:51 +0900
Subject: [PATCH 08/70] Improve docs

---
 locales/ja-JP.yml                             |   6 +
 src/client/pages/doc.vue                      |   1 +
 src/client/pages/docs.vue                     | 103 ++++++++++++++++--
 src/client/router.ts                          |   2 +-
 src/docs/ja-JP/{ => advanced}/aiscript.md     |   0
 src/docs/ja-JP/{ => advanced}/api.md          |   0
 .../ja-JP/{ => advanced}/create-plugin.md     |   0
 src/docs/ja-JP/{ => advanced}/reversi-bot.md  |   0
 src/docs/ja-JP/{ => advanced}/stream.md       |   0
 src/docs/ja-JP/{ => features}/custom-emoji.md |   0
 src/docs/ja-JP/{ => features}/deck.md         |   0
 src/docs/ja-JP/{ => features}/follow.md       |   0
 .../ja-JP/{ => features}/keyboard-shortcut.md |   0
 src/docs/ja-JP/{ => features}/mfm.md          |   0
 src/docs/ja-JP/{ => features}/mute.md         |   0
 src/docs/ja-JP/{ => features}/pages.md        |   0
 src/docs/ja-JP/{ => features}/reaction.md     |   1 -
 src/docs/ja-JP/{ => features}/theme.md        |   0
 src/docs/ja-JP/{ => features}/timelines.md    |   0
 src/docs/ja-JP/general/misskey.md             |  43 ++++++++
 src/server/web/index.ts                       |  29 ++++-
 21 files changed, 170 insertions(+), 15 deletions(-)
 rename src/docs/ja-JP/{ => advanced}/aiscript.md (100%)
 rename src/docs/ja-JP/{ => advanced}/api.md (100%)
 rename src/docs/ja-JP/{ => advanced}/create-plugin.md (100%)
 rename src/docs/ja-JP/{ => advanced}/reversi-bot.md (100%)
 rename src/docs/ja-JP/{ => advanced}/stream.md (100%)
 rename src/docs/ja-JP/{ => features}/custom-emoji.md (100%)
 rename src/docs/ja-JP/{ => features}/deck.md (100%)
 rename src/docs/ja-JP/{ => features}/follow.md (100%)
 rename src/docs/ja-JP/{ => features}/keyboard-shortcut.md (100%)
 rename src/docs/ja-JP/{ => features}/mfm.md (100%)
 rename src/docs/ja-JP/{ => features}/mute.md (100%)
 rename src/docs/ja-JP/{ => features}/pages.md (100%)
 rename src/docs/ja-JP/{ => features}/reaction.md (86%)
 rename src/docs/ja-JP/{ => features}/theme.md (100%)
 rename src/docs/ja-JP/{ => features}/timelines.md (100%)
 create mode 100644 src/docs/ja-JP/general/misskey.md

diff --git a/locales/ja-JP.yml b/locales/ja-JP.yml
index 406828e3ca..e35514ded9 100644
--- a/locales/ja-JP.yml
+++ b/locales/ja-JP.yml
@@ -766,6 +766,12 @@ customCssWarn: "この設定は必ず知識のある方が行ってください
 global: "グローバル"
 squareAvatars: "アイコンを四角形で表示"
 
+_docs: 
+  continueReading: "続きを読む"
+  features: "機能"
+  generalTopics: "一般的なトピック"
+  advancedTopics: "高度なトピック"
+
 _ad:
   back: "戻る"
   reduceFrequencyOfThisAd: "この広告の表示頻度を下げる"
diff --git a/src/client/pages/doc.vue b/src/client/pages/doc.vue
index a4cf25033e..58b352d638 100644
--- a/src/client/pages/doc.vue
+++ b/src/client/pages/doc.vue
@@ -107,6 +107,7 @@ export default defineComponent({
 	padding: 32px;
 	max-width: 800px;
 	margin: 0 auto;
+	background: var(--panel);
 
 	&.max-width_500px {
 		padding: 16px;
diff --git a/src/client/pages/docs.vue b/src/client/pages/docs.vue
index e51528f83d..e677fe0cbe 100644
--- a/src/client/pages/docs.vue
+++ b/src/client/pages/docs.vue
@@ -1,14 +1,38 @@
 <template>
-<div>
-	<main class="_section">
-		<div class="_content">
-			<ul>
-				<li v-for="doc in docs" :key="doc.path">
-					<MkA :to="`/docs/${doc.path}`">{{ doc.title }}</MkA>
-				</li>
-			</ul>
+<div class="vtaihdtm">
+	<div class="search">
+		<MkInput v-model:value="query" :debounce="true" type="search"><template #icon><i class="fas fa-search"></i></template><span>{{ $ts.search }}</span></MkInput>
+	</div>
+	<MkFolder>
+		<template #header>{{ $ts._docs.generalTopics }}</template>
+		<div class="docs">
+			<MkA v-for="doc in docs.filter(doc => doc.path.startsWith('general/'))" :key="doc.path" :to="`/docs/${doc.path}`" class="doc">
+				<div class="title">{{ doc.title }}</div>
+				<div class="summary">{{ doc.summary }}</div>
+				<div class="read">{{ $ts._docs.continueReading }}</div>
+			</MkA>
 		</div>
-	</main>
+	</MkFolder>
+	<MkFolder>
+		<template #header>{{ $ts._docs.features }}</template>
+		<div class="docs">
+			<MkA v-for="doc in docs.filter(doc => doc.path.startsWith('features/'))" :key="doc.path" :to="`/docs/${doc.path}`" class="doc">
+				<div class="title">{{ doc.title }}</div>
+				<div class="summary">{{ doc.summary }}</div>
+				<div class="read">{{ $ts._docs.continueReading }}</div>
+			</MkA>
+		</div>
+	</MkFolder>
+	<MkFolder>
+		<template #header>{{ $ts._docs.advancedTopics }}</template>
+		<div class="docs">
+			<MkA v-for="doc in docs.filter(doc => doc.path.startsWith('advanced/'))" :key="doc.path" :to="`/docs/${doc.path}`" class="doc">
+				<div class="title">{{ doc.title }}</div>
+				<div class="summary">{{ doc.summary }}</div>
+				<div class="read">{{ $ts._docs.continueReading }}</div>
+			</MkA>
+		</div>
+	</MkFolder>
 </div>
 </template>
 
@@ -16,8 +40,15 @@
 import { defineComponent } from 'vue';
 import { url, lang } from '@client/config';
 import * as symbols from '@client/symbols';
+import MkFolder from '@client/components/ui/folder.vue';
+import MkInput from '@client/components/ui/input.vue';
 
 export default defineComponent({
+	components: {
+		MkFolder,
+		MkInput,
+	},
+
 	data() {
 		return {
 			[symbols.PAGE_INFO]: {
@@ -25,6 +56,15 @@ export default defineComponent({
 				icon: 'fas fa-question-circle'
 			},
 			docs: [],
+			query: null,
+		}
+	},
+
+	watch: {
+		query() {
+			fetch(`${url}/docs.json?lang=${lang}&q=${this.query}`).then(res => res.json()).then(docs => {
+				this.docs = docs;
+			});
 		}
 	},
 
@@ -35,3 +75,48 @@ export default defineComponent({
 	},
 });
 </script>
+
+<style lang="scss" scoped>
+.vtaihdtm {
+	background: var(--panel);
+
+	> .search {
+		padding: 8px;
+	}
+
+	.docs {
+		display: grid;
+		grid-template-columns: repeat(auto-fill, minmax(270px, 1fr));
+		grid-gap: 12px;
+		margin: var(--margin);
+
+		> .doc {
+			display: inline-block;
+			padding: 16px;
+			border: solid 1px var(--divider);
+			border-radius: 6px;
+
+			&:hover {
+				border: solid 1px var(--accent);
+				text-decoration: none;
+			}
+
+			> .title {
+				font-weight: bold;
+			}
+
+			> .summary {
+				white-space: nowrap;
+				overflow: hidden;
+				text-overflow: ellipsis;
+				font-size: 0.9em;
+			}
+
+			> .read {
+				color: var(--link);
+				font-size: 0.9em;
+			}
+		}
+	}
+}
+</style>
diff --git a/src/client/router.ts b/src/client/router.ts
index 4c3aa765e6..2081c1020c 100644
--- a/src/client/router.ts
+++ b/src/client/router.ts
@@ -31,7 +31,7 @@ export const router = createRouter({
 		{ path: '/docs', component: page('docs') },
 		{ path: '/theme-editor', component: page('theme-editor') },
 		{ path: '/advanced-theme-editor', component: page('advanced-theme-editor') },
-		{ path: '/docs/:doc', component: page('doc'), props: route => ({ doc: route.params.doc }) },
+		{ path: '/docs/:doc(.*)', component: page('doc'), props: route => ({ doc: route.params.doc }) },
 		{ path: '/explore', component: page('explore') },
 		{ path: '/explore/tags/:tag', props: true, component: page('explore') },
 		{ path: '/search', component: page('search') },
diff --git a/src/docs/ja-JP/aiscript.md b/src/docs/ja-JP/advanced/aiscript.md
similarity index 100%
rename from src/docs/ja-JP/aiscript.md
rename to src/docs/ja-JP/advanced/aiscript.md
diff --git a/src/docs/ja-JP/api.md b/src/docs/ja-JP/advanced/api.md
similarity index 100%
rename from src/docs/ja-JP/api.md
rename to src/docs/ja-JP/advanced/api.md
diff --git a/src/docs/ja-JP/create-plugin.md b/src/docs/ja-JP/advanced/create-plugin.md
similarity index 100%
rename from src/docs/ja-JP/create-plugin.md
rename to src/docs/ja-JP/advanced/create-plugin.md
diff --git a/src/docs/ja-JP/reversi-bot.md b/src/docs/ja-JP/advanced/reversi-bot.md
similarity index 100%
rename from src/docs/ja-JP/reversi-bot.md
rename to src/docs/ja-JP/advanced/reversi-bot.md
diff --git a/src/docs/ja-JP/stream.md b/src/docs/ja-JP/advanced/stream.md
similarity index 100%
rename from src/docs/ja-JP/stream.md
rename to src/docs/ja-JP/advanced/stream.md
diff --git a/src/docs/ja-JP/custom-emoji.md b/src/docs/ja-JP/features/custom-emoji.md
similarity index 100%
rename from src/docs/ja-JP/custom-emoji.md
rename to src/docs/ja-JP/features/custom-emoji.md
diff --git a/src/docs/ja-JP/deck.md b/src/docs/ja-JP/features/deck.md
similarity index 100%
rename from src/docs/ja-JP/deck.md
rename to src/docs/ja-JP/features/deck.md
diff --git a/src/docs/ja-JP/follow.md b/src/docs/ja-JP/features/follow.md
similarity index 100%
rename from src/docs/ja-JP/follow.md
rename to src/docs/ja-JP/features/follow.md
diff --git a/src/docs/ja-JP/keyboard-shortcut.md b/src/docs/ja-JP/features/keyboard-shortcut.md
similarity index 100%
rename from src/docs/ja-JP/keyboard-shortcut.md
rename to src/docs/ja-JP/features/keyboard-shortcut.md
diff --git a/src/docs/ja-JP/mfm.md b/src/docs/ja-JP/features/mfm.md
similarity index 100%
rename from src/docs/ja-JP/mfm.md
rename to src/docs/ja-JP/features/mfm.md
diff --git a/src/docs/ja-JP/mute.md b/src/docs/ja-JP/features/mute.md
similarity index 100%
rename from src/docs/ja-JP/mute.md
rename to src/docs/ja-JP/features/mute.md
diff --git a/src/docs/ja-JP/pages.md b/src/docs/ja-JP/features/pages.md
similarity index 100%
rename from src/docs/ja-JP/pages.md
rename to src/docs/ja-JP/features/pages.md
diff --git a/src/docs/ja-JP/reaction.md b/src/docs/ja-JP/features/reaction.md
similarity index 86%
rename from src/docs/ja-JP/reaction.md
rename to src/docs/ja-JP/features/reaction.md
index 476af64e8b..fadce7af4e 100644
--- a/src/docs/ja-JP/reaction.md
+++ b/src/docs/ja-JP/features/reaction.md
@@ -9,7 +9,6 @@
 
 ## リモート投稿へのリアクションについて
 リアクションはMisskeyオリジナルの機能であるため、リモートインスタンスがMisskeyでない限りは、ほとんどの場合「Like」としてアクティビティが送信されます。一般的にはLikeは「お気に入り」として実装されているようです。
-また、相手がMisskeyであったとしても、カスタム絵文字リアクションは伝わらず、自動的に「👍」等にフォールバックされます。
 
 ## リモートからのリアクションについて
 リモートから「Like」アクティビティを受信したとき、Misskeyでは「👍」のリアクションとして解釈されます。
diff --git a/src/docs/ja-JP/theme.md b/src/docs/ja-JP/features/theme.md
similarity index 100%
rename from src/docs/ja-JP/theme.md
rename to src/docs/ja-JP/features/theme.md
diff --git a/src/docs/ja-JP/timelines.md b/src/docs/ja-JP/features/timelines.md
similarity index 100%
rename from src/docs/ja-JP/timelines.md
rename to src/docs/ja-JP/features/timelines.md
diff --git a/src/docs/ja-JP/general/misskey.md b/src/docs/ja-JP/general/misskey.md
new file mode 100644
index 0000000000..13ef1609d8
--- /dev/null
+++ b/src/docs/ja-JP/general/misskey.md
@@ -0,0 +1,43 @@
+# Misskeyについて
+
+Misskeyはオープンソースの分散型マイクロブログプラットフォームプロジェクトです。
+開発はsyuiloによって2014年から開始されました。
+
+## 分散型とは何か?
+分散(distributed)型とは、非中央集権(decentralized)とも呼ばれ、コミュニティが多数のサーバーに分散して存在し、それらが相互に通信することでコンテンツ共有ネットワークを形成していることが特徴のサービスです。
+単一のサーバーしか存在しない、もしくは複数存在しても互いに独立している場合は中央集権なサービスと言われ、例えばTwitterやFacebookなどほとんどのサービスがそれに該当します。
+
+## 常にオープンソース
+Misskeyはこれまでもこれからも、オープンソースであり続けます。オープンソースとは、ソフトウェアのソースコード(プログラム)が公開されていることです。ソースコードの修正や再配布が可能であることを定義に含めることもあります。
+Misskeyのすべてのソースコードは公開されていて、誰でも自由に閲覧、使用、修正、改変、再配布をすることができます。
+オープンソースは、自分で好きなように変えたり、有害な処理が含まれていないことを確認することができたり、誰でも開発に参加できるなどの、様々なメリットがあります。
+上述の分散型を実現するためにも、オープンソースであるということは必要不可欠な要素です。
+再び引き合いに出しますが、TwitterやFacebookなどの利益を得ているほとんどのサービスはオープンソースではありません。
+
+Misskeyのソースコードは、[GitHub上で公開されています。](https://github.com/misskey-dev)
+
+## 開発に参加する、開発を支援する
+Misskeyの開発に貢献するにはいろいろな方法があります。
+
+### 機能を追加したり、バグを修正する
+ソフトウェアエンジニアのスキルをお持ちの方であれば、ソースコードを編集する形でプロジェクトに貢献することができます。
+
+### 議論に参加する
+新しい機能、または既存の機能について意見を述べたり、不具合を報告したりすることでも貢献できます。
+そのようなディスカッションは[GitHub](https://github.com/misskey-dev)上か、[フォーラム](https://forum.misskey.io/)等で行われます。
+
+### テキストを翻訳する
+Misskeyは様々な言語に対応しています(i18n -internationalizationの略- と呼ばれます)。元の言語は基本的に日本語ですが、有志によって他の言語へと翻訳されています。
+その翻訳作業に加わっていただくことでもMisskeyに貢献できます。
+Misskeyは[Crowdinというサービスを使用して翻訳の管理を行っています。](https://crowdin.com/project/misskey)
+
+### 感想を投稿する
+不具合報告等だけではなく、Misskeyの良い点、楽しい点といったポジティブな意見もぜひ共有してください。開発の励みになり、それは間接的ですがプロジェクトへの貢献です。
+
+### 寄付をする
+Misskeyはビジネスではなく、利用は無料であるため、収益は皆様からの寄付のみです。(インスタンスによっては広告収入を得ているような場合もありますが、それは運営者の収入であり開発者への収入にはなりません)
+寄付をしていただければ、今後も開発を続けることが可能になり、プロジェクトへの貢献になります。
+寄付は[Patreon](https://www.patreon.com/syuilo)で受け付けています。
+
+## クレジット
+Misskeyの開発者や、Misskeyに寄付をしてくださった方の一覧は[こちら](/about-misskey)で見ることができます。
diff --git a/src/server/web/index.ts b/src/server/web/index.ts
index 50fea757f2..a732e7f5b4 100644
--- a/src/server/web/index.ts
+++ b/src/server/web/index.ts
@@ -121,14 +121,22 @@ router.get('/api.json', async ctx => {
 
 router.get('/docs.json', async ctx => {
 	const lang = ctx.query.lang;
+	const query = ctx.query.q;
 	if (!Object.keys(locales).includes(lang)) {
 		ctx.body = [];
 		return;
 	}
-	const paths = glob.sync(__dirname + `/../../../src/docs/${lang}/*.md`);
-	const docs: { path: string; title: string; }[] = [];
+	const dirPath = `${__dirname}/../../../src/docs/${lang}`.replace(/\\/g, '/');
+	const paths = glob.sync(`${dirPath}/**/*.md`);
+	const docs: { path: string; title: string; summary: string; }[] = [];
 	for (const path of paths) {
 		const md = fs.readFileSync(path, { encoding: 'utf8' });
+
+		if (query && query.length > 0) {
+			// TODO: カタカナをひらがなにして比較するなどしたい
+			if (!md.includes(query)) continue;
+		}
+
 		const parsed = markdown.parse(md, {});
 		if (parsed.length === 0) return;
 
@@ -147,9 +155,22 @@ router.get('/docs.json', async ctx => {
 			}
 		}
 
+		const firstParagrapfTokens = [];
+		while (buf[0].type !== 'paragraph_open') {
+			buf.shift();
+		}
+		buf.shift();
+		while (buf[0].type as string !== 'paragraph_close') {
+			const token = buf.shift();
+			if (token) {
+				firstParagrapfTokens.push(token);
+			}
+		}
+
 		docs.push({
-			path: path.split('/').pop()!.split('.')[0],
-			title: markdown.renderer.render(headingTokens, {}, {})
+			path: path.replace(`${dirPath}/`, '').split('.')[0],
+			title: markdown.renderer.render(headingTokens, {}, {}),
+			summary: markdown.renderer.render(firstParagrapfTokens, {}, {}),
 		});
 	}
 
-- 
GitLab


From f261f8d7d19b0396c3dbee6e9594132058a1e4d7 Mon Sep 17 00:00:00 2001
From: syuilo <Syuilotan@yahoo.co.jp>
Date: Thu, 5 Aug 2021 10:45:19 +0900
Subject: [PATCH 09/70] Update misskey.md

---
 src/docs/ja-JP/general/misskey.md | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/src/docs/ja-JP/general/misskey.md b/src/docs/ja-JP/general/misskey.md
index 13ef1609d8..2fba2450a3 100644
--- a/src/docs/ja-JP/general/misskey.md
+++ b/src/docs/ja-JP/general/misskey.md
@@ -1,11 +1,13 @@
 # Misskeyについて
 
 Misskeyはオープンソースの分散型マイクロブログプラットフォームプロジェクトです。
-開発はsyuiloによって2014年から開始されました。
+開発は日本でsyuiloによって2014年から開始されました。
+ドライブ、リアクションなどの豊富な機能や、高いカスタマイズ性を備えたUIを持つことが特徴です。
 
 ## 分散型とは何か?
-分散(distributed)型とは、非中央集権(decentralized)とも呼ばれ、コミュニティが多数のサーバーに分散して存在し、それらが相互に通信することでコンテンツ共有ネットワークを形成していることが特徴のサービスです。
+分散(distributed)型とは、非中央集権(decentralized)とも呼ばれ、コミュニティが多数のサーバーに分散して存在し、それらが相互に通信(連合、federation)することでコンテンツ共有ネットワーク(Fediverse)を形成していることが特徴のサービスです。
 単一のサーバーしか存在しない、もしくは複数存在しても互いに独立している場合は中央集権なサービスと言われ、例えばTwitterやFacebookなどほとんどのサービスがそれに該当します。
+分散型のメリットは、自分に合った運営者やテーマのサーバーを選択できることです。自分でサーバーを作成することもできます。連合するおかげで、どのサーバーを選んでも、同じコミュニティにアクセスできます。
 
 ## 常にオープンソース
 Misskeyはこれまでもこれからも、オープンソースであり続けます。オープンソースとは、ソフトウェアのソースコード(プログラム)が公開されていることです。ソースコードの修正や再配布が可能であることを定義に含めることもあります。
-- 
GitLab


From 4f218f544f2e607ca9392d230b2649fe4d23a4fb Mon Sep 17 00:00:00 2001
From: syuilo <Syuilotan@yahoo.co.jp>
Date: Thu, 5 Aug 2021 12:14:14 +0900
Subject: [PATCH 10/70] Update misskey.md

---
 src/docs/ja-JP/general/misskey.md | 22 +++++++++++++++++++++-
 1 file changed, 21 insertions(+), 1 deletion(-)

diff --git a/src/docs/ja-JP/general/misskey.md b/src/docs/ja-JP/general/misskey.md
index 2fba2450a3..4c1201b6ce 100644
--- a/src/docs/ja-JP/general/misskey.md
+++ b/src/docs/ja-JP/general/misskey.md
@@ -37,9 +37,29 @@ Misskeyは[Crowdinというサービスを使用して翻訳の管理を行っ
 不具合報告等だけではなく、Misskeyの良い点、楽しい点といったポジティブな意見もぜひ共有してください。開発の励みになり、それは間接的ですがプロジェクトへの貢献です。
 
 ### 寄付をする
-Misskeyはビジネスではなく、利用は無料であるため、収益は皆様からの寄付のみです。(インスタンスによっては広告収入を得ているような場合もありますが、それは運営者の収入であり開発者への収入にはなりません)
+Misskeyはビジネスではなく、利用は無料であるため、収益は皆様からの寄付のみです。(インスタンスによっては広告収入を得ているような場合もありますが、それは運営者の収入であり直接開発者への収入にはなりません)
 寄付をしていただければ、今後も開発を続けることが可能になり、プロジェクトへの貢献になります。
 寄付は[Patreon](https://www.patreon.com/syuilo)で受け付けています。
 
 ## クレジット
 Misskeyの開発者や、Misskeyに寄付をしてくださった方の一覧は[こちら](/about-misskey)で見ることができます。
+
+## よくある質問
+### 企業によって開発や運営がされていますか?
+いいえ。Misskeyの開発は個人で行われており、商業的でもないため、特定の企業の関りはありません。
+開発メンバーも基本的にはボランティアです。
+また、開発に対し企業のスポンサーがつくこともありますが、その場合でもやはり開発は個人のコミュニティが主体です。
+
+### iOS/Androidのアプリはありますか?
+公式にはそういったOSのネイティブアプリを開発していませんが、サードパーティ製のアプリがいくつかあります。
+ただ、サードパーティ製アプリはどうしても機能への対応が遅れてしまうため、とくに拘りがなければ公式のWebクライアントの利用をおすすめします。
+なお、MisskeyのWebクライアントはPWAに対応しているので、ネイティブアプリのように動作させることも可能です。
+詳しくは[こちら](todo)をご覧ください。
+
+### どのような技術を使用していますか?
+Misskeyは開発が進むにつれ使用する技術も大きく変わってきました。開発当初はMySQL + PHP + jQueryといった構成でしたが、現在は以下のようになっています。
+- サーバーサイド: Node.js
+- データベース: PostgreSQL、Redis
+- UIフレームワーク: Vue.js
+
+また、MFMやAiScriptなどの、Misskeyから派生して独自の技術も開発しています。
-- 
GitLab


From 80a4aa6fa69765799ceaa98bb8200e06ee1a9e05 Mon Sep 17 00:00:00 2001
From: syuilo <Syuilotan@yahoo.co.jp>
Date: Thu, 5 Aug 2021 12:20:21 +0900
Subject: [PATCH 11/70] Update misskey.md

---
 src/docs/ja-JP/general/misskey.md | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/src/docs/ja-JP/general/misskey.md b/src/docs/ja-JP/general/misskey.md
index 4c1201b6ce..2adf684c67 100644
--- a/src/docs/ja-JP/general/misskey.md
+++ b/src/docs/ja-JP/general/misskey.md
@@ -19,7 +19,7 @@ Misskeyのすべてのソースコードは公開されていて、誰でも自
 Misskeyのソースコードは、[GitHub上で公開されています。](https://github.com/misskey-dev)
 
 ## 開発に参加する、開発を支援する
-Misskeyの開発に貢献するにはいろいろな方法があります。
+Misskeyの開発に貢献するにはいろいろな方法があります。貢献に開発のスキルは不要です。
 
 ### 機能を追加したり、バグを修正する
 ソフトウェアエンジニアのスキルをお持ちの方であれば、ソースコードを編集する形でプロジェクトに貢献することができます。
@@ -61,5 +61,10 @@ Misskeyは開発が進むにつれ使用する技術も大きく変わってき
 - サーバーサイド: Node.js
 - データベース: PostgreSQL、Redis
 - UIフレームワーク: Vue.js
+- プログラミング言語: TypeScript
 
 また、MFMやAiScriptなどの、Misskeyから派生して独自の技術も開発しています。
+
+### サーバーを建てるにはどうしたらいいですか?
+Misskeyサーバーの作成に興味を持っていただきありがとうございます。
+サーバーの作成方法については[こちら](todo)をご覧ください。
-- 
GitLab


From 532fa9c5f9cb4c06420109fee7391494cdd73535 Mon Sep 17 00:00:00 2001
From: syuilo <Syuilotan@yahoo.co.jp>
Date: Thu, 5 Aug 2021 12:20:27 +0900
Subject: [PATCH 12/70] :art:

---
 src/client/pages/doc.vue | 161 ++++++++++++++++++++-------------------
 1 file changed, 83 insertions(+), 78 deletions(-)

diff --git a/src/client/pages/doc.vue b/src/client/pages/doc.vue
index 58b352d638..2e315887ac 100644
--- a/src/client/pages/doc.vue
+++ b/src/client/pages/doc.vue
@@ -1,9 +1,11 @@
 <template>
 <div class="qyqbqfal" v-size="{ max: [500] }">
-	<div class="title">{{ title }}</div>
-	<div class="body" v-html="body"></div>
-	<div class="footer">
-		<MkLink :url="`https://github.com/misskey-dev/misskey/blob/master/src/docs/${lang}/${doc}.md`" class="at">{{ $ts.docSource }}</MkLink>
+	<div class="main">
+		<div class="title">{{ title }}</div>
+		<div class="body" v-html="body"></div>
+		<div class="footer">
+			<MkLink :url="`https://github.com/misskey-dev/misskey/blob/master/src/docs/${lang}/${doc}.md`" class="at">{{ $ts.docSource }}</MkLink>
+		</div>
 	</div>
 </div>
 </template>
@@ -105,103 +107,106 @@ export default defineComponent({
 <style lang="scss" scoped>
 .qyqbqfal {
 	padding: 32px;
-	max-width: 800px;
-	margin: 0 auto;
 	background: var(--panel);
 
 	&.max-width_500px {
 		padding: 16px;
 	}
 
-	> .title {
-		font-size: 1.5em;
-		font-weight: bold;
-		padding: 0 0 0.75em 0;
-		margin: 0 0 1em 0;
-		border-bottom: solid 2px var(--divider);
-	}
+	> .main {
+		max-width: 800px;
+		margin: 0 auto;
 
-	> .body {
-		> *:first-child {
-			margin-top: 0;
+		> .title {
+			font-size: 1.5em;
+			font-weight: bold;
+			padding: 0 0 0.75em 0;
+			margin: 0 0 1em 0;
+			border-bottom: solid 2px var(--divider);
 		}
 
-		> *:last-child {
-			margin-bottom: 0;
-		}
+		> .body {
+			> *:first-child {
+				margin-top: 0;
+			}
 
-		::v-deep(a) {
-			color: var(--link);
-		}
+			> *:last-child {
+				margin-bottom: 0;
+			}
 
-		::v-deep(blockquote) {
-			display: block;
-			margin: 8px;
-			padding: 6px 0 6px 12px;
-			color: var(--fg);
-			border-left: solid 3px var(--fg);
-			opacity: 0.7;
+			::v-deep(a) {
+				color: var(--link);
+			}
 
-			p {
-				margin: 0;
+			::v-deep(blockquote) {
+				display: block;
+				margin: 8px;
+				padding: 6px 0 6px 12px;
+				color: var(--fg);
+				border-left: solid 3px var(--fg);
+				opacity: 0.7;
+
+				p {
+					margin: 0;
+				}
 			}
-		}
 
-		::v-deep(h2) {
-			font-size: 1.25em;
-			padding: 0 0 0.5em 0;
-			margin: 1.5em 0 1em 0;
-			border-bottom: solid 0.5px var(--divider);
-		}
+			::v-deep(h2) {
+				font-size: 1.25em;
+				padding: 0 0 0.5em 0;
+				margin: 1.5em 0 1em 0;
+				border-bottom: solid 0.5px var(--divider);
+			}
 
-		::v-deep(table) {
-			width: 100%;
-			max-width: 100%;
-			overflow: auto;
-		}
+			::v-deep(table) {
+				width: 100%;
+				max-width: 100%;
+				overflow: auto;
+			}
 
-		::v-deep(kbd.group) {
-			display: inline-block;
-			padding: 2px;
-			border: 1px solid var(--divider);
-			border-radius: 4px;
-			box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1);
-		}
+			::v-deep(kbd.group) {
+				display: inline-block;
+				padding: 2px;
+				border: 1px solid var(--divider);
+				border-radius: 4px;
+				box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1);
+			}
 
-		::v-deep(kbd.key) {
-			display: inline-block;
-			padding: 6px 8px;
-			border: solid 0.5px var(--divider);
-			border-radius: 4px;
-			box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1);
-		}
+			::v-deep(kbd.key) {
+				display: inline-block;
+				padding: 6px 8px;
+				border: solid 0.5px var(--divider);
+				border-radius: 4px;
+				box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1);
+			}
 
-		::v-deep(code) {
-			display: inline-block;
-			font-family: Fira code, Fira Mono, Consolas, Menlo, Courier, monospace;
-			tab-size: 2;
-			background: #272822;
-			color: #f8f8f2;
-			border-radius: 6px;
-			padding: 4px 6px;
-		}
+			::v-deep(code) {
+				display: inline-block;
+				font-family: Fira code, Fira Mono, Consolas, Menlo, Courier, monospace;
+				tab-size: 2;
+				background: #272822;
+				color: #f8f8f2;
+				border-radius: 6px;
+				padding: 4px 6px;
+			}
 
-		::v-deep(pre) {
-			background: #272822;
-			color: #f8f8f2;
-			border-radius: 6px;
-			padding: 12px 16px;
+			::v-deep(pre) {
+				background: #272822;
+				color: #f8f8f2;
+				border-radius: 6px;
+				padding: 12px 16px;
 
-			> code {
-				padding: 0;
+				> code {
+					padding: 0;
+				}
 			}
 		}
-	}
 
-	> .footer {
-		padding: 1.5em 0 0 0;
-		margin: 1.5em 0 0 0;
-		border-top: solid 2px var(--divider);
+		> .footer {
+			padding: 1.5em 0 0 0;
+			margin: 1.5em 0 0 0;
+			border-top: solid 2px var(--divider);
+		}
 	}
 }
 </style>
-- 
GitLab


From bb5fd3c1f229f145bf3a824ee210e2144fa08403 Mon Sep 17 00:00:00 2001
From: syuilo <Syuilotan@yahoo.co.jp>
Date: Thu, 5 Aug 2021 13:02:44 +0900
Subject: [PATCH 13/70] Update misskey.md

---
 src/docs/ja-JP/general/misskey.md | 17 ++++++++++++-----
 1 file changed, 12 insertions(+), 5 deletions(-)

diff --git a/src/docs/ja-JP/general/misskey.md b/src/docs/ja-JP/general/misskey.md
index 2adf684c67..677c188eb9 100644
--- a/src/docs/ja-JP/general/misskey.md
+++ b/src/docs/ja-JP/general/misskey.md
@@ -4,22 +4,29 @@ Misskeyはオープンソースの分散型マイクロブログプラットフ
 開発は日本でsyuiloによって2014年から開始されました。
 ドライブ、リアクションなどの豊富な機能や、高いカスタマイズ性を備えたUIを持つことが特徴です。
 
+## 歴史
+開発当初は掲示板がメインのサービスでしたが、ユーザーが短文を投稿し、それを時系列で流れるタイムライン機能を追加したところ人気が高まり、徐々にそれがメインとして開発が進むようになりました。
+当初は分散型ではありませんでしたが、2018年にAcitivityPubを実装し分散型になったことで、より多くの方に認知され利用されるサービスになり、現在に至ります。
+Misskeyという名前は、syuiloが当時聴いていたMay'nというアーティストの楽曲、Brain Diverの歌詞に由来します。
+
+誰でも開発に参加することができ、現在でも活発に開発が続いています。
+
 ## 分散型とは何か?
-分散(distributed)型とは、非中央集権(decentralized)とも呼ばれ、コミュニティが多数のサーバーに分散して存在し、それらが相互に通信(連合、federation)することでコンテンツ共有ネットワーク(Fediverse)を形成していることが特徴のサービスです。
+<b>分散(distributed)型</b>とは、<b>非中央集権(decentralized)</b>とも呼ばれ、コミュニティが多数のサーバーに分散して存在し、それらが相互に<b>通信(連合、federation)</b>することでコンテンツ共有<b>ネットワーク(Fediverse)</b>を形成していることが特徴のサービスです。
 単一のサーバーしか存在しない、もしくは複数存在しても互いに独立している場合は中央集権なサービスと言われ、例えばTwitterやFacebookなどほとんどのサービスがそれに該当します。
 分散型のメリットは、自分に合った運営者やテーマのサーバーを選択できることです。自分でサーバーを作成することもできます。連合するおかげで、どのサーバーを選んでも、同じコミュニティにアクセスできます。
 
 ## 常にオープンソース
-Misskeyはこれまでもこれからも、オープンソースであり続けます。オープンソースとは、ソフトウェアのソースコード(プログラム)が公開されていることです。ソースコードの修正や再配布が可能であることを定義に含めることもあります。
-Misskeyのすべてのソースコードは公開されていて、誰でも自由に閲覧、使用、修正、改変、再配布をすることができます。
+Misskeyはこれまでもこれからも、オープンソースであり続けます。オープンソースとは、簡単に言うと<b>ソフトウェアのソースコード(プログラム)が公開されている</b>ことです。ソースコードの修正や再配布が可能であることを定義に含めることもあります。
+Misskeyのすべてのソースコードは[AGPL](https://github.com/misskey-dev/misskey/blob/develop/LICENSE)というオープンソースライセンスの下に[公開]((https://github.com/misskey-dev))されていて、誰でも自由に閲覧、使用、修正、改変、再配布をすることができます。
 オープンソースは、自分で好きなように変えたり、有害な処理が含まれていないことを確認することができたり、誰でも開発に参加できるなどの、様々なメリットがあります。
 上述の分散型を実現するためにも、オープンソースであるということは必要不可欠な要素です。
 再び引き合いに出しますが、TwitterやFacebookなどの利益を得ているほとんどのサービスはオープンソースではありません。
 
-Misskeyのソースコードは、[GitHub上で公開されています。](https://github.com/misskey-dev)
+技術的に言うと、MisskeyのソースコードはGitで管理されていて、リポジトリは[GitHub上でホスティングされています。](https://github.com/misskey-dev)
 
 ## 開発に参加する、開発を支援する
-Misskeyの開発に貢献するにはいろいろな方法があります。貢献に開発のスキルは不要です。
+Misskeyの開発に貢献するにはいろいろな方法があります。方法によっては開発のスキルは不要なので、誰でも気軽に参加し貢献することができます。
 
 ### 機能を追加したり、バグを修正する
 ソフトウェアエンジニアのスキルをお持ちの方であれば、ソースコードを編集する形でプロジェクトに貢献することができます。
-- 
GitLab


From ae0596a729cdbe35b0fb07cd54802066b899328c Mon Sep 17 00:00:00 2001
From: syuilo <Syuilotan@yahoo.co.jp>
Date: Thu, 5 Aug 2021 13:43:57 +0900
Subject: [PATCH 14/70] improve docs

---
 src/docs/ja-JP/general/apps.md            |  6 ++++++
 src/docs/ja-JP/general/faq.md             |  6 ++++++
 src/docs/ja-JP/general/glossary.md        | 18 ++++++++++++++++++
 src/docs/ja-JP/general/links.md           |  2 ++
 src/docs/ja-JP/general/misskey.md         | 10 +++++++++-
 src/docs/ja-JP/general/troubleshooting.md | 15 +++++++++++++++
 6 files changed, 56 insertions(+), 1 deletion(-)
 create mode 100644 src/docs/ja-JP/general/apps.md
 create mode 100644 src/docs/ja-JP/general/faq.md
 create mode 100644 src/docs/ja-JP/general/glossary.md
 create mode 100644 src/docs/ja-JP/general/links.md
 create mode 100644 src/docs/ja-JP/general/troubleshooting.md

diff --git a/src/docs/ja-JP/general/apps.md b/src/docs/ja-JP/general/apps.md
new file mode 100644
index 0000000000..1f4c85fe8f
--- /dev/null
+++ b/src/docs/ja-JP/general/apps.md
@@ -0,0 +1,6 @@
+# サードパーティアプリのリスト
+## クライアント
+todo
+
+## 連携サービス
+todo
diff --git a/src/docs/ja-JP/general/faq.md b/src/docs/ja-JP/general/faq.md
new file mode 100644
index 0000000000..ff38328daf
--- /dev/null
+++ b/src/docs/ja-JP/general/faq.md
@@ -0,0 +1,6 @@
+# よくある質問
+ここでは利用上のよくある質問について掲載しています。
+Misskeyのプロジェクト自体についてのよくある質問は[こちら](./misskey)に掲載されています。
+
+## 他のサーバーのユーザーをフォローするときは?
+メニューから検索を選び、ユーザー名をホスト込みで入力します。例: `@syuilo@misskey.io`
diff --git a/src/docs/ja-JP/general/glossary.md b/src/docs/ja-JP/general/glossary.md
new file mode 100644
index 0000000000..4978292da0
--- /dev/null
+++ b/src/docs/ja-JP/general/glossary.md
@@ -0,0 +1,18 @@
+# 用語集
+## 藍
+(読み: あい)
+Misskeyの看板娘(公式キャラクター)です。
+
+## AiScript
+(読み: あいすくりぷと)
+Misskey上で使用できるプログラミング言語です。詳細は[こちら。](../advanced/aiscript)
+
+## インスタンス
+todo
+
+## MFM
+(読み: えむえふえむ)
+Misskey Flavored Markdownの略で、Misskey上で使用できるマークアップ言語です。詳細は[こちら。](../features/mfm)
+
+## サーバー
+todo
diff --git a/src/docs/ja-JP/general/links.md b/src/docs/ja-JP/general/links.md
new file mode 100644
index 0000000000..9541a6255b
--- /dev/null
+++ b/src/docs/ja-JP/general/links.md
@@ -0,0 +1,2 @@
+# リンク集
+todo
diff --git a/src/docs/ja-JP/general/misskey.md b/src/docs/ja-JP/general/misskey.md
index 677c188eb9..37c802a26b 100644
--- a/src/docs/ja-JP/general/misskey.md
+++ b/src/docs/ja-JP/general/misskey.md
@@ -52,13 +52,20 @@ Misskeyはビジネスではなく、利用は無料であるため、収益は
 Misskeyの開発者や、Misskeyに寄付をしてくださった方の一覧は[こちら](/about-misskey)で見ることができます。
 
 ## よくある質問
-### 企業によって開発や運営がされていますか?
+### 企業によって開発されていますか?
 いいえ。Misskeyの開発は個人で行われており、商業的でもないため、特定の企業の関りはありません。
 開発メンバーも基本的にはボランティアです。
 また、開発に対し企業のスポンサーがつくこともありますが、その場合でもやはり開発は個人のコミュニティが主体です。
 
+### 誰が運営していますか?
+Misskeyは分散型なため、各サーバーにそれぞれ異なった運営者がいます。従って、特定の個人や企業によって、Misskeyの全てが運営されているわけではありません。
+また、開発チームが運営を行うわけでもないため、運営に関する連絡は、お使いのサーバーの運営者に行ってください。
+サーバーの運営者は、[このページ](/about)で確認することができます。
+
 ### iOS/Androidのアプリはありますか?
 公式にはそういったOSのネイティブアプリを開発していませんが、サードパーティ製のアプリがいくつかあります。
+詳しくは[こちら](./apps)をご覧ください。
+
 ただ、サードパーティ製アプリはどうしても機能への対応が遅れてしまうため、とくに拘りがなければ公式のWebクライアントの利用をおすすめします。
 なお、MisskeyのWebクライアントはPWAに対応しているので、ネイティブアプリのように動作させることも可能です。
 詳しくは[こちら](todo)をご覧ください。
@@ -74,4 +81,5 @@ Misskeyは開発が進むにつれ使用する技術も大きく変わってき
 
 ### サーバーを建てるにはどうしたらいいですか?
 Misskeyサーバーの作成に興味を持っていただきありがとうございます。
+2021年現在、Misskeyのホスティングサービスは存在しないため、サーバーの作成にはある程度の知識が必要です。
 サーバーの作成方法については[こちら](todo)をご覧ください。
diff --git a/src/docs/ja-JP/general/troubleshooting.md b/src/docs/ja-JP/general/troubleshooting.md
new file mode 100644
index 0000000000..c8a7b9e96f
--- /dev/null
+++ b/src/docs/ja-JP/general/troubleshooting.md
@@ -0,0 +1,15 @@
+# トラブルシューティング
+問題が発生したときは、まずこちらをご確認ください。
+
+## クライアントが起動しない
+ほとんどの場合、お使いのブラウザまたはOSのバージョンが古いことが原因です。
+ブラウザおよびOSのバージョンを最新のものに更新してから、再度試してみてください。
+
+これは稀ですが、それでも起動しない場合は、キャッシュが原因の場合があります。ブラウザのキャッシュをクリアして、再度試してみてください。
+
+## 通知やアンテナ等の点滅が消えない
+点滅は、未読のコンテンツがあることを示しています。通常点滅が消えない場合は、コンテンツを遡ると未読なコンテンツが残っています。
+すべて既読にしたと思われるのに、それでもなお点滅が続く場合(おそらく不具合と思われます)は設定から強制的にすべて既読扱いにすることができます。
+
+## Renoteができない
+フォロワー限定のノートはRenoteすることはできません。
-- 
GitLab


From 645b6fdc8ad8d9800ac120c0c7d3301df338d34a Mon Sep 17 00:00:00 2001
From: syuilo <Syuilotan@yahoo.co.jp>
Date: Thu, 5 Aug 2021 13:58:44 +0900
Subject: [PATCH 15/70] Improve docs

---
 src/docs/ja-JP/advanced/develop-bot.md    | 5 +++++
 src/docs/ja-JP/general/faq.md             | 9 +++++++++
 src/docs/ja-JP/general/misskey.md         | 3 +++
 src/docs/ja-JP/general/troubleshooting.md | 3 +++
 4 files changed, 20 insertions(+)
 create mode 100644 src/docs/ja-JP/advanced/develop-bot.md

diff --git a/src/docs/ja-JP/advanced/develop-bot.md b/src/docs/ja-JP/advanced/develop-bot.md
new file mode 100644
index 0000000000..21c1f9d695
--- /dev/null
+++ b/src/docs/ja-JP/advanced/develop-bot.md
@@ -0,0 +1,5 @@
+# Botの作成
+[Misskey API](./api)を利用してBotの開発が可能です。
+また、いくつかのBot実装が公開されているため、ぜひ参考にしてください。
+
+- [syuilo/ai](https://github.com/syuilo/ai) ... Node.js上で動く、TypeScript製Bot実装
diff --git a/src/docs/ja-JP/general/faq.md b/src/docs/ja-JP/general/faq.md
index ff38328daf..d956039c12 100644
--- a/src/docs/ja-JP/general/faq.md
+++ b/src/docs/ja-JP/general/faq.md
@@ -4,3 +4,12 @@ Misskeyのプロジェクト自体についてのよくある質問は[こちら
 
 ## 他のサーバーのユーザーをフォローするときは?
 メニューから検索を選び、ユーザー名をホスト込みで入力します。例: `@syuilo@misskey.io`
+
+## URLのプレビューを表示させたくない
+MFMには、そのURLのプレビューを無効にする構文があります。詳細は[MFMチートシート](/mfm-cheat-sheet)をご確認ください。
+
+## カスタム絵文字を追加したい
+運営者のみがカスタム絵文字を追加、編集、削除できます。それらを希望する場合は運営者に依頼してください。
+
+## Botを開発したい
+Misskey APIを利用してBotの開発が可能です。[こちら](../advanced/develop-bot)をご確認ください。
diff --git a/src/docs/ja-JP/general/misskey.md b/src/docs/ja-JP/general/misskey.md
index 37c802a26b..4636a3626a 100644
--- a/src/docs/ja-JP/general/misskey.md
+++ b/src/docs/ja-JP/general/misskey.md
@@ -83,3 +83,6 @@ Misskeyは開発が進むにつれ使用する技術も大きく変わってき
 Misskeyサーバーの作成に興味を持っていただきありがとうございます。
 2021年現在、Misskeyのホスティングサービスは存在しないため、サーバーの作成にはある程度の知識が必要です。
 サーバーの作成方法については[こちら](todo)をご覧ください。
+
+### Misskeyのロゴ、アイコンはどこで入手できますか?
+(準備中)
diff --git a/src/docs/ja-JP/general/troubleshooting.md b/src/docs/ja-JP/general/troubleshooting.md
index c8a7b9e96f..d3b53d5482 100644
--- a/src/docs/ja-JP/general/troubleshooting.md
+++ b/src/docs/ja-JP/general/troubleshooting.md
@@ -13,3 +13,6 @@
 
 ## Renoteができない
 フォロワー限定のノートはRenoteすることはできません。
+
+## UI上で特定の要素が表示されない
+広告ブロッカーを使用しているとそのような不具合が発生することがあります。Misskeyではオフにしてご利用ください。
-- 
GitLab


From 1186813c7579373ca6f8c6be322bd3ea7decaf10 Mon Sep 17 00:00:00 2001
From: syuilo <Syuilotan@yahoo.co.jp>
Date: Thu, 5 Aug 2021 15:08:10 +0900
Subject: [PATCH 16/70] Update glossary.md

---
 src/docs/ja-JP/general/glossary.md | 22 ++++++++++++++++++++++
 1 file changed, 22 insertions(+)

diff --git a/src/docs/ja-JP/general/glossary.md b/src/docs/ja-JP/general/glossary.md
index 4978292da0..196038e91d 100644
--- a/src/docs/ja-JP/general/glossary.md
+++ b/src/docs/ja-JP/general/glossary.md
@@ -16,3 +16,25 @@ Misskey Flavored Markdownの略で、Misskey上で使用できるマークアッ
 
 ## サーバー
 todo
+
+## サイレンス
+ノートをパブリックな公開範囲で投稿できなくされている状態。モデレーターの判断でユーザーごとに設定されます。
+
+## 凍結
+アカウントが使用不可に設定されている状態。
+
+## ドライブ
+Misskeyにアップロードしたファイルを管理する機能。詳細は[こちら。](../features/drive)
+
+## ノート
+Misskeyに投稿される、文章、ファイル、アンケートなどを含めることができるコンテンツ。
+
+## モデレーター
+スパムの凍結およびサイレンスや不適切な投稿の削除など、コミュニティ運営に関する権限を持つユーザー。
+
+## Renote
+(読み: りのーと)
+既にあるノートを引用、もしくはそのノートを新しいノートとして共有する行為、またそれによって作成されたノート。
+
+## ローカル
+自サーバーのことを指します。ローカルユーザー、ローカルタイムラインといったように接頭辞としても使われます。
-- 
GitLab


From 3df8c701a786d08c5407199a972b3ce9b4cb8fef Mon Sep 17 00:00:00 2001
From: syuilo <Syuilotan@yahoo.co.jp>
Date: Thu, 5 Aug 2021 15:19:55 +0900
Subject: [PATCH 17/70] Improve docs

---
 src/docs/ja-JP/advanced/develop-bot.md |  2 ++
 src/docs/ja-JP/general/glossary.md     | 15 +++++++++++++++
 src/docs/ja-JP/general/misskey.md      |  6 ++++++
 3 files changed, 23 insertions(+)

diff --git a/src/docs/ja-JP/advanced/develop-bot.md b/src/docs/ja-JP/advanced/develop-bot.md
index 21c1f9d695..2e246b7bfa 100644
--- a/src/docs/ja-JP/advanced/develop-bot.md
+++ b/src/docs/ja-JP/advanced/develop-bot.md
@@ -3,3 +3,5 @@
 また、いくつかのBot実装が公開されているため、ぜひ参考にしてください。
 
 - [syuilo/ai](https://github.com/syuilo/ai) ... Node.js上で動く、TypeScript製Bot実装
+
+Botを作成したときは、プロフィール設定からBotフラグをオンにしておくことを強くおすすめします。
diff --git a/src/docs/ja-JP/general/glossary.md b/src/docs/ja-JP/general/glossary.md
index 196038e91d..3c308d0818 100644
--- a/src/docs/ja-JP/general/glossary.md
+++ b/src/docs/ja-JP/general/glossary.md
@@ -7,6 +7,10 @@ Misskeyの看板娘(公式キャラクター)です。
 (読み: あいすくりぷと)
 Misskey上で使用できるプログラミング言語です。詳細は[こちら。](../advanced/aiscript)
 
+## AcitivityPub
+(読み: あくてぃびてぃぱぶ)
+分散型を実現するために用いられるプロトコル(仕様)。このプロトコルに則ってサーバー同士通信を行うことで、連合が行われ、Fediverseを形成しています。
+
 ## インスタンス
 todo
 
@@ -29,6 +33,14 @@ Misskeyにアップロードしたファイルを管理する機能。詳細は[
 ## ノート
 Misskeyに投稿される、文章、ファイル、アンケートなどを含めることができるコンテンツ。
 
+## Fediverse
+(読み: ふぇでぃばーす)
+Misskeyを含む様々な分散型ソフトウェアのサーバーで構成されたネットワーク。
+
+## Bot
+(読み: ぼっと)
+プログラムによって動作しているアカウント。
+
 ## モデレーター
 スパムの凍結およびサイレンスや不適切な投稿の削除など、コミュニティ運営に関する権限を持つユーザー。
 
@@ -36,5 +48,8 @@ Misskeyに投稿される、文章、ファイル、アンケートなどを含
 (読み: りのーと)
 既にあるノートを引用、もしくはそのノートを新しいノートとして共有する行為、またそれによって作成されたノート。
 
+## 連合
+サーバー上で作成された情報が他のサーバーに伝わること。
+
 ## ローカル
 自サーバーのことを指します。ローカルユーザー、ローカルタイムラインといったように接頭辞としても使われます。
diff --git a/src/docs/ja-JP/general/misskey.md b/src/docs/ja-JP/general/misskey.md
index 4636a3626a..35ae53c612 100644
--- a/src/docs/ja-JP/general/misskey.md
+++ b/src/docs/ja-JP/general/misskey.md
@@ -61,6 +61,7 @@ Misskeyの開発者や、Misskeyに寄付をしてくださった方の一覧は
 Misskeyは分散型なため、各サーバーにそれぞれ異なった運営者がいます。従って、特定の個人や企業によって、Misskeyの全てが運営されているわけではありません。
 また、開発チームが運営を行うわけでもないため、運営に関する連絡は、お使いのサーバーの運営者に行ってください。
 サーバーの運営者は、[このページ](/about)で確認することができます。
+あなたがサーバーを作成すれば、あなたが運営者になります。
 
 ### iOS/Androidのアプリはありますか?
 公式にはそういったOSのネイティブアプリを開発していませんが、サードパーティ製のアプリがいくつかあります。
@@ -84,5 +85,10 @@ Misskeyサーバーの作成に興味を持っていただきありがとうご
 2021年現在、Misskeyのホスティングサービスは存在しないため、サーバーの作成にはある程度の知識が必要です。
 サーバーの作成方法については[こちら](todo)をご覧ください。
 
+### Mastodonのフォークですか?
+いいえ。MisskeyはMastodonやその他のプロジェクトとは全く別のプロジェクトです。
+開発に関しても、Misskeyの方が昔から開発されています。ただし、分散型になったのはMastodonの登場より後です。
+同じAcitivityPubという分散のためのプロトコルを実装しているという点以外、両者に特に関りがあるわけでもありません。
+
 ### Misskeyのロゴ、アイコンはどこで入手できますか?
 (準備中)
-- 
GitLab


From e219188f467ad3b4bdf03d593df6e4da24a82704 Mon Sep 17 00:00:00 2001
From: syuilo <Syuilotan@yahoo.co.jp>
Date: Thu, 5 Aug 2021 15:38:20 +0900
Subject: [PATCH 18/70] Update misskey.md

---
 src/docs/ja-JP/general/misskey.md | 16 +++++++++++-----
 1 file changed, 11 insertions(+), 5 deletions(-)

diff --git a/src/docs/ja-JP/general/misskey.md b/src/docs/ja-JP/general/misskey.md
index 35ae53c612..d771165d8d 100644
--- a/src/docs/ja-JP/general/misskey.md
+++ b/src/docs/ja-JP/general/misskey.md
@@ -71,6 +71,17 @@ Misskeyは分散型なため、各サーバーにそれぞれ異なった運営
 なお、MisskeyのWebクライアントはPWAに対応しているので、ネイティブアプリのように動作させることも可能です。
 詳しくは[こちら](todo)をご覧ください。
 
+### どのサーバーを選べばいいですか?
+[サーバー一覧が公開されています。](https://join.misskey.page/ja-JP/instances)
+サーバーによってコミュニティのテーマ(特定のこと、ものが好き 等)が決められている場合があるので、自分に合ったテーマのサーバーがあれば、そこを選ぶと良いかもしれません。
+他にも、サーバーの規模、ユーザー層、国および言語、運営者が信頼できるかどうか、などの観点があります。
+なお、Misskey公式のサーバーというものはありません。自身で新しくサーバーを作成するという選択肢もあります。
+
+### サーバーを建てるにはどうしたらいいですか?
+Misskeyサーバーの作成に興味を持っていただきありがとうございます。
+2021年現在、Misskeyのホスティングサービスは存在しないため、サーバーの作成にはある程度の知識が必要です。
+サーバーの作成方法については[こちら](todo)をご覧ください。
+
 ### どのような技術を使用していますか?
 Misskeyは開発が進むにつれ使用する技術も大きく変わってきました。開発当初はMySQL + PHP + jQueryといった構成でしたが、現在は以下のようになっています。
 - サーバーサイド: Node.js
@@ -80,11 +91,6 @@ Misskeyは開発が進むにつれ使用する技術も大きく変わってき
 
 また、MFMやAiScriptなどの、Misskeyから派生して独自の技術も開発しています。
 
-### サーバーを建てるにはどうしたらいいですか?
-Misskeyサーバーの作成に興味を持っていただきありがとうございます。
-2021年現在、Misskeyのホスティングサービスは存在しないため、サーバーの作成にはある程度の知識が必要です。
-サーバーの作成方法については[こちら](todo)をご覧ください。
-
 ### Mastodonのフォークですか?
 いいえ。MisskeyはMastodonやその他のプロジェクトとは全く別のプロジェクトです。
 開発に関しても、Misskeyの方が昔から開発されています。ただし、分散型になったのはMastodonの登場より後です。
-- 
GitLab


From eac7f11aa7932636226419c212b63b84eec12bbf Mon Sep 17 00:00:00 2001
From: syuilo <Syuilotan@yahoo.co.jp>
Date: Thu, 5 Aug 2021 15:48:12 +0900
Subject: [PATCH 19/70] Update glossary.md

---
 src/docs/ja-JP/general/glossary.md | 49 ++++++++++++++++++------------
 1 file changed, 30 insertions(+), 19 deletions(-)

diff --git a/src/docs/ja-JP/general/glossary.md b/src/docs/ja-JP/general/glossary.md
index 3c308d0818..60de2123f9 100644
--- a/src/docs/ja-JP/general/glossary.md
+++ b/src/docs/ja-JP/general/glossary.md
@@ -1,23 +1,45 @@
 # 用語集
-## 藍
-(読み: あい)
-Misskeyの看板娘(公式キャラクター)です。
+Misskeyに関する用語集です。
+
+## AcitivityPub
+(読み: あくてぃびてぃぱぶ)
+分散型を実現するために用いられるプロトコル(仕様)。このプロトコルに則ってサーバー同士通信を行うことで、連合が行われ、Fediverseを形成しています。
 
 ## AiScript
 (読み: あいすくりぷと)
 Misskey上で使用できるプログラミング言語です。詳細は[こちら。](../advanced/aiscript)
 
-## AcitivityPub
-(読み: あくてぃびてぃぱぶ)
-分散型を実現するために用いられるプロトコル(仕様)。このプロトコルに則ってサーバー同士通信を行うことで、連合が行われ、Fediverseを形成しています。
+## Bot
+(読み: ぼっと)
+プログラムによって動作しているアカウント。
 
-## インスタンス
-todo
+## CW
+(読み: こんてんつわーにんぐ)
+Contents Warningの略。ノートの内容を、操作なしには表示しないようにできる機能。主に長大な内容を隠すためや、ネタバレ防止などに使われます。
+
+## Fediverse
+(読み: ふぇでぃばーす)
+Misskeyを含む様々な分散型ソフトウェアのサーバーで構成されたネットワーク。
 
 ## MFM
 (読み: えむえふえむ)
 Misskey Flavored Markdownの略で、Misskey上で使用できるマークアップ言語です。詳細は[こちら。](../features/mfm)
 
+## NSFW
+(読み: のっとせーふふぉーわーく)
+Not Safe For Workの略。画像を「閲覧注意」扱いにし、操作なしには表示しないようにすることができる機能。
+
+## Renote
+(読み: りのーと)
+既にあるノートを引用、もしくはそのノートを新しいノートとして共有する行為、またそれによって作成されたノート。
+
+## 藍
+(読み: あい)
+Misskeyの看板娘(公式キャラクター)です。
+
+## インスタンス
+todo
+
 ## サーバー
 todo
 
@@ -33,21 +55,10 @@ Misskeyにアップロードしたファイルを管理する機能。詳細は[
 ## ノート
 Misskeyに投稿される、文章、ファイル、アンケートなどを含めることができるコンテンツ。
 
-## Fediverse
-(読み: ふぇでぃばーす)
-Misskeyを含む様々な分散型ソフトウェアのサーバーで構成されたネットワーク。
-
-## Bot
-(読み: ぼっと)
-プログラムによって動作しているアカウント。
 
 ## モデレーター
 スパムの凍結およびサイレンスや不適切な投稿の削除など、コミュニティ運営に関する権限を持つユーザー。
 
-## Renote
-(読み: りのーと)
-既にあるノートを引用、もしくはそのノートを新しいノートとして共有する行為、またそれによって作成されたノート。
-
 ## 連合
 サーバー上で作成された情報が他のサーバーに伝わること。
 
-- 
GitLab


From 46f53868c5804f6991427636a7568344ff8e3970 Mon Sep 17 00:00:00 2001
From: syuilo <Syuilotan@yahoo.co.jp>
Date: Thu, 5 Aug 2021 16:04:31 +0900
Subject: [PATCH 20/70] Improve docs

---
 src/client/pages/doc.vue           | 4 ++++
 src/client/pages/docs.vue          | 9 +++++++--
 src/docs/ja-JP/general/glossary.md | 4 ++++
 3 files changed, 15 insertions(+), 2 deletions(-)

diff --git a/src/client/pages/doc.vue b/src/client/pages/doc.vue
index 2e315887ac..00a3530523 100644
--- a/src/client/pages/doc.vue
+++ b/src/client/pages/doc.vue
@@ -64,6 +64,10 @@ export default defineComponent({
 		fetchDoc() {
 			fetch(`${url}/doc-assets/${lang}/${this.doc}.md`).then(res => res.text()).then(md => {
 				this.parse(md);
+			}).catch(() => {
+				fetch(`${url}/doc-assets/ja-JP/${this.doc}.md`).then(res => res.text()).then(md => {
+					this.parse(md);
+				});
 			});
 		},
 
diff --git a/src/client/pages/docs.vue b/src/client/pages/docs.vue
index e677fe0cbe..a419bf5f92 100644
--- a/src/client/pages/docs.vue
+++ b/src/client/pages/docs.vue
@@ -69,8 +69,13 @@ export default defineComponent({
 	},
 
 	created() {
-		fetch(`${url}/docs.json?lang=${lang}`).then(res => res.json()).then(docs => {
-			this.docs = docs;
+		fetch(`${url}/docs.json?lang=ja-JP`).then(res => res.json()).then(jaDocs => {
+			fetch(`${url}/docs.json?lang=${lang}`).then(res => res.json()).then(docs => {
+				this.docs = jaDocs.map(doc => {
+					const exist = docs.find(d => d.path === doc.path);
+					return exist || doc;
+				});
+			});
 		});
 	},
 });
diff --git a/src/docs/ja-JP/general/glossary.md b/src/docs/ja-JP/general/glossary.md
index 60de2123f9..f3a9b9af35 100644
--- a/src/docs/ja-JP/general/glossary.md
+++ b/src/docs/ja-JP/general/glossary.md
@@ -9,6 +9,10 @@ Misskeyに関する用語集です。
 (読み: あいすくりぷと)
 Misskey上で使用できるプログラミング言語です。詳細は[こちら。](../advanced/aiscript)
 
+## API
+(読み: えーぴーあい)
+Misskeyのサーバーが公開している、プログラムからMisskeyを扱うためのインターフェース。詳細は[こちら。](../advanced/api)
+
 ## Bot
 (読み: ぼっと)
 プログラムによって動作しているアカウント。
-- 
GitLab


From 2a47e4a1e13fe501cfda8d95e2c805eeb7c14350 Mon Sep 17 00:00:00 2001
From: syuilo <Syuilotan@yahoo.co.jp>
Date: Thu, 5 Aug 2021 16:29:34 +0900
Subject: [PATCH 21/70] Update misskey.md

---
 src/docs/ja-JP/general/misskey.md | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/src/docs/ja-JP/general/misskey.md b/src/docs/ja-JP/general/misskey.md
index d771165d8d..9dde912fd3 100644
--- a/src/docs/ja-JP/general/misskey.md
+++ b/src/docs/ja-JP/general/misskey.md
@@ -25,8 +25,8 @@ Misskeyのすべてのソースコードは[AGPL](https://github.com/misskey-dev
 
 技術的に言うと、MisskeyのソースコードはGitで管理されていて、リポジトリは[GitHub上でホスティングされています。](https://github.com/misskey-dev)
 
-## 開発に参加する、開発を支援する
-Misskeyの開発に貢献するにはいろいろな方法があります。方法によっては開発のスキルは不要なので、誰でも気軽に参加し貢献することができます。
+## 開発に参加する、プロジェクトを支援する
+Misskeyを気に入っていただけたら、ぜひプロジェクトを支援してください。プロジェクトに貢献するには、以下で紹介するようにいろいろな方法があります。方法によっては開発のスキルは不要なので、誰でも気軽に参加し貢献することができます。いつでもお待ちしています。
 
 ### 機能を追加したり、バグを修正する
 ソフトウェアエンジニアのスキルをお持ちの方であれば、ソースコードを編集する形でプロジェクトに貢献することができます。
@@ -43,6 +43,10 @@ Misskeyは[Crowdinというサービスを使用して翻訳の管理を行っ
 ### 感想を投稿する
 不具合報告等だけではなく、Misskeyの良い点、楽しい点といったポジティブな意見もぜひ共有してください。開発の励みになり、それは間接的ですがプロジェクトへの貢献です。
 
+### ミスキストを増やす
+ミスキストとは、Misskeyを使用する人のことです。
+知り合いに紹介するなどしてMisskeyを広めていただければ、ミスキストが増え開発のモチベーションが上がります。
+
 ### 寄付をする
 Misskeyはビジネスではなく、利用は無料であるため、収益は皆様からの寄付のみです。(インスタンスによっては広告収入を得ているような場合もありますが、それは運営者の収入であり直接開発者への収入にはなりません)
 寄付をしていただければ、今後も開発を続けることが可能になり、プロジェクトへの貢献になります。
-- 
GitLab


From 33b0cab59666fa003c1250e5e136f7fb4fee56f0 Mon Sep 17 00:00:00 2001
From: syuilo <Syuilotan@yahoo.co.jp>
Date: Thu, 5 Aug 2021 16:34:18 +0900
Subject: [PATCH 22/70] refactor

---
 src/client/components/note-header.vue     | 4 ++--
 src/client/components/notification.vue    | 4 ++--
 src/client/components/page-preview.vue    | 2 +-
 src/client/components/user-info.vue       | 2 +-
 src/client/components/user-list.vue       | 2 +-
 src/client/components/user-preview.vue    | 2 +-
 src/client/components/users-dialog.vue    | 2 +-
 src/client/pages/follow-requests.vue      | 2 +-
 src/client/pages/instance/abuses.vue      | 2 +-
 src/client/pages/instance/instance.vue    | 4 ++--
 src/client/pages/instance/metrics.vue     | 4 ++--
 src/client/pages/instance/overview.vue    | 4 ++--
 src/client/pages/instance/queue.chart.vue | 2 +-
 src/client/pages/instance/users.vue       | 2 +-
 src/client/pages/messaging/index.vue      | 2 +-
 src/client/pages/user/clips.vue           | 2 +-
 src/client/pages/user/follow-list.vue     | 2 +-
 src/client/pages/user/gallery.vue         | 2 +-
 src/client/pages/user/index.photos.vue    | 2 +-
 src/client/pages/user/pages.vue           | 2 +-
 20 files changed, 25 insertions(+), 25 deletions(-)

diff --git a/src/client/components/note-header.vue b/src/client/components/note-header.vue
index 1cd6463f9b..7758dea3ae 100644
--- a/src/client/components/note-header.vue
+++ b/src/client/components/note-header.vue
@@ -24,8 +24,8 @@
 
 <script lang="ts">
 import { defineComponent } from 'vue';
-import notePage from '../filters/note';
-import { userPage } from '../filters/user';
+import notePage from '@client/filters/note';
+import { userPage } from '@client/filters/user';
 import * as os from '@client/os';
 
 export default defineComponent({
diff --git a/src/client/components/notification.vue b/src/client/components/notification.vue
index d4e6b65c70..bce6333d98 100644
--- a/src/client/components/notification.vue
+++ b/src/client/components/notification.vue
@@ -62,8 +62,8 @@ import { defineComponent, markRaw } from 'vue';
 import { getNoteSummary } from '@/misc/get-note-summary';
 import XReactionIcon from './reaction-icon.vue';
 import MkFollowButton from './follow-button.vue';
-import notePage from '../filters/note';
-import { userPage } from '../filters/user';
+import notePage from '@client/filters/note';
+import { userPage } from '@client/filters/user';
 import { i18n } from '@client/i18n';
 import * as os from '@client/os';
 
diff --git a/src/client/components/page-preview.vue b/src/client/components/page-preview.vue
index cd896445a7..090c4a6a6c 100644
--- a/src/client/components/page-preview.vue
+++ b/src/client/components/page-preview.vue
@@ -16,7 +16,7 @@
 
 <script lang="ts">
 import { defineComponent } from 'vue';
-import { userName } from '../filters/user';
+import { userName } from '@client/filters/user';
 import * as os from '@client/os';
 
 export default defineComponent({
diff --git a/src/client/components/user-info.vue b/src/client/components/user-info.vue
index 402aa0d07c..e76f2ecaa6 100644
--- a/src/client/components/user-info.vue
+++ b/src/client/components/user-info.vue
@@ -31,7 +31,7 @@
 import { defineComponent } from 'vue';
 import { parseAcct } from '@/misc/acct';
 import MkFollowButton from './follow-button.vue';
-import { userPage } from '../filters/user';
+import { userPage } from '@client/filters/user';
 
 export default defineComponent({
 	components: {
diff --git a/src/client/components/user-list.vue b/src/client/components/user-list.vue
index a7162ddcc2..9c91183971 100644
--- a/src/client/components/user-list.vue
+++ b/src/client/components/user-list.vue
@@ -18,7 +18,7 @@
 import { defineComponent } from 'vue';
 import paging from '@client/scripts/paging';
 import MkUserInfo from './user-info.vue';
-import { userPage } from '../filters/user';
+import { userPage } from '@client/filters/user';
 
 export default defineComponent({
 	components: {
diff --git a/src/client/components/user-preview.vue b/src/client/components/user-preview.vue
index a495266894..1249f205aa 100644
--- a/src/client/components/user-preview.vue
+++ b/src/client/components/user-preview.vue
@@ -35,7 +35,7 @@
 import { defineComponent } from 'vue';
 import { parseAcct } from '@/misc/acct';
 import MkFollowButton from './follow-button.vue';
-import { userPage } from '../filters/user';
+import { userPage } from '@client/filters/user';
 import * as os from '@client/os';
 
 export default defineComponent({
diff --git a/src/client/components/users-dialog.vue b/src/client/components/users-dialog.vue
index 90cd926f0c..5199f34c14 100644
--- a/src/client/components/users-dialog.vue
+++ b/src/client/components/users-dialog.vue
@@ -28,7 +28,7 @@
 <script lang="ts">
 import { defineComponent } from 'vue';
 import paging from '@client/scripts/paging';
-import { userPage } from '../filters/user';
+import { userPage } from '@client/filters/user';
 
 export default defineComponent({
 	mixins: [
diff --git a/src/client/pages/follow-requests.vue b/src/client/pages/follow-requests.vue
index 9f27a6baa8..6115dda454 100644
--- a/src/client/pages/follow-requests.vue
+++ b/src/client/pages/follow-requests.vue
@@ -32,7 +32,7 @@
 <script lang="ts">
 import { defineComponent } from 'vue';
 import MkPagination from '@client/components/ui/pagination.vue';
-import { userPage, acct } from '../filters/user';
+import { userPage, acct } from '@client/filters/user';
 import * as os from '@client/os';
 import * as symbols from '@client/symbols';
 
diff --git a/src/client/pages/instance/abuses.vue b/src/client/pages/instance/abuses.vue
index 900c9f8333..2af57bb975 100644
--- a/src/client/pages/instance/abuses.vue
+++ b/src/client/pages/instance/abuses.vue
@@ -68,7 +68,7 @@ import MkButton from '@client/components/ui/button.vue';
 import MkInput from '@client/components/ui/input.vue';
 import MkSelect from '@client/components/ui/select.vue';
 import MkPagination from '@client/components/ui/pagination.vue';
-import { acct } from '../../filters/user';
+import { acct } from '@client/filters/user';
 import * as os from '@client/os';
 import * as symbols from '@client/symbols';
 
diff --git a/src/client/pages/instance/instance.vue b/src/client/pages/instance/instance.vue
index 75a24bcb80..a4ac1de46b 100644
--- a/src/client/pages/instance/instance.vue
+++ b/src/client/pages/instance/instance.vue
@@ -131,8 +131,8 @@ import MkSelect from '@client/components/ui/select.vue';
 import MkButton from '@client/components/ui/button.vue';
 import MkSwitch from '@client/components/ui/switch.vue';
 import MkInfo from '@client/components/ui/info.vue';
-import bytes from '../../filters/bytes';
-import number from '../../filters/number';
+import bytes from '@client/filters/bytes';
+import number from '@client/filters/number';
 import * as os from '@client/os';
 
 const chartLimit = 90;
diff --git a/src/client/pages/instance/metrics.vue b/src/client/pages/instance/metrics.vue
index 131af37c7f..283b5939f0 100644
--- a/src/client/pages/instance/metrics.vue
+++ b/src/client/pages/instance/metrics.vue
@@ -60,8 +60,8 @@ import MkContainer from '@client/components/ui/container.vue';
 import MkFolder from '@client/components/ui/folder.vue';
 import MkwFederation from '../../widgets/federation.vue';
 import { version, url } from '@client/config';
-import bytes from '../../filters/bytes';
-import number from '../../filters/number';
+import bytes from '@client/filters/bytes';
+import number from '@client/filters/number';
 import MkInstanceInfo from './instance.vue';
 
 const alpha = (hex, a) => {
diff --git a/src/client/pages/instance/overview.vue b/src/client/pages/instance/overview.vue
index cb9cff9fc5..0d7a5d1501 100644
--- a/src/client/pages/instance/overview.vue
+++ b/src/client/pages/instance/overview.vue
@@ -62,8 +62,8 @@ import MkInput from '@client/components/ui/input.vue';
 import MkContainer from '@client/components/ui/container.vue';
 import MkFolder from '@client/components/ui/folder.vue';
 import { version, url } from '@client/config';
-import bytes from '../../filters/bytes';
-import number from '../../filters/number';
+import bytes from '@client/filters/bytes';
+import number from '@client/filters/number';
 import MkInstanceInfo from './instance.vue';
 import XMetrics from './metrics.vue';
 import * as os from '@client/os';
diff --git a/src/client/pages/instance/queue.chart.vue b/src/client/pages/instance/queue.chart.vue
index 0cd983127f..53d790598a 100644
--- a/src/client/pages/instance/queue.chart.vue
+++ b/src/client/pages/instance/queue.chart.vue
@@ -29,7 +29,7 @@
 <script lang="ts">
 import { defineComponent, markRaw } from 'vue';
 import Chart from 'chart.js';
-import number from '../../filters/number';
+import number from '@client/filters/number';
 
 const alpha = (hex, a) => {
 	const result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex)!;
diff --git a/src/client/pages/instance/users.vue b/src/client/pages/instance/users.vue
index 2808b70fba..ccddca16ad 100644
--- a/src/client/pages/instance/users.vue
+++ b/src/client/pages/instance/users.vue
@@ -70,7 +70,7 @@ import MkButton from '@client/components/ui/button.vue';
 import MkInput from '@client/components/ui/input.vue';
 import MkSelect from '@client/components/ui/select.vue';
 import MkPagination from '@client/components/ui/pagination.vue';
-import { acct } from '../../filters/user';
+import { acct } from '@client/filters/user';
 import * as os from '@client/os';
 import * as symbols from '@client/symbols';
 import { lookupUser } from '@client/scripts/lookup-user';
diff --git a/src/client/pages/messaging/index.vue b/src/client/pages/messaging/index.vue
index b9c29492c6..1d4e816fb9 100644
--- a/src/client/pages/messaging/index.vue
+++ b/src/client/pages/messaging/index.vue
@@ -40,7 +40,7 @@
 import { defineAsyncComponent, defineComponent, markRaw } from 'vue';
 import { getAcct } from '@/misc/acct';
 import MkButton from '@client/components/ui/button.vue';
-import { acct } from '../../filters/user';
+import { acct } from '@client/filters/user';
 import * as os from '@client/os';
 import * as symbols from '@client/symbols';
 
diff --git a/src/client/pages/user/clips.vue b/src/client/pages/user/clips.vue
index 9c77bbad47..fc40d583c6 100644
--- a/src/client/pages/user/clips.vue
+++ b/src/client/pages/user/clips.vue
@@ -12,7 +12,7 @@
 <script lang="ts">
 import { defineComponent } from 'vue';
 import MkPagination from '@client/components/ui/pagination.vue';
-import { userPage, acct } from '../../filters/user';
+import { userPage, acct } from '@client/filters/user';
 
 export default defineComponent({
 	components: {
diff --git a/src/client/pages/user/follow-list.vue b/src/client/pages/user/follow-list.vue
index 1fce74ec17..f6df28309f 100644
--- a/src/client/pages/user/follow-list.vue
+++ b/src/client/pages/user/follow-list.vue
@@ -12,7 +12,7 @@
 import { defineComponent } from 'vue';
 import MkUserInfo from '@client/components/user-info.vue';
 import MkPagination from '@client/components/ui/pagination.vue';
-import { userPage, acct } from '../../filters/user';
+import { userPage, acct } from '@client/filters/user';
 
 export default defineComponent({
 	components: {
diff --git a/src/client/pages/user/gallery.vue b/src/client/pages/user/gallery.vue
index 2a4c4e03f4..67a5fac109 100644
--- a/src/client/pages/user/gallery.vue
+++ b/src/client/pages/user/gallery.vue
@@ -12,7 +12,7 @@
 import { defineComponent } from 'vue';
 import MkGalleryPostPreview from '@client/components/gallery-post-preview.vue';
 import MkPagination from '@client/components/ui/pagination.vue';
-import { userPage, acct } from '../../filters/user';
+import { userPage, acct } from '@client/filters/user';
 
 export default defineComponent({
 	components: {
diff --git a/src/client/pages/user/index.photos.vue b/src/client/pages/user/index.photos.vue
index a899b116e5..5029c3feec 100644
--- a/src/client/pages/user/index.photos.vue
+++ b/src/client/pages/user/index.photos.vue
@@ -20,7 +20,7 @@
 <script lang="ts">
 import { defineComponent } from 'vue';
 import { getStaticImageUrl } from '@client/scripts/get-static-image-url';
-import notePage from '../../filters/note';
+import notePage from '@client/filters/note';
 import * as os from '@client/os';
 import MkContainer from '@client/components/ui/container.vue';
 import ImgWithBlurhash from '@client/components/img-with-blurhash.vue';
diff --git a/src/client/pages/user/pages.vue b/src/client/pages/user/pages.vue
index 34ac9d1ba6..819bd9f2ef 100644
--- a/src/client/pages/user/pages.vue
+++ b/src/client/pages/user/pages.vue
@@ -10,7 +10,7 @@
 import { defineComponent } from 'vue';
 import MkPagePreview from '@client/components/page-preview.vue';
 import MkPagination from '@client/components/ui/pagination.vue';
-import { userPage, acct } from '../../filters/user';
+import { userPage, acct } from '@client/filters/user';
 
 export default defineComponent({
 	components: {
-- 
GitLab


From 38af8d4737b8335b566b9fb1cc536bfabc453b2b Mon Sep 17 00:00:00 2001
From: syuilo <Syuilotan@yahoo.co.jp>
Date: Thu, 5 Aug 2021 16:34:24 +0900
Subject: [PATCH 23/70] Update glossary.md

---
 src/docs/ja-JP/general/glossary.md | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/src/docs/ja-JP/general/glossary.md b/src/docs/ja-JP/general/glossary.md
index f3a9b9af35..929d880e6c 100644
--- a/src/docs/ja-JP/general/glossary.md
+++ b/src/docs/ja-JP/general/glossary.md
@@ -59,6 +59,8 @@ Misskeyにアップロードしたファイルを管理する機能。詳細は[
 ## ノート
 Misskeyに投稿される、文章、ファイル、アンケートなどを含めることができるコンテンツ。
 
+## ミスキスト
+Misskeyを使う人のこと。
 
 ## モデレーター
 スパムの凍結およびサイレンスや不適切な投稿の削除など、コミュニティ運営に関する権限を持つユーザー。
-- 
GitLab


From fc5ceea335efbdd3a5c6e7cd0ae0380024b0382b Mon Sep 17 00:00:00 2001
From: syuilo <Syuilotan@yahoo.co.jp>
Date: Thu, 5 Aug 2021 18:34:59 +0900
Subject: [PATCH 24/70] Improve doc

---
 src/client/pages/doc.vue          |  4 ++++
 src/docs/ja-JP/general/misskey.md | 25 +++++++++++++++++--------
 2 files changed, 21 insertions(+), 8 deletions(-)

diff --git a/src/client/pages/doc.vue b/src/client/pages/doc.vue
index 00a3530523..8647b0a44c 100644
--- a/src/client/pages/doc.vue
+++ b/src/client/pages/doc.vue
@@ -162,6 +162,10 @@ export default defineComponent({
 				border-bottom: solid 0.5px var(--divider);
 			}
 
+			::v-deep(h3) {
+				margin: 1.25em 0 0.5em 0;
+			}
+
 			::v-deep(table) {
 				width: 100%;
 				max-width: 100%;
diff --git a/src/docs/ja-JP/general/misskey.md b/src/docs/ja-JP/general/misskey.md
index 9dde912fd3..76f2f22131 100644
--- a/src/docs/ja-JP/general/misskey.md
+++ b/src/docs/ja-JP/general/misskey.md
@@ -67,14 +67,6 @@ Misskeyは分散型なため、各サーバーにそれぞれ異なった運営
 サーバーの運営者は、[このページ](/about)で確認することができます。
 あなたがサーバーを作成すれば、あなたが運営者になります。
 
-### iOS/Androidのアプリはありますか?
-公式にはそういったOSのネイティブアプリを開発していませんが、サードパーティ製のアプリがいくつかあります。
-詳しくは[こちら](./apps)をご覧ください。
-
-ただ、サードパーティ製アプリはどうしても機能への対応が遅れてしまうため、とくに拘りがなければ公式のWebクライアントの利用をおすすめします。
-なお、MisskeyのWebクライアントはPWAに対応しているので、ネイティブアプリのように動作させることも可能です。
-詳しくは[こちら](todo)をご覧ください。
-
 ### どのサーバーを選べばいいですか?
 [サーバー一覧が公開されています。](https://join.misskey.page/ja-JP/instances)
 サーバーによってコミュニティのテーマ(特定のこと、ものが好き 等)が決められている場合があるので、自分に合ったテーマのサーバーがあれば、そこを選ぶと良いかもしれません。
@@ -100,5 +92,22 @@ Misskeyは開発が進むにつれ使用する技術も大きく変わってき
 開発に関しても、Misskeyの方が昔から開発されています。ただし、分散型になったのはMastodonの登場より後です。
 同じAcitivityPubという分散のためのプロトコルを実装しているという点以外、両者に特に関りがあるわけでもありません。
 
+### iOS/Androidのアプリはありますか?
+公式にはそういったOSのネイティブアプリを開発していませんが、サードパーティ製のアプリがいくつかあります。
+詳しくは[こちら](./apps)をご覧ください。
+
+ただ、サードパーティ製アプリはどうしても機能への対応が遅れてしまうため、とくに拘りがなければ公式のWebクライアントの利用をおすすめします。
+なお、MisskeyのWebクライアントはPWAに対応しているので、ネイティブアプリのように動作させることも可能です。
+詳しくは[こちら](todo)をご覧ください。
+
 ### Misskeyのロゴ、アイコンはどこで入手できますか?
 (準備中)
+
+### プロジェクトは何を目指していますか?
+強いて言うと、広く使われる汎用的なプラットフォームになることを目指しています。
+Misskeyは他のプロジェクトとは違い、何らかの思想(例えば、反中央集権)に基づいて開発が行われているわけではなく、その点ではフラットです。
+それが逆に、特定の方向性に縛られないフレキシブルさを生み出すことに繋がっています。
+<!-- TODO: ここにロードマップへのリンク -->
+
+### 時折目にする猫耳の可愛い女の子は?
+Misskeyの守り神、藍ちゃんです。アイチャンカワイイヤッター!
-- 
GitLab


From e410e22980b486c6134c30f3042e8131b6a25fd6 Mon Sep 17 00:00:00 2001
From: syuilo <Syuilotan@yahoo.co.jp>
Date: Thu, 5 Aug 2021 18:46:43 +0900
Subject: [PATCH 25/70] Update misskey.md

---
 src/docs/ja-JP/general/misskey.md | 18 ++++++++++--------
 1 file changed, 10 insertions(+), 8 deletions(-)

diff --git a/src/docs/ja-JP/general/misskey.md b/src/docs/ja-JP/general/misskey.md
index 76f2f22131..9941e0ef94 100644
--- a/src/docs/ja-JP/general/misskey.md
+++ b/src/docs/ja-JP/general/misskey.md
@@ -30,6 +30,7 @@ Misskeyを気に入っていただけたら、ぜひプロジェクトを支援
 
 ### 機能を追加したり、バグを修正する
 ソフトウェアエンジニアのスキルをお持ちの方であれば、ソースコードを編集する形でプロジェクトに貢献することができます。
+貢献についてのガイドは[こちら](https://github.com/misskey-dev/misskey/blob/develop/CONTRIBUTING.md)です。
 
 ### 議論に参加する
 新しい機能、または既存の機能について意見を述べたり、不具合を報告したりすることでも貢献できます。
@@ -50,12 +51,19 @@ Misskeyは[Crowdinというサービスを使用して翻訳の管理を行っ
 ### 寄付をする
 Misskeyはビジネスではなく、利用は無料であるため、収益は皆様からの寄付のみです。(インスタンスによっては広告収入を得ているような場合もありますが、それは運営者の収入であり直接開発者への収入にはなりません)
 寄付をしていただければ、今後も開発を続けることが可能になり、プロジェクトへの貢献になります。
-寄付は[Patreon](https://www.patreon.com/syuilo)で受け付けています。
+寄付は基本的には[Patreon](https://www.patreon.com/syuilo)で受け付けています。
+一定額寄付していただけると、Misskeyの[情報ページ](/about-misskey)に名前を記載することができます。
 
 ## クレジット
 Misskeyの開発者や、Misskeyに寄付をしてくださった方の一覧は[こちら](/about-misskey)で見ることができます。
 
 ## よくある質問
+### プロジェクトは何を目指していますか?
+強いて言うと、広く使われる汎用的なプラットフォームになることを目指しています。
+Misskeyは他のプロジェクトとは違い、何らかの思想(例えば、反中央集権)に基づいて開発が行われているわけではなく、その点ではフラットです。
+それが逆に、特定の方向性に縛られないフレキシブルさを生み出すことに繋がっています。
+<!-- TODO: ここにロードマップへのリンク -->
+
 ### 企業によって開発されていますか?
 いいえ。Misskeyの開発は個人で行われており、商業的でもないため、特定の企業の関りはありません。
 開発メンバーも基本的にはボランティアです。
@@ -103,11 +111,5 @@ Misskeyは開発が進むにつれ使用する技術も大きく変わってき
 ### Misskeyのロゴ、アイコンはどこで入手できますか?
 (準備中)
 
-### プロジェクトは何を目指していますか?
-強いて言うと、広く使われる汎用的なプラットフォームになることを目指しています。
-Misskeyは他のプロジェクトとは違い、何らかの思想(例えば、反中央集権)に基づいて開発が行われているわけではなく、その点ではフラットです。
-それが逆に、特定の方向性に縛られないフレキシブルさを生み出すことに繋がっています。
-<!-- TODO: ここにロードマップへのリンク -->
-
 ### 時折目にする猫耳の可愛い女の子は?
-Misskeyの守り神、藍ちゃんです。アイチャンカワイイヤッター!
+Misskeyの守り神、藍ちゃんです。アイチャンカワイイヤッター!
-- 
GitLab


From 62ccb53c243bf252f000cee2b832f6f3db1b74e8 Mon Sep 17 00:00:00 2001
From: syuilo <Syuilotan@yahoo.co.jp>
Date: Thu, 5 Aug 2021 21:55:41 +0900
Subject: [PATCH 26/70] Add rainbow function for MFM

---
 locales/ja-JP.yml                                   |  2 ++
 .../components/global/misskey-flavored-markdown.vue |  5 +++++
 src/client/components/mfm.ts                        |  4 ++++
 src/client/pages/mfm-cheat-sheet.vue                | 13 +++++++++++++
 4 files changed, 24 insertions(+)

diff --git a/locales/ja-JP.yml b/locales/ja-JP.yml
index e35514ded9..9fa4531db5 100644
--- a/locales/ja-JP.yml
+++ b/locales/ja-JP.yml
@@ -878,6 +878,8 @@ _mfm:
   blurDescription: "内容をぼかすことができます。ポインターを上に乗せるとはっきり見えるようになります。"
   font: "フォント"
   fontDescription: "内容のフォントを指定することができます。"
+  rainbow: "レインボー"
+  rainbowDescription: "内容をレインボーにします。"
 
 _reversi:
   reversi: "リバーシ"
diff --git a/src/client/components/global/misskey-flavored-markdown.vue b/src/client/components/global/misskey-flavored-markdown.vue
index 988cf9cf47..c4f75bee93 100644
--- a/src/client/components/global/misskey-flavored-markdown.vue
+++ b/src/client/components/global/misskey-flavored-markdown.vue
@@ -117,6 +117,11 @@ export default defineComponent({
 	75% { transform: scale3d(1.05, 0.95, 1); }
 	to { transform: scale3d(1, 1, 1); }
 }
+
+@keyframes mfm-rainbow {
+	0% { filter: hue-rotate(0deg) contrast(150%) saturate(150%); }
+	100% { filter: hue-rotate(360deg) contrast(150%) saturate(150%); }
+}
 </style>
 
 <style lang="scss" scoped>
diff --git a/src/client/components/mfm.ts b/src/client/components/mfm.ts
index 3b08c83c7f..c248f934df 100644
--- a/src/client/components/mfm.ts
+++ b/src/client/components/mfm.ts
@@ -165,6 +165,10 @@ export default defineComponent({
 								class: '_mfm_blur_',
 							}, genEl(token.children));
 						}
+						case 'rainbow': {
+							style = this.$store.state.animatedMfm ? 'animation: mfm-rainbow 1s linear infinite;' : '';
+							break;
+						}
 					}
 					if (style == null) {
 						return h('span', {}, ['[', token.props.name, ...genEl(token.children), ']']);
diff --git a/src/client/pages/mfm-cheat-sheet.vue b/src/client/pages/mfm-cheat-sheet.vue
index 5227855236..75bbfce7e8 100644
--- a/src/client/pages/mfm-cheat-sheet.vue
+++ b/src/client/pages/mfm-cheat-sheet.vue
@@ -261,6 +261,16 @@
 			</div>
 		</div>
 	</div>
+	<div class="section _block">
+		<div class="title">{{ $ts._mfm.rainbow }}</div>
+		<div class="content">
+			<p>{{ $ts._mfm.rainbowDescription }}</p>
+			<div class="preview">
+				<Mfm :text="preview_rainbow"/>
+				<MkTextarea v-model:value="preview_rainbow"><span>MFM</span></MkTextarea>
+			</div>
+		</div>
+	</div>
 </div>
 </template>
 
@@ -306,6 +316,7 @@ export default defineComponent({
 			preview_x3: `$[x3 🍮]`,
 			preview_x4: `$[x4 🍮]`,
 			preview_blur: `$[blur ${this.$ts._mfm.dummy}]`,
+			preview_rainbow: `$[rainbow 🍮]`,
 		}
 	},
 });
@@ -313,6 +324,8 @@ export default defineComponent({
 
 <style lang="scss" scoped>
 .mwysmxbg {
+	background: var(--bg);
+
 	> .section {
 		> .title {
 			position: sticky;
-- 
GitLab


From f6f96ae5bfe9087f608183a941cc21003ef85418 Mon Sep 17 00:00:00 2001
From: syuilo <Syuilotan@yahoo.co.jp>
Date: Thu, 5 Aug 2021 22:43:14 +0900
Subject: [PATCH 27/70] Imorive client

---
 src/client/components/modal-page-window.vue |  25 +---
 src/client/components/page-window.vue       |  13 +-
 src/client/components/ui/window.vue         |  10 +-
 src/client/pages/timeline.vue               |  10 +-
 src/client/ui/_common_/header.vue           | 152 ++++++++++++--------
 src/client/ui/deck/main-column.vue          |   6 +-
 src/client/ui/default.side.vue              |   2 +-
 src/client/ui/default.vue                   |  11 +-
 8 files changed, 126 insertions(+), 103 deletions(-)

diff --git a/src/client/components/modal-page-window.vue b/src/client/components/modal-page-window.vue
index 7be4045a84..ddf8ac446e 100644
--- a/src/client/components/modal-page-window.vue
+++ b/src/client/components/modal-page-window.vue
@@ -2,12 +2,9 @@
 <MkModal ref="modal" @click="$emit('click')" @closed="$emit('closed')">
 	<div class="hrmcaedk _popup _narrow_" :style="{ width: `${width}px`, height: (height ? `min(${height}px, 100%)` : '100%') }">
 		<div class="header" @contextmenu="onContextmenu">
-			<button class="_button" @click="back()" v-if="history.length > 0"><i class="fas fa-chevron-left"></i></button>
-			<button class="_button" style="pointer-events: none;" v-else><!-- マージンのバランスを取るためのダミー --></button>
 			<span class="title">
-				<XHeader :info="pageInfo" :with-back="false"/>
+				<XHeader :info="pageInfo" :back-button="history.length > 0" @back="back()" :close-button="true" @close="$refs.modal.close()"/>
 			</span>
-			<button class="_button" @click="$refs.modal.close()"><i class="fas fa-times"></i></button>
 		</div>
 		<div class="body _flat_">
 			<keep-alive>
@@ -177,35 +174,19 @@ export default defineComponent({
 		flex-shrink: 0;
 		box-shadow: 0px 1px var(--divider);
 
-		> button {
-			height: $height;
-			width: $height;
-
-			@media (max-width: 500px) {
-				height: $height-narrow;
-				width: $height-narrow;
-			}
-		}
-
 		> .title {
 			flex: 1;
-			line-height: $height;
-			padding-left: 32px;
+			height: $height;
 			font-weight: bold;
 			white-space: nowrap;
 			overflow: hidden;
 			text-overflow: ellipsis;
-			pointer-events: none;
 
 			@media (max-width: 500px) {
-				line-height: $height-narrow;
+				height: $height-narrow;
 				padding-left: 16px;
 			}
 		}
-
-		> button + .title {
-			padding-left: 0;
-		}
 	}
 
 	> .body {
diff --git a/src/client/components/page-window.vue b/src/client/components/page-window.vue
index 26499f7054..c83b040dd8 100644
--- a/src/client/components/page-window.vue
+++ b/src/client/components/page-window.vue
@@ -3,16 +3,12 @@
 	:initial-width="500"
 	:initial-height="500"
 	:can-resize="true"
-	:close-right="true"
+	:close-button="false"
 	:contextmenu="contextmenu"
 	@closed="$emit('closed')"
 >
 	<template #header>
-		<XHeader :info="pageInfo" :with-back="false"/>
-	</template>
-	<template #buttons>
-		<button class="_button" @click="back()" v-if="history.length > 0"><i class="fas fa-chevron-left"></i></button>
-		<button class="_button" style="pointer-events: none;" v-else><!-- マージンのバランスを取るためのダミー --></button>
+		<XHeader :info="pageInfo" :back-button="history.length > 0" @back="back()" :close-button="true" @close="close()"/>
 	</template>
 	<div class="yrolvcoq _flat_">
 		<component :is="component" v-bind="props" :ref="changePage"/>
@@ -139,6 +135,10 @@ export default defineComponent({
 			this.navigate(this.history.pop(), false);
 		},
 
+		close() {
+			this.$refs.window.close();
+		},
+
 		expand() {
 			this.$router.push(this.path);
 			this.$refs.window.close();
@@ -155,6 +155,5 @@ export default defineComponent({
 <style lang="scss" scoped>
 .yrolvcoq {
 	min-height: 100%;
-	background: var(--bg);
 }
 </style>
diff --git a/src/client/components/ui/window.vue b/src/client/components/ui/window.vue
index ce621ac6fd..f8b7d82d4a 100644
--- a/src/client/components/ui/window.vue
+++ b/src/client/components/ui/window.vue
@@ -3,15 +3,11 @@
 	<div class="ebkgocck" :class="{ front }" v-if="showing">
 		<div class="body _popup _shadow _narrow_" @mousedown="onBodyMousedown" @keydown="onKeydown">
 			<div class="header" :class="{ mini }" @contextmenu.prevent.stop="onContextmenu">
-				<slot v-if="closeRight" name="buttons"><button class="_button" style="pointer-events: none;"></button></slot>
-				<button v-else class="_button" @click="close()"><i class="fas fa-times"></i></button>
+				<button v-if="closeButton" class="_button" @click="close()"><i class="fas fa-times"></i></button>
 
 				<span class="title" @mousedown.prevent="onHeaderMousedown" @touchstart.prevent="onHeaderMousedown">
 					<slot name="header"></slot>
 				</span>
-
-				<button v-if="closeRight" class="_button" @click="close()"><i class="fas fa-times"></i></button>
-				<slot v-else name="buttons"><button class="_button" style="pointer-events: none;"></button></slot>
 			</div>
 			<div class="body" v-if="padding">
 				<div class="_section">
@@ -86,10 +82,10 @@ export default defineComponent({
 			required: false,
 			default: false,
 		},
-		closeRight: {
+		closeButton: {
 			type: Boolean,
 			required: false,
-			default: false,
+			default: true,
 		},
 		mini: {
 			type: Boolean,
diff --git a/src/client/pages/timeline.vue b/src/client/pages/timeline.vue
index 966146d92b..55c4743264 100644
--- a/src/client/pages/timeline.vue
+++ b/src/client/pages/timeline.vue
@@ -1,8 +1,8 @@
 <template>
 <div class="cmuxhskf _root" v-hotkey.global="keymap">
-	<XTutorial v-if="$store.reactiveState.tutorial.value != -1" class="tutorial _block"/>
-	<XPostForm v-if="$store.reactiveState.showFixedPostForm.value" class="post-form _block" fixed/>
-	<div class="tabs _block">
+	<XTutorial v-if="$store.reactiveState.tutorial.value != -1" class="tutorial _block _isolated"/>
+	<XPostForm v-if="$store.reactiveState.showFixedPostForm.value" class="post-form _block _isolated" fixed/>
+	<div class="tabs">
 		<div class="left">
 			<button class="_button tab" @click="() => { src = 'home'; saveSrc(); }" :class="{ active: src === 'home' }" v-tooltip="$ts._timelines.home"><i class="fas fa-home"></i></button>
 			<button class="_button tab" @click="() => { src = 'local'; saveSrc(); }" :class="{ active: src === 'local' }" v-tooltip="$ts._timelines.local" v-if="isLocalTimelineAvailable"><i class="fas fa-comments"></i></button>
@@ -20,7 +20,6 @@
 	</div>
 	<div class="new" v-if="queue > 0"><button class="_buttonPrimary" @click="top()">{{ $ts.newNoteRecived }}</button></div>
 	<XTimeline ref="tl"
-		class="_gap"
 		:key="src === 'list' ? `list:${list.id}` : src === 'antenna' ? `antenna:${antenna.id}` : src === 'channel' ? `channel:${channel.id}` : src"
 		:src="src"
 		:list="list ? list.id : null"
@@ -62,6 +61,7 @@ export default defineComponent({
 			queue: 0,
 			[symbols.PAGE_INFO]: computed(() => ({
 				title: this.$ts.timeline,
+				subtitle: this.src === 'local' ? this.$ts._timelines.local : this.src === 'social' ? this.$ts._timelines.social : this.src === 'global' ? this.$ts._timelines.global : this.$ts._timelines.home,
 				icon: this.src === 'local' ? 'fas fa-comments' : this.src === 'social' ? 'fas fa-share-alt' : this.src === 'global' ? 'fas fa-globe' : 'fas fa-home',
 				actions: [{
 					icon: 'fas fa-calendar-alt',
@@ -211,6 +211,8 @@ export default defineComponent({
 
 <style lang="scss" scoped>
 .cmuxhskf {
+	background: var(--bg);
+
 	> .new {
 		position: sticky;
 		top: calc(var(--stickyTop, 0px) + 16px);
diff --git a/src/client/ui/_common_/header.vue b/src/client/ui/_common_/header.vue
index 83aa669b44..24b9046717 100644
--- a/src/client/ui/_common_/header.vue
+++ b/src/client/ui/_common_/header.vue
@@ -1,22 +1,29 @@
 <template>
 <div class="fdidabkb" :class="{ center }" :style="`--height:${height};`" :key="key">
 	<transition :name="$store.state.animation ? 'header' : ''" mode="out-in" appear>
-		<button class="_button back" v-if="withBack && canBack" @click.stop="back()" v-tooltip="$ts.goBack"><i class="fas fa-chevron-left"></i></button>
+		<div class="buttons left" v-if="backButton">
+			<button class="_button button back" @click.stop="$emit('back')" v-tooltip="$ts.goBack"><i class="fas fa-chevron-left"></i></button>
+		</div>
 	</transition>
 	<template v-if="info">
 		<div class="titleContainer">
+			<i v-if="info.icon" class="icon" :class="info.icon"></i>
+			<MkAvatar v-else-if="info.avatar" class="avatar" :user="info.avatar" :disable-preview="true" :show-indicator="true"/>
+
 			<div class="title">
-				<i v-if="info.icon" class="icon" :class="info.icon"></i>
-				<MkAvatar v-else-if="info.avatar" class="avatar" :user="info.avatar" :disable-preview="true" :show-indicator="true"/>
-				<MkUserName v-if="info.userName" :user="info.userName" :nowrap="false" class="text"/>
-				<span v-else-if="info.title" class="text">{{ info.title }}</span>
+				<MkUserName v-if="info.userName" :user="info.userName" :nowrap="false" class="title"/>
+				<div v-else-if="info.title" class="title">{{ info.title }}</div>
+				<div class="subtitle" v-if="info.subtitle">
+					{{ info.subtitle }}
+				</div>
 			</div>
 		</div>
-		<div class="buttons">
+		<div class="buttons right">
 			<template v-if="info.actions && showActions">
-				<button v-for="action in info.actions" class="_button button" @click.stop="action.handler" v-tooltip="action.text"><i :class="action.icon"></i></button>
+				<button v-for="action in info.actions" class="_button button" :class="{ highlighted: action.highlighted }" @click.stop="action.handler" v-tooltip="action.text"><i :class="action.icon"></i></button>
 			</template>
-			<button v-if="showMenu" class="_button button" @click.stop="menu"><i class="fas fa-ellipsis-h"></i></button>
+			<button v-if="shouldShowMenu" class="_button button" @click.stop="showMenu" v-tooltip="$ts.menu"><i class="fas fa-ellipsis-h"></i></button>
+			<button v-if="closeButton" class="_button button" @click.stop="$emit('close')" v-tooltip="$ts.close"><i class="fas fa-times"></i></button>
 		</div>
 	</template>
 </div>
@@ -32,10 +39,18 @@ export default defineComponent({
 		info: {
 			required: true
 		},
-		withBack: {
+		menu: {
+			required: false
+		},
+		backButton: {
 			type: Boolean,
 			required: false,
-			default: true,
+			default: false,
+		},
+		closeButton: {
+			type: Boolean,
+			required: false,
+			default: false,
 		},
 		center: {
 			type: Boolean,
@@ -46,7 +61,6 @@ export default defineComponent({
 
 	data() {
 		return {
-			canBack: false,
 			showActions: false,
 			height: 0,
 			key: 0,
@@ -54,10 +68,11 @@ export default defineComponent({
 	},
 
 	computed: {
-		showMenu() {
+		shouldShowMenu() {
 			if (this.info.actions != null && !this.showActions) return true;
 			if (this.info.menu != null) return true;
 			if (this.info.share != null) return true;
+			if (this.menu != null) return true;
 			return false;
 		}
 	},
@@ -66,13 +81,6 @@ export default defineComponent({
 		info() {
 			this.key++;
 		},
-
-		$route: {
-			handler(to, from) {
-				this.canBack = (window.history.length > 0 && !['index'].includes(to.name));
-			},
-			immediate: true
-		},
 	},
 
 	mounted() {
@@ -85,10 +93,6 @@ export default defineComponent({
 	},
 
 	methods: {
-		back() {
-			if (this.canBack) this.$router.back();
-		},
-
 		share() {
 			navigator.share({
 				url: url + this.info.path,
@@ -96,7 +100,7 @@ export default defineComponent({
 			});
 		},
 
-		menu(ev) {
+		showMenu(ev) {
 			let menu = this.info.menu ? this.info.menu() : [];
 			if (!this.showActions && this.info.actions) {
 				menu = [...this.info.actions.map(x => ({
@@ -113,6 +117,10 @@ export default defineComponent({
 					action: this.share
 				});
 			}
+			if (this.menu) {
+				if (menu.length > 0) menu.push(null);
+				menu = menu.concat(this.menu);
+			}
 			modalMenu(menu, ev.currentTarget || ev.target);
 		}
 	}
@@ -121,62 +129,92 @@ export default defineComponent({
 
 <style lang="scss" scoped>
 .fdidabkb {
+	display: flex;
+
 	&.center {
 		text-align: center;
 
 		> .titleContainer {
 			margin: 0 auto;
 		}
-	}
 
-	> .back {
-		position: absolute;
-		z-index: 1;
-		top: 0;
-		left: 0;
-		height: var(--height);
-		width: var(--height);
+		> .buttons {
+			&.right {
+				margin-left: 0;
+			}
+		}
 	}
 
 	> .buttons {
-		position: absolute;
-		z-index: 1;
-		top: 0;
-		right: 0;
+		--margin: 8px;
+		display: flex;
+    align-items: center;
+		height: var(--height);
+		margin: 0 var(--margin);
 
-		> .button {
-			height: var(--height);
+		&.right {
+			margin-left: auto;
+		}
+
+		&:empty {
 			width: var(--height);
 		}
+
+		> .button {
+			display: flex;
+			align-items: center;
+			justify-content: center;
+			height: calc(var(--height) - (var(--margin) * 2));
+			width: calc(var(--height) - (var(--margin) * 2));
+			box-sizing: border-box;
+			position: relative;
+			border-radius: 5px;
+
+			&:hover {
+				background: rgba(0, 0, 0, 0.05);
+			}
+
+			&.highlighted {
+				color: var(--accent);
+			}
+		}
 	}
 
 	> .titleContainer {
+		display: flex;
+		align-items: center;
 		overflow: auto;
 		white-space: nowrap;
-		width: calc(100% - (var(--height) * 2));
+		text-align: left;
 
-		> .title {
+		> .avatar {
+			$size: 32px;
 			display: inline-block;
+			width: $size;
+			height: $size;
 			vertical-align: bottom;
-			white-space: nowrap;
-			overflow: hidden;
-			text-overflow: ellipsis;
-			padding: 0 16px;
-			position: relative;
-			height: var(--height);
+			margin: 0 8px;
+			pointer-events: none;
+		}
 
-			> .icon + .text {
-				margin-left: 8px;
-			}
+		> .icon {
+			margin-right: 8px;
+		}
 
-			> .avatar {
-				$size: 32px;
-				display: inline-block;
-				width: $size;
-				height: $size;
-				vertical-align: bottom;
-				margin: calc((var(--height) - #{$size}) / 2) 8px calc((var(--height) - #{$size}) / 2) 0;
-				pointer-events: none;
+		> .title {
+			min-width: 0;
+			overflow: hidden;
+			text-overflow: ellipsis;
+			white-space: nowrap;
+			line-height: 1.1;
+
+			> .subtitle {
+				opacity: 0.6;
+				font-size: 0.8em;
+				font-weight: normal;
+				white-space: nowrap;
+				overflow: hidden;
+				text-overflow: ellipsis;
 			}
 		}
 	}
diff --git a/src/client/ui/deck/main-column.vue b/src/client/ui/deck/main-column.vue
index 0b61ff6e3a..4c591022a5 100644
--- a/src/client/ui/deck/main-column.vue
+++ b/src/client/ui/deck/main-column.vue
@@ -1,7 +1,7 @@
 <template>
 <XColumn v-if="deckStore.state.alwaysShowMainColumn || $route.name !== 'index'" :column="column" :is-stacked="isStacked">
 	<template #header>
-		<XHeader :info="pageInfo"/>
+		<XHeader :info="pageInfo" :back-button="true" @back="back()"/>
 	</template>
 
 	<router-view v-slot="{ Component }" class="_flat_">
@@ -56,6 +56,10 @@ export default defineComponent({
 			}
 		},
 
+		back() {
+			history.back();
+		},
+
 		onContextmenu(e) {
 			const isLink = (el: HTMLElement) => {
 				if (el.tagName === 'A') return true;
diff --git a/src/client/ui/default.side.vue b/src/client/ui/default.side.vue
index 5c8de80378..dca16cdb3e 100644
--- a/src/client/ui/default.side.vue
+++ b/src/client/ui/default.side.vue
@@ -4,7 +4,7 @@
 		<header class="header" @contextmenu.prevent.stop="onContextmenu">
 			<button class="_button" @click="back()" v-if="history.length > 0"><i class="fas fa-chevron-left"></i></button>
 			<button class="_button" style="pointer-events: none;" v-else><!-- マージンのバランスを取るためのダミー --></button>
-			<XHeader class="title" :info="pageInfo" :with-back="false"/>
+			<XHeader class="title" :info="pageInfo" :back-button="false"/>
 			<button class="_button" @click="close()"><i class="fas fa-times"></i></button>
 		</header>
 		<component :is="component" v-bind="props" :ref="changePage"/>
diff --git a/src/client/ui/default.vue b/src/client/ui/default.vue
index d257b048d0..645f67c123 100644
--- a/src/client/ui/default.vue
+++ b/src/client/ui/default.vue
@@ -14,7 +14,7 @@
 
 		<main class="main _panel" @contextmenu.stop="onContextmenu">
 			<header class="header" @click="onHeaderClick">
-				<XHeader :info="pageInfo"/>
+				<XHeader :info="pageInfo" :back-button="true" @back="back()"/>
 			</header>
 			<div class="content" :class="{ _flat_: !fullView }">
 				<router-view v-slot="{ Component }">
@@ -157,6 +157,10 @@ export default defineComponent({
 			window.scroll({ top: 0, behavior: 'smooth' });
 		},
 
+		back() {
+			history.back();
+		},
+
 		showDrawerNav() {
 			this.$refs.drawerNav.show();
 		},
@@ -287,7 +291,7 @@ export default defineComponent({
 			min-width: 0;
 			width: 750px;
 			margin: 0 16px 0 0;
-			background: var(--bg);
+			background: var(--panel);
 			border-radius: 0;
 			--margin: 12px;
 
@@ -296,14 +300,13 @@ export default defineComponent({
 				z-index: 1000;
 				top: var(--globalHeaderHeight, 0px);
 				height: $header-height;
-				line-height: $header-height;
 				-webkit-backdrop-filter: blur(32px);
 				backdrop-filter: blur(32px);
 				background-color: var(--header);
+				border-bottom: solid 0.5px var(--divider);
 			}
 
 			> .content {
-				background: var(--bg);
 				--stickyTop: calc(var(--globalHeaderHeight, 0px) + #{$header-height});
 			}
 
-- 
GitLab


From 3e3d294188b023a97df457cd910646417b04ba26 Mon Sep 17 00:00:00 2001
From: syuilo <Syuilotan@yahoo.co.jp>
Date: Fri, 6 Aug 2021 00:17:40 +0900
Subject: [PATCH 28/70] Improve docs

---
 src/docs/ja-JP/features/drive.md              |  8 ++++
 src/docs/ja-JP/features/note.md               | 46 +++++++++++++++++++
 src/docs/ja-JP/features/silence.md            |  7 +++
 .../features/{timelines.md => timeline.md}    |  7 +--
 src/docs/ja-JP/general/glossary.md            | 11 +++--
 5 files changed, 72 insertions(+), 7 deletions(-)
 create mode 100644 src/docs/ja-JP/features/drive.md
 create mode 100644 src/docs/ja-JP/features/note.md
 create mode 100644 src/docs/ja-JP/features/silence.md
 rename src/docs/ja-JP/features/{timelines.md => timeline.md} (60%)

diff --git a/src/docs/ja-JP/features/drive.md b/src/docs/ja-JP/features/drive.md
new file mode 100644
index 0000000000..d169b7f54b
--- /dev/null
+++ b/src/docs/ja-JP/features/drive.md
@@ -0,0 +1,8 @@
+# ドライブ
+ドライブは、Misskey上でファイルを管理できる機能です。
+
+[ドライブのページ](/my/drive)から任意のファイルをアップロードできるほか、アバターに設定した画像や、ノートに添付したファイルなどもすべてドライブにアップロードされます。
+
+ドライブにアップロードされたファイルは、いつでもダウンロードすることができるほか、ノート作成時に「ドライブからファイルを添付」することでファイルを再利用することもできます。
+
+ドライブ内にフォルダを作り、複数のファイルをまとめて整理することもできます。
diff --git a/src/docs/ja-JP/features/note.md b/src/docs/ja-JP/features/note.md
new file mode 100644
index 0000000000..00bfbf59fa
--- /dev/null
+++ b/src/docs/ja-JP/features/note.md
@@ -0,0 +1,46 @@
+# ノート
+ノートは、Misskeyに投稿される、文章、ファイル、アンケートなどを含むコンテンツで、Misskeyの中心的概念です。また、そのノートを作成する行為自体もノートと呼ばれます。
+
+ノートが作成されると、[タイムライン](./timeline)に追加され、自分の[フォロワー](./follow)やサーバーのユーザーが見れるようになります。
+
+ノートを作成するには、画面上にある鉛筆マークのボタンを押して、作成フォームを開きます。作成フォームに内容を入力し、「ノート」ボタンを押すことでノートが作成されます。
+ノートには、画像、動画など任意のファイルや、[アンケート](./poll)を添付することができます。また、本文中には[MFM](./mfm)が使用でき、[メンション](./mention)や[ハッシュタグ](./hashtag)を含めることもできます。
+他にも、CWや公開範囲といった設定も行えます(詳細は後述)。
+コンピューターのクリップボードに画像データがある状態で、フォーム内のテキストボックスにペーストするとその画像を添付することができます。
+
+ノートには、[リアクション](./reaction)を行うことができます。また、返信や引用もできます。
+
+ノートを[お気に入り](./favorite)登録することで、後で簡単に見返すことができます。
+
+## Renote
+既にあるノートを引用、もしくはそのノートを新しいノートとして共有する行為、またそれによって作成されたノートをRenoteと呼びます。
+自分がフォローしているユーザーの、気に入ったノートを自分のフォロワーに共有したい場合や、過去の自分のノートを再度共有したい場合に使います。
+同じノートに対して無制限にRenoteを行うことができますが、あまり連続して使用すると迷惑になる場合もあるので、注意しましょう。
+
+## CW
+Contents Warningの略で、ノートの内容を、閲覧者の操作なしには表示しないようにできる機能です。主に長大な内容を隠すためや、ネタバレ防止などに使うことができます。
+設定するには、フォームの「内容を隠す」ボタン(目のアイコン)を押します。すると新しい入力エリアが表れるので、そこに内容の要約を記入します。
+
+## 公開範囲
+ノートごとに、そのノートが公開される範囲を設定することができます。フォームの「ノート」ボタンの左にあるアイコンを押すと公開範囲を以下から選択できます。
+
+### パブリック
+全ての人に対してノートが公開されるほか、サーバーの全てのタイムライン(ホームタイムライン、ローカルタイムライン、ソーシャルタイムライン、グローバルタイムライン)にノートが流れます。
+アカウントが[サイレンス](./silence)状態の時は、この公開範囲は使用できません。
+
+### ホーム
+全ての人に対してノートが公開されますが、フォロワー以外のローカルタイムライン、ソーシャルタイムライン、グローバルタイムラインにはノートは流れません。
+
+### フォロワー
+自分のフォロワーに対してのみノートを公開します。フォロワーの全てのタイムラインに流れます。
+
+### ダイレクト
+指定したユーザーに対してのみノートを公開します。指定したユーザーの全てのタイムラインに流れます。
+
+### 「ローカルのみ」オプション
+このオプションを有効にすると、リモートにノートを連合しなくなります。
+
+## ピン留め
+ノートをピン留めすると、ユーザーページに常にそのノートを表示しておくことができます。
+ノートのメニューを開き、「ピン留め」を選択してピン留めできます。
+複数のノートをピン留めできます。
diff --git a/src/docs/ja-JP/features/silence.md b/src/docs/ja-JP/features/silence.md
new file mode 100644
index 0000000000..3ac2edb9bc
--- /dev/null
+++ b/src/docs/ja-JP/features/silence.md
@@ -0,0 +1,7 @@
+# サイレンス
+サイレンスは、アカウントに設定される状態のひとつです。
+
+アカウントがサイレンス状態になると、ノートの公開範囲をパブリックにできなくなります。
+ホーム、フォロワー、ダイレクトは選択可能なため、サイレンスを受けた場合でもフォロワーやあなたのユーザーページを直接訪れた場合は投稿を閲覧できますが、GTL(連合タイムライン)やLTL(ローカルタイムライン)には投稿が流れません。
+
+アカウントのサイレンス状態は、サーバーのモデレーターによって有効化/無効化されます。
diff --git a/src/docs/ja-JP/features/timelines.md b/src/docs/ja-JP/features/timeline.md
similarity index 60%
rename from src/docs/ja-JP/features/timelines.md
rename to src/docs/ja-JP/features/timeline.md
index 36ba61bd2d..de8c6e5605 100644
--- a/src/docs/ja-JP/features/timelines.md
+++ b/src/docs/ja-JP/features/timeline.md
@@ -1,6 +1,7 @@
-# タイムラインの比較
-
-https://docs.google.com/spreadsheets/d/1lxQ2ugKrhz58Bg96HTDK_2F98BUritkMyIiBkOByjHA/edit?usp=sharing
+# タイムライン
+タイムラインは、[ノート](./note)が時系列で表示される機能です。
+タイムラインには以下で示す種類があり、種類によって表示されるノートも異なります。
+なお、タイムラインの種類によってはサーバーにより無効になっている場合があります。
 
 ## ホーム
 自分のフォローしているユーザーの投稿
diff --git a/src/docs/ja-JP/general/glossary.md b/src/docs/ja-JP/general/glossary.md
index 929d880e6c..59756b6857 100644
--- a/src/docs/ja-JP/general/glossary.md
+++ b/src/docs/ja-JP/general/glossary.md
@@ -35,7 +35,7 @@ Not Safe For Workの略。画像を「閲覧注意」扱いにし、操作なし
 
 ## Renote
 (読み: りのーと)
-既にあるノートを引用、もしくはそのノートを新しいノートとして共有する行為、またそれによって作成されたノート。
+既にあるノートを引用、もしくはそのノートを新しいノートとして共有する行為、またそれによって作成されたノート。詳細は[こちら。](../features/note)
 
 ## 藍
 (読み: あい)
@@ -48,7 +48,7 @@ todo
 todo
 
 ## サイレンス
-ノートをパブリックな公開範囲で投稿できなくされている状態。モデレーターの判断でユーザーごとに設定されます。
+ノートをパブリックな公開範囲で投稿できなくされている状態。モデレーターの判断でユーザーごとに設定されます。詳細は[こちら。](../features/silence)
 
 ## 凍結
 アカウントが使用不可に設定されている状態。
@@ -57,7 +57,7 @@ todo
 Misskeyにアップロードしたファイルを管理する機能。詳細は[こちら。](../features/drive)
 
 ## ノート
-Misskeyに投稿される、文章、ファイル、アンケートなどを含めることができるコンテンツ。
+Misskeyに投稿される、文章、ファイル、アンケートなどを含めることができるコンテンツ。詳細は[こちら。](../features/note)
 
 ## ミスキスト
 Misskeyを使う人のこと。
@@ -65,8 +65,11 @@ Misskeyを使う人のこと。
 ## モデレーター
 スパムの凍結およびサイレンスや不適切な投稿の削除など、コミュニティ運営に関する権限を持つユーザー。
 
+## リモート
+他サーバーのことを指します。リモートユーザーといったように接頭辞としても使われます。ローカルの逆です。
+
 ## 連合
 サーバー上で作成された情報が他のサーバーに伝わること。
 
 ## ローカル
-自サーバーのことを指します。ローカルユーザー、ローカルタイムラインといったように接頭辞としても使われます。
+自サーバーのことを指します。ローカルユーザー、ローカルタイムラインといったように接頭辞としても使われます。リモートの逆です。
-- 
GitLab


From 6073a039671446a77c0144aa6930a64a832664a0 Mon Sep 17 00:00:00 2001
From: syuilo <Syuilotan@yahoo.co.jp>
Date: Fri, 6 Aug 2021 00:33:25 +0900
Subject: [PATCH 29/70] Improve docs

---
 src/docs/ja-JP/general/faq.md             |  8 ++++++++
 src/docs/ja-JP/general/report-issue.md    | 10 ++++++++++
 src/docs/ja-JP/general/troubleshooting.md |  8 ++++++++
 3 files changed, 26 insertions(+)
 create mode 100644 src/docs/ja-JP/general/report-issue.md

diff --git a/src/docs/ja-JP/general/faq.md b/src/docs/ja-JP/general/faq.md
index d956039c12..86180e04bc 100644
--- a/src/docs/ja-JP/general/faq.md
+++ b/src/docs/ja-JP/general/faq.md
@@ -2,6 +2,14 @@
 ここでは利用上のよくある質問について掲載しています。
 Misskeyのプロジェクト自体についてのよくある質問は[こちら](./misskey)に掲載されています。
 
+### iOS/Androidのアプリはありますか?
+公式にはそういったOSのネイティブアプリを開発していませんが、サードパーティ製のアプリがいくつかあります。
+詳しくは[こちら](./apps)をご覧ください。
+
+ただ、サードパーティ製アプリはどうしても機能への対応が遅れてしまうため、とくに拘りがなければ公式のWebクライアントの利用をおすすめします。
+なお、MisskeyのWebクライアントはPWAに対応しているので、ネイティブアプリのように動作させることも可能です。
+詳しくは[こちら](todo)をご覧ください。
+
 ## 他のサーバーのユーザーをフォローするときは?
 メニューから検索を選び、ユーザー名をホスト込みで入力します。例: `@syuilo@misskey.io`
 
diff --git a/src/docs/ja-JP/general/report-issue.md b/src/docs/ja-JP/general/report-issue.md
new file mode 100644
index 0000000000..c694eb2092
--- /dev/null
+++ b/src/docs/ja-JP/general/report-issue.md
@@ -0,0 +1,10 @@
+# 不具合の報告
+不具合と思われる状況に遭遇したときは、まず[トラブルシューティング](./troubleshooting)をご確認ください。
+それでも問題が解決しないときは、以下の情報を含めて[フォーラム](https://forum.misskey.io/)に投稿してください。
+投稿することで、解決策が見つかったり、不具合と判断されれば開発チームによって修正が行われます。
+
+## 含める情報
+- Misskeyのバージョン([情報ページ](/about)で確認できます)
+- お使いのブラウザの種類とバージョン
+- お使いのOSの種類とバージョン
+- 問題の再現手順
diff --git a/src/docs/ja-JP/general/troubleshooting.md b/src/docs/ja-JP/general/troubleshooting.md
index d3b53d5482..e44eddd3ba 100644
--- a/src/docs/ja-JP/general/troubleshooting.md
+++ b/src/docs/ja-JP/general/troubleshooting.md
@@ -1,5 +1,6 @@
 # トラブルシューティング
 問題が発生したときは、まずこちらをご確認ください。
+該当する項目が無い、もしくは手順を試しても効果がない場合は、サーバーの管理者に連絡するか[不具合を報告](./report-issue)してください。
 
 ## クライアントが起動しない
 ほとんどの場合、お使いのブラウザまたはOSのバージョンが古いことが原因です。
@@ -7,6 +8,13 @@
 
 これは稀ですが、それでも起動しない場合は、キャッシュが原因の場合があります。ブラウザのキャッシュをクリアして、再度試してみてください。
 
+## クライアントの動作が遅い
+以下を試してみてください:
+
+- クライアント設定で「UIのアニメーションを減らす」を有効にする
+- お使いのブラウザの設定でハードウェアアクセラレーションを有効にする
+- お使いのデバイスのスペックを上げる
+
 ## 通知やアンテナ等の点滅が消えない
 点滅は、未読のコンテンツがあることを示しています。通常点滅が消えない場合は、コンテンツを遡ると未読なコンテンツが残っています。
 すべて既読にしたと思われるのに、それでもなお点滅が続く場合(おそらく不具合と思われます)は設定から強制的にすべて既読扱いにすることができます。
-- 
GitLab


From 401351d9c8caaa02102ab639a55e786c7daa3080 Mon Sep 17 00:00:00 2001
From: syuilo <Syuilotan@yahoo.co.jp>
Date: Fri, 6 Aug 2021 02:38:45 +0900
Subject: [PATCH 30/70] Improve docs

---
 src/docs/ja-JP/general/misskey.md         | 6 +++---
 src/docs/ja-JP/general/report-issue.md    | 2 +-
 src/docs/ja-JP/general/troubleshooting.md | 6 ++++++
 3 files changed, 10 insertions(+), 4 deletions(-)

diff --git a/src/docs/ja-JP/general/misskey.md b/src/docs/ja-JP/general/misskey.md
index 9941e0ef94..7a50040ad0 100644
--- a/src/docs/ja-JP/general/misskey.md
+++ b/src/docs/ja-JP/general/misskey.md
@@ -59,9 +59,9 @@ Misskeyの開発者や、Misskeyに寄付をしてくださった方の一覧は
 
 ## よくある質問
 ### プロジェクトは何を目指していますか?
-強いて言うと、広く使われる汎用的なプラットフォームになることを目指しています。
-Misskeyは他のプロジェクトとは違い、何らかの思想(例えば、反中央集権)に基づいて開発が行われているわけではなく、その点ではフラットです。
-それが逆に、特定の方向性に縛られないフレキシブルさを生み出すことに繋がっています。
+強いて言うと、漠然的になりますが広く使われる汎用的なプラットフォームになることを目指しています。
+Misskeyは他のプロジェクトとは違い、何らかの思想(例えば、反中央集権)やビジョンに基づいて開発が行われているわけではなく、その点ではフラットです。
+それが逆に、特定の方向性に縛られないフレキシブルさを生み出すことに繋がっていると感じています。
 <!-- TODO: ここにロードマップへのリンク -->
 
 ### 企業によって開発されていますか?
diff --git a/src/docs/ja-JP/general/report-issue.md b/src/docs/ja-JP/general/report-issue.md
index c694eb2092..575ea3950c 100644
--- a/src/docs/ja-JP/general/report-issue.md
+++ b/src/docs/ja-JP/general/report-issue.md
@@ -1,5 +1,5 @@
 # 不具合の報告
-不具合と思われる状況に遭遇したときは、まず[トラブルシューティング](./troubleshooting)をご確認ください。
+不具合と思われる状況に遭遇したときは、まず[トラブルシューティング](./troubleshooting)をご一読ください。
 それでも問題が解決しないときは、以下の情報を含めて[フォーラム](https://forum.misskey.io/)に投稿してください。
 投稿することで、解決策が見つかったり、不具合と判断されれば開発チームによって修正が行われます。
 
diff --git a/src/docs/ja-JP/general/troubleshooting.md b/src/docs/ja-JP/general/troubleshooting.md
index e44eddd3ba..8babb3523b 100644
--- a/src/docs/ja-JP/general/troubleshooting.md
+++ b/src/docs/ja-JP/general/troubleshooting.md
@@ -1,6 +1,7 @@
 # トラブルシューティング
 問題が発生したときは、まずこちらをご確認ください。
 該当する項目が無い、もしくは手順を試しても効果がない場合は、サーバーの管理者に連絡するか[不具合を報告](./report-issue)してください。
+[よくある質問](./faq)も合わせてお役立てください。
 
 ## クライアントが起動しない
 ほとんどの場合、お使いのブラウザまたはOSのバージョンが古いことが原因です。
@@ -12,6 +13,7 @@
 以下を試してみてください:
 
 - クライアント設定で「UIのアニメーションを減らす」を有効にする
+- クライアント設定で「モーダルにぼかし効果を使用」を無効にする
 - お使いのブラウザの設定でハードウェアアクセラレーションを有効にする
 - お使いのデバイスのスペックを上げる
 
@@ -24,3 +26,7 @@
 
 ## UI上で特定の要素が表示されない
 広告ブロッカーを使用しているとそのような不具合が発生することがあります。Misskeyではオフにしてご利用ください。
+
+## UI上で未翻訳の部分がある
+ほとんどの場合、単に翻訳が間に合っていないだけで、不具合ではありません。翻訳が終わるまでお待ちください。
+[翻訳に参加](./misskey)していただくことも可能です。
-- 
GitLab


From 3739638c816055add4b4c3f17bcfa507474e48c5 Mon Sep 17 00:00:00 2001
From: syuilo <Syuilotan@yahoo.co.jp>
Date: Fri, 6 Aug 2021 03:28:47 +0900
Subject: [PATCH 31/70] Improve docs

---
 src/client/pages/doc.vue                  | 18 ++++++++++++++++++
 src/docs/ja-JP/features/antenna.md        |  4 ++++
 src/docs/ja-JP/features/drive.md          |  9 +++++++++
 src/docs/ja-JP/features/note.md           | 14 ++++++++------
 src/docs/ja-JP/general/misskey.md         |  5 +++--
 src/docs/ja-JP/general/troubleshooting.md |  3 ++-
 6 files changed, 44 insertions(+), 9 deletions(-)
 create mode 100644 src/docs/ja-JP/features/antenna.md

diff --git a/src/client/pages/doc.vue b/src/client/pages/doc.vue
index 8647b0a44c..017211036a 100644
--- a/src/client/pages/doc.vue
+++ b/src/client/pages/doc.vue
@@ -208,6 +208,24 @@ export default defineComponent({
 					padding: 0;
 				}
 			}
+
+			::v-deep(.info) {
+				font-size: 90%;
+				background: var(--infoBg);
+				color: var(--infoFg);
+				padding: 1em;
+				margin: 0.75em 0;
+				border-radius: 6px;
+			}
+
+			::v-deep(.warn) {
+				font-size: 90%;
+				background: var(--infoWarnBg);
+				color: var(--infoWarnFg);
+				padding: 1em;
+				margin: 0.75em 0;
+				border-radius: 6px;
+			}
 		}
 
 		> .footer {
diff --git a/src/docs/ja-JP/features/antenna.md b/src/docs/ja-JP/features/antenna.md
new file mode 100644
index 0000000000..94ad9e4aea
--- /dev/null
+++ b/src/docs/ja-JP/features/antenna.md
@@ -0,0 +1,4 @@
+# アンテナ
+アンテナは、自由に条件を設定して、合致するノートを自動で収集することができる機能です。
+
+条件を設定したアンテナが作成された状態で、条件に合致するノートが投稿されると、リアルタイムでそのアンテナのタイムラインにノートが追加されます。
diff --git a/src/docs/ja-JP/features/drive.md b/src/docs/ja-JP/features/drive.md
index d169b7f54b..784fb492e8 100644
--- a/src/docs/ja-JP/features/drive.md
+++ b/src/docs/ja-JP/features/drive.md
@@ -6,3 +6,12 @@
 ドライブにアップロードされたファイルは、いつでもダウンロードすることができるほか、ノート作成時に「ドライブからファイルを添付」することでファイルを再利用することもできます。
 
 ドライブ内にフォルダを作り、複数のファイルをまとめて整理することもできます。
+
+## 閲覧注意 (NSFW)
+<div class="info">ℹ️ この項目が閲覧注意なわけではありません</div>
+
+閲覧注意またはNSFW (Not safe for work) は、ドライブのファイルに設定することができるフラグです。
+閲覧注意フラグを設定されたファイルは、表示される際に閲覧者の操作なしには表示されなくなります。
+このフラグは、例えば職場や公共の場で閲覧するのに適切でないと思われる画像などに設定し、そのような画像が突然表示されてしまうことを防ぐ目的で使われます。
+
+このフラグは手動でオンオフを切り替えられるほか、モデレーターの判断で設定される場合もあります。
diff --git a/src/docs/ja-JP/features/note.md b/src/docs/ja-JP/features/note.md
index 00bfbf59fa..45fbbbfc37 100644
--- a/src/docs/ja-JP/features/note.md
+++ b/src/docs/ja-JP/features/note.md
@@ -3,15 +3,17 @@
 
 ノートが作成されると、[タイムライン](./timeline)に追加され、自分の[フォロワー](./follow)やサーバーのユーザーが見れるようになります。
 
-ノートを作成するには、画面上にある鉛筆マークのボタンを押して、作成フォームを開きます。作成フォームに内容を入力し、「ノート」ボタンを押すことでノートが作成されます。
-ノートには、画像、動画など任意のファイルや、[アンケート](./poll)を添付することができます。また、本文中には[MFM](./mfm)が使用でき、[メンション](./mention)や[ハッシュタグ](./hashtag)を含めることもできます。
-他にも、CWや公開範囲といった設定も行えます(詳細は後述)。
-コンピューターのクリップボードに画像データがある状態で、フォーム内のテキストボックスにペーストするとその画像を添付することができます。
-
 ノートには、[リアクション](./reaction)を行うことができます。また、返信や引用もできます。
 
 ノートを[お気に入り](./favorite)登録することで、後で簡単に見返すことができます。
 
+## ノートを作成する
+ノートを作成するには、画面上にある鉛筆マークのボタンを押して、作成フォームを開きます。作成フォームに内容を入力し、「ノート」ボタンを押すことでノートが作成されます。
+ノートには、画像、動画など任意のファイルや、[アンケート](./poll)を添付することができます。また、本文中には[MFM](./mfm)が使用でき、[メンション](./mention)や[ハッシュタグ](./hashtag)を含めることもできます。
+他にも、CWや公開範囲といった設定も行えます(詳細は後述)。
+<div class="info">ℹ️ コンピューターのクリップボードに画像データがある状態で、フォーム内のテキストボックスにペーストするとその画像を添付することができます。</div>
+<div class="info">ℹ️ テキストボックス内で<kbd class="key">Ctrl + Enter</kbd>を押すことでも投稿できます。</div>
+
 ## Renote
 既にあるノートを引用、もしくはそのノートを新しいノートとして共有する行為、またそれによって作成されたノートをRenoteと呼びます。
 自分がフォローしているユーザーの、気に入ったノートを自分のフォロワーに共有したい場合や、過去の自分のノートを再度共有したい場合に使います。
@@ -26,7 +28,7 @@ Contents Warningの略で、ノートの内容を、閲覧者の操作なしに
 
 ### パブリック
 全ての人に対してノートが公開されるほか、サーバーの全てのタイムライン(ホームタイムライン、ローカルタイムライン、ソーシャルタイムライン、グローバルタイムライン)にノートが流れます。
-アカウントが[サイレンス](./silence)状態の時は、この公開範囲は使用できません。
+<div class="warn">⚠️ アカウントが<a href="./silence">サイレンス</a>状態の時は、この公開範囲は使用できません。</div>
 
 ### ホーム
 全ての人に対してノートが公開されますが、フォロワー以外のローカルタイムライン、ソーシャルタイムライン、グローバルタイムラインにはノートは流れません。
diff --git a/src/docs/ja-JP/general/misskey.md b/src/docs/ja-JP/general/misskey.md
index 7a50040ad0..209f7ce269 100644
--- a/src/docs/ja-JP/general/misskey.md
+++ b/src/docs/ja-JP/general/misskey.md
@@ -7,7 +7,7 @@ Misskeyはオープンソースの分散型マイクロブログプラットフ
 ## 歴史
 開発当初は掲示板がメインのサービスでしたが、ユーザーが短文を投稿し、それを時系列で流れるタイムライン機能を追加したところ人気が高まり、徐々にそれがメインとして開発が進むようになりました。
 当初は分散型ではありませんでしたが、2018年にAcitivityPubを実装し分散型になったことで、より多くの方に認知され利用されるサービスになり、現在に至ります。
-Misskeyという名前は、syuiloが当時聴いていたMay'nというアーティストの楽曲、Brain Diverの歌詞に由来します。
+<div class="info">ℹ️ Misskeyという名前は、syuiloが当時聴いていたMay'nというアーティストの楽曲、Brain Diverの歌詞に由来します。</div>
 
 誰でも開発に参加することができ、現在でも活発に開発が続いています。
 
@@ -23,7 +23,7 @@ Misskeyのすべてのソースコードは[AGPL](https://github.com/misskey-dev
 上述の分散型を実現するためにも、オープンソースであるということは必要不可欠な要素です。
 再び引き合いに出しますが、TwitterやFacebookなどの利益を得ているほとんどのサービスはオープンソースではありません。
 
-技術的に言うと、MisskeyのソースコードはGitで管理されていて、リポジトリは[GitHub上でホスティングされています。](https://github.com/misskey-dev)
+<div class="info">ℹ️ 技術的に言うと、MisskeyのソースコードはGitで管理されていて、リポジトリは<a href="https://github.com/misskey-dev" target="_blank">GitHub上でホスティングされています。</a></div>
 
 ## 開発に参加する、プロジェクトを支援する
 Misskeyを気に入っていただけたら、ぜひプロジェクトを支援してください。プロジェクトに貢献するには、以下で紹介するようにいろいろな方法があります。方法によっては開発のスキルは不要なので、誰でも気軽に参加し貢献することができます。いつでもお待ちしています。
@@ -113,3 +113,4 @@ Misskeyは開発が進むにつれ使用する技術も大きく変わってき
 
 ### 時折目にする猫耳の可愛い女の子は?
 Misskeyの守り神、藍ちゃんです。アイチャンカワイイヤッター!
+<div class="info">ℹ️ 藍ちゃんについては<a href="https://xn--931a.moe/" target="_blank">こちら</a>です。</div>
diff --git a/src/docs/ja-JP/general/troubleshooting.md b/src/docs/ja-JP/general/troubleshooting.md
index 8babb3523b..6e3db8e469 100644
--- a/src/docs/ja-JP/general/troubleshooting.md
+++ b/src/docs/ja-JP/general/troubleshooting.md
@@ -1,7 +1,8 @@
 # トラブルシューティング
+<div class="info">ℹ️ <a href="./faq">よくある質問</a>も合わせてお役立てください。</div>
+
 問題が発生したときは、まずこちらをご確認ください。
 該当する項目が無い、もしくは手順を試しても効果がない場合は、サーバーの管理者に連絡するか[不具合を報告](./report-issue)してください。
-[よくある質問](./faq)も合わせてお役立てください。
 
 ## クライアントが起動しない
 ほとんどの場合、お使いのブラウザまたはOSのバージョンが古いことが原因です。
-- 
GitLab


From 342794c728541f3e3737fe7a6bd28c1505cd2dd3 Mon Sep 17 00:00:00 2001
From: syuilo <Syuilotan@yahoo.co.jp>
Date: Fri, 6 Aug 2021 10:49:04 +0900
Subject: [PATCH 32/70] Update mfm.md

---
 src/docs/ja-JP/features/mfm.md | 10 ++++++++++
 1 file changed, 10 insertions(+)

diff --git a/src/docs/ja-JP/features/mfm.md b/src/docs/ja-JP/features/mfm.md
index 248bae3fd5..24ff6fa824 100644
--- a/src/docs/ja-JP/features/mfm.md
+++ b/src/docs/ja-JP/features/mfm.md
@@ -1,3 +1,13 @@
 # MFM
 MFMは、Misskey Flavored Markdownの略で、Misskeyの様々な場所で使用できる専用のマークアップ言語です。
 MFMで使用可能な構文は[MFMチートシート](/mfm-cheat-sheet)で確認できます。
+
+## MFMが使用可能な場所の例
+- ノート本文
+- CW注釈
+- ユーザーの名前
+- ユーザーの自己紹介
+
+## 開発者向け情報
+MFMのパーサー実装はライブラリとして公開されており、簡単にクライアントにMFMを組み込むことが可能です。
+- [misskey-dev/mfm.js](https://github.com/misskey-dev/mfm.js) - JavaScriptパーサー実装
-- 
GitLab


From 49b3a83f7670e540d2c2569fa21bc406b2de2118 Mon Sep 17 00:00:00 2001
From: syuilo <Syuilotan@yahoo.co.jp>
Date: Fri, 6 Aug 2021 11:04:17 +0900
Subject: [PATCH 33/70] Improve docs

---
 src/docs/ja-JP/features/favorite.md | 6 ++++++
 src/docs/ja-JP/features/note.md     | 1 +
 2 files changed, 7 insertions(+)
 create mode 100644 src/docs/ja-JP/features/favorite.md

diff --git a/src/docs/ja-JP/features/favorite.md b/src/docs/ja-JP/features/favorite.md
new file mode 100644
index 0000000000..c788fd37e9
--- /dev/null
+++ b/src/docs/ja-JP/features/favorite.md
@@ -0,0 +1,6 @@
+# お気に入り
+[ノート](./node)をお気に入りとして登録できる機能です。
+お気に入り登録したノートは、[お気に入りページ](./my/favorites)で一覧することができます。
+お気に入りに登録したことは相手に通知されず、お気に入りは自分しか見ることができません。
+
+ノートをお気に入り登録するには、ノートメニューの「お気に入り」を押します。お気に入り解除するには、ノートメニューの「お気に入り解除」を押します。
diff --git a/src/docs/ja-JP/features/note.md b/src/docs/ja-JP/features/note.md
index 45fbbbfc37..a8b030fa2b 100644
--- a/src/docs/ja-JP/features/note.md
+++ b/src/docs/ja-JP/features/note.md
@@ -18,6 +18,7 @@
 既にあるノートを引用、もしくはそのノートを新しいノートとして共有する行為、またそれによって作成されたノートをRenoteと呼びます。
 自分がフォローしているユーザーの、気に入ったノートを自分のフォロワーに共有したい場合や、過去の自分のノートを再度共有したい場合に使います。
 同じノートに対して無制限にRenoteを行うことができますが、あまり連続して使用すると迷惑になる場合もあるので、注意しましょう。
+<div class="warn">⚠️ 公開範囲がフォロワーやダイレクトのノートはRenoteできません</div>
 
 ## CW
 Contents Warningの略で、ノートの内容を、閲覧者の操作なしには表示しないようにできる機能です。主に長大な内容を隠すためや、ネタバレ防止などに使うことができます。
-- 
GitLab


From be29972ddfd414a4452a6c00b27cc9854b9a7f61 Mon Sep 17 00:00:00 2001
From: syuilo <Syuilotan@yahoo.co.jp>
Date: Fri, 6 Aug 2021 13:55:26 +0900
Subject: [PATCH 34/70] Update doc.vue

---
 src/client/pages/doc.vue | 1 +
 1 file changed, 1 insertion(+)

diff --git a/src/client/pages/doc.vue b/src/client/pages/doc.vue
index 017211036a..753dd8013d 100644
--- a/src/client/pages/doc.vue
+++ b/src/client/pages/doc.vue
@@ -112,6 +112,7 @@ export default defineComponent({
 .qyqbqfal {
 	padding: 32px;
 	background: var(--panel);
+	line-height: 1.5;
 
 	&.max-width_500px {
 		padding: 16px;
-- 
GitLab


From 48113f3afd25168f772bb81d83df911ea5abda71 Mon Sep 17 00:00:00 2001
From: syuilo <Syuilotan@yahoo.co.jp>
Date: Fri, 6 Aug 2021 14:28:40 +0900
Subject: [PATCH 35/70] Improve doc

---
 src/client/components/ui/folder.vue | 3 +++
 src/docs/ja-JP/general/misskey.md   | 3 +++
 2 files changed, 6 insertions(+)

diff --git a/src/client/components/ui/folder.vue b/src/client/components/ui/folder.vue
index 4281ec7778..e6af40e36d 100644
--- a/src/client/components/ui/folder.vue
+++ b/src/client/components/ui/folder.vue
@@ -99,9 +99,12 @@ export default defineComponent({
 		z-index: 10;
 		position: sticky;
 		top: var(--stickyTop, 0px);
+		background: var(--panel);
+		/* TODO panelの半透明バージョンをプログラマティックに作りたい
 		background: var(--X17);
 		-webkit-backdrop-filter: blur(8px);
 		backdrop-filter: blur(20px);
+		*/
 
 		> .title {
 			margin: 0;
diff --git a/src/docs/ja-JP/general/misskey.md b/src/docs/ja-JP/general/misskey.md
index 209f7ce269..97ffd23eb2 100644
--- a/src/docs/ja-JP/general/misskey.md
+++ b/src/docs/ja-JP/general/misskey.md
@@ -54,6 +54,9 @@ Misskeyはビジネスではなく、利用は無料であるため、収益は
 寄付は基本的には[Patreon](https://www.patreon.com/syuilo)で受け付けています。
 一定額寄付していただけると、Misskeyの[情報ページ](/about-misskey)に名前を記載することができます。
 
+また、サーバーの運営者も、基本的には収益を得ていません。サーバーの運営にはコストがかかるので、運営者の支援をすることもご検討ください。
+開発には直接関係しませんが、サーバーがあってこそのプロジェクトなので、運営が維持されるというのは開発と同じくらい重要なことです。
+
 ## クレジット
 Misskeyの開発者や、Misskeyに寄付をしてくださった方の一覧は[こちら](/about-misskey)で見ることができます。
 
-- 
GitLab


From 46d571107197c6c54a0dfa91ae7990f336ba925a Mon Sep 17 00:00:00 2001
From: syuilo <Syuilotan@yahoo.co.jp>
Date: Fri, 6 Aug 2021 22:29:19 +0900
Subject: [PATCH 36/70] :art:

---
 src/client/components/abuse-report-window.vue |   6 +-
 src/client/components/dialog.vue              |   4 +-
 src/client/components/forgot-password.vue     |  10 +-
 src/client/components/instance-stats.vue      |   4 +-
 .../notification-setting-window.vue           |   6 +-
 .../components/page/page.number-input.vue     |   4 +-
 src/client/components/page/page.post.vue      |   2 +-
 src/client/components/page/page.switch.vue    |   2 +-
 .../components/page/page.text-input.vue       |   4 +-
 .../components/page/page.textarea-input.vue   |   4 +-
 src/client/components/page/page.textarea.vue  |   2 +-
 src/client/components/poll-editor.vue         |  22 +-
 src/client/components/sample.vue              |   6 +-
 src/client/components/signin.vue              |  18 +-
 src/client/components/signup.vue              |  44 +--
 .../components/token-generate-window.vue      |   6 +-
 src/client/components/ui/input.vue            | 287 +++++-----------
 src/client/components/ui/select.vue           | 319 +++++++++---------
 src/client/components/ui/switch.vue           |  10 +-
 src/client/components/ui/textarea.vue         | 277 ++++++++-------
 src/client/components/user-select-dialog.vue  |  10 +-
 src/client/components/widgets.vue             |   2 +-
 src/client/pages/api-console.vue              |  14 +-
 src/client/pages/channel-editor.vue           |   8 +-
 src/client/pages/docs.vue                     |   5 +-
 src/client/pages/explore.vue                  |   5 +-
 src/client/pages/instance-info.vue            |   4 +-
 src/client/pages/instance/abuses.vue          |   6 +-
 src/client/pages/instance/ads.vue             |  20 +-
 src/client/pages/instance/announcements.vue   |  12 +-
 .../pages/instance/emoji-edit-dialog.vue      |  14 +-
 src/client/pages/instance/emojis.vue          |  14 +-
 src/client/pages/instance/file-dialog.vue     |   2 +-
 src/client/pages/instance/files.vue           |  14 +-
 src/client/pages/instance/instance.vue        |   8 +-
 src/client/pages/instance/logs.vue            |   6 +-
 src/client/pages/instance/users.vue           |  14 +-
 src/client/pages/mfm-cheat-sheet.vue          |  54 +--
 .../pages/my-antennas/index.antenna.vue       |  36 +-
 .../page-editor/els/page-editor.el.button.vue |  16 +-
 .../page-editor/els/page-editor.el.canvas.vue |  15 +-
 .../els/page-editor.el.counter.vue            |  13 +-
 .../page-editor/els/page-editor.el.if.vue     |   2 +-
 .../page-editor/els/page-editor.el.note.vue   |   8 +-
 .../els/page-editor.el.number-input.vue       |  13 +-
 .../page-editor/els/page-editor.el.post.vue   |   6 +-
 .../els/page-editor.el.radio-button.vue       |   8 +-
 .../page-editor/els/page-editor.el.switch.vue |   6 +-
 .../els/page-editor.el.text-input.vue         |   6 +-
 .../els/page-editor.el.textarea-input.vue     |   6 +-
 .../page-editor/page-editor.script-block.vue  |   6 +-
 src/client/pages/page-editor/page-editor.vue  |  20 +-
 src/client/pages/reversi/game.setting.vue     |   8 +-
 src/client/pages/room/room.vue                |   2 +-
 src/client/pages/settings/2fa.vue             |   8 +-
 src/client/pages/test.vue                     |  42 +--
 src/client/pages/welcome.setup.vue            |   8 +-
 src/client/themes/_dark.json5                 |   3 +-
 src/client/themes/_light.json5                |   3 +-
 src/client/themes/d-astro.json5               |   3 +-
 src/client/themes/l-apricot.json5             |   1 +
 src/client/themes/l-vivid.json5               |   3 +-
 62 files changed, 734 insertions(+), 757 deletions(-)

diff --git a/src/client/components/abuse-report-window.vue b/src/client/components/abuse-report-window.vue
index d9e1c3966b..266c0d566f 100644
--- a/src/client/components/abuse-report-window.vue
+++ b/src/client/components/abuse-report-window.vue
@@ -10,9 +10,9 @@
 	</template>
 	<div class="dpvffvvy _monolithic_">
 		<div class="_section">
-			<MkTextarea v-model:value="comment">
-				<span>{{ $ts.details }}</span>
-				<template #desc>{{ $ts.fillAbuseReportDescription }}</template>
+			<MkTextarea v-model="comment">
+				<template #label>{{ $ts.details }}</template>
+				<template #caption>{{ $ts.fillAbuseReportDescription }}</template>
 			</MkTextarea>
 		</div>
 		<div class="_section">
diff --git a/src/client/components/dialog.vue b/src/client/components/dialog.vue
index a673e827d6..f3611f050e 100644
--- a/src/client/components/dialog.vue
+++ b/src/client/components/dialog.vue
@@ -14,8 +14,8 @@
 		</div>
 		<header v-if="title"><Mfm :text="title"/></header>
 		<div class="body" v-if="text"><Mfm :text="text"/></div>
-		<MkInput v-if="input" v-model:value="inputValue" autofocus :type="input.type || 'text'" :placeholder="input.placeholder" @keydown="onInputKeydown"></MkInput>
-		<MkSelect v-if="select" v-model:value="selectedValue" autofocus>
+		<MkInput v-if="input" v-model="inputValue" autofocus :type="input.type || 'text'" :placeholder="input.placeholder" @keydown="onInputKeydown"></MkInput>
+		<MkSelect v-if="select" v-model="selectedValue" autofocus>
 			<template v-if="select.items">
 				<option v-for="item in select.items" :value="item.value">{{ item.text }}</option>
 			</template>
diff --git a/src/client/components/forgot-password.vue b/src/client/components/forgot-password.vue
index 1f530d7ca2..3b5ad6d6ba 100644
--- a/src/client/components/forgot-password.vue
+++ b/src/client/components/forgot-password.vue
@@ -9,14 +9,14 @@
 
 	<form class="_monolithic_" @submit.prevent="onSubmit" v-if="$instance.enableEmail">
 		<div class="_section">
-			<MkInput v-model:value="username" type="text" pattern="^[a-zA-Z0-9_]+$" spellcheck="false" autofocus required>
-				<span>{{ $ts.username }}</span>
+			<MkInput v-model="username" type="text" pattern="^[a-zA-Z0-9_]+$" spellcheck="false" autofocus required>
+				<template #label>{{ $ts.username }}</template>
 				<template #prefix>@</template>
 			</MkInput>
 
-			<MkInput v-model:value="email" type="email" spellcheck="false" required>
-				<span>{{ $ts.emailAddress }}</span>
-				<template #desc>{{ $ts._forgotPassword.enterEmail }}</template>
+			<MkInput v-model="email" type="email" spellcheck="false" required>
+				<template #label>{{ $ts.emailAddress }}</template>
+				<template #caption>{{ $ts._forgotPassword.enterEmail }}</template>
 			</MkInput>
 
 			<MkButton type="submit" :disabled="processing" primary style="margin: 0 auto;">{{ $ts.send }}</MkButton>
diff --git a/src/client/components/instance-stats.vue b/src/client/components/instance-stats.vue
index 432c9a1bb9..78044f0b16 100644
--- a/src/client/components/instance-stats.vue
+++ b/src/client/components/instance-stats.vue
@@ -1,7 +1,7 @@
 <template>
 <div class="zbcjwnqg" style="margin-top: -8px;">
 	<div class="selects" style="display: flex;">
-		<MkSelect v-model:value="chartSrc" style="margin: 0; flex: 1;">
+		<MkSelect v-model="chartSrc" style="margin: 0; flex: 1;">
 			<optgroup :label="$ts.federation">
 				<option value="federation-instances">{{ $ts._charts.federationInstancesIncDec }}</option>
 				<option value="federation-instances-total">{{ $ts._charts.federationInstancesTotal }}</option>
@@ -24,7 +24,7 @@
 				<option value="drive-total">{{ $ts._charts.storageUsageTotal }}</option>
 			</optgroup>
 		</MkSelect>
-		<MkSelect v-model:value="chartSpan" style="margin: 0;">
+		<MkSelect v-model="chartSpan" style="margin: 0;">
 			<option value="hour">{{ $ts.perHour }}</option>
 			<option value="day">{{ $ts.perDay }}</option>
 		</MkSelect>
diff --git a/src/client/components/notification-setting-window.vue b/src/client/components/notification-setting-window.vue
index 5f16c042bf..c33106ae15 100644
--- a/src/client/components/notification-setting-window.vue
+++ b/src/client/components/notification-setting-window.vue
@@ -11,16 +11,16 @@
 	<template #header>{{ $ts.notificationSetting }}</template>
 	<div class="_monolithic_">
 		<div v-if="showGlobalToggle" class="_section">
-			<MkSwitch v-model:value="useGlobalSetting">
+			<MkSwitch v-model="useGlobalSetting">
 				{{ $ts.useGlobalSetting }}
-				<template #desc>{{ $ts.useGlobalSettingDesc }}</template>
+				<template #caption>{{ $ts.useGlobalSettingDesc }}</template>
 			</MkSwitch>
 		</div>
 		<div v-if="!useGlobalSetting" class="_section">
 			<MkInfo>{{ $ts.notificationSettingDesc }}</MkInfo>
 			<MkButton inline @click="disableAll">{{ $ts.disableAll }}</MkButton>
 			<MkButton inline @click="enableAll">{{ $ts.enableAll }}</MkButton>
-			<MkSwitch v-for="type in notificationTypes" :key="type" v-model:value="typesMap[type]">{{ $t(`_notification._types.${type}`) }}</MkSwitch>
+			<MkSwitch v-for="type in notificationTypes" :key="type" v-model="typesMap[type]">{{ $t(`_notification._types.${type}`) }}</MkSwitch>
 		</div>
 	</div>
 </XModalWindow>
diff --git a/src/client/components/page/page.number-input.vue b/src/client/components/page/page.number-input.vue
index 1970ee62a9..9c4a537e15 100644
--- a/src/client/components/page/page.number-input.vue
+++ b/src/client/components/page/page.number-input.vue
@@ -1,6 +1,8 @@
 <template>
 <div>
-	<MkInput class="kudkigyw" :value="value" @update:value="updateValue($event)" type="number">{{ hpml.interpolate(block.text) }}</MkInput>
+	<MkInput class="kudkigyw" :model-value="value" @update:modelValue="updateValue($event)" type="number">
+		<template #label>{{ hpml.interpolate(block.text) }}</template>
+	</MkInput>
 </div>
 </template>
 
diff --git a/src/client/components/page/page.post.vue b/src/client/components/page/page.post.vue
index 1dfb506d5f..7b061d8cda 100644
--- a/src/client/components/page/page.post.vue
+++ b/src/client/components/page/page.post.vue
@@ -1,6 +1,6 @@
 <template>
 <div class="ngbfujlo">
-	<MkTextarea :value="text" readonly style="margin: 0;"></MkTextarea>
+	<MkTextarea :model-value="text" readonly style="margin: 0;"></MkTextarea>
 	<MkButton class="button" primary @click="post()" :disabled="posting || posted">
 		<i v-if="posted" class="fas fa-check"></i>
 		<i v-else class="fas fa-paper-plane"></i>
diff --git a/src/client/components/page/page.switch.vue b/src/client/components/page/page.switch.vue
index a928c22bee..8818e6cbcf 100644
--- a/src/client/components/page/page.switch.vue
+++ b/src/client/components/page/page.switch.vue
@@ -1,6 +1,6 @@
 <template>
 <div class="hkcxmtwj">
-	<MkSwitch :value="value" @update:value="updateValue($event)">{{ hpml.interpolate(block.text) }}</MkSwitch>
+	<MkSwitch :model-value="value" @update:modelValue="updateValue($event)">{{ hpml.interpolate(block.text) }}</MkSwitch>
 </div>
 </template>
 
diff --git a/src/client/components/page/page.text-input.vue b/src/client/components/page/page.text-input.vue
index 8bf3e1c88e..752d3d7257 100644
--- a/src/client/components/page/page.text-input.vue
+++ b/src/client/components/page/page.text-input.vue
@@ -1,6 +1,8 @@
 <template>
 <div>
-	<MkInput class="kudkigyw" :value="value" @update:value="updateValue($event)" type="text">{{ hpml.interpolate(block.text) }}</MkInput>
+	<MkInput class="kudkigyw" :model-value="value" @update:modelValue="updateValue($event)" type="text">
+		<template #label>{{ hpml.interpolate(block.text) }}</template>
+	</MkInput>
 </div>
 </template>
 
diff --git a/src/client/components/page/page.textarea-input.vue b/src/client/components/page/page.textarea-input.vue
index 9951cef2de..e6cf5117f9 100644
--- a/src/client/components/page/page.textarea-input.vue
+++ b/src/client/components/page/page.textarea-input.vue
@@ -1,6 +1,8 @@
 <template>
 <div>
-	<MkTextarea :value="value" @update:value="updateValue($event)">{{ hpml.interpolate(block.text) }}</MkTextarea>
+	<MkTextarea :model-value="value" @update:modelValue="updateValue($event)">
+		<template #label>{{ hpml.interpolate(block.text) }}</template>
+	</MkTextarea>
 </div>
 </template>
 
diff --git a/src/client/components/page/page.textarea.vue b/src/client/components/page/page.textarea.vue
index 612bbe41b9..974c7f2c57 100644
--- a/src/client/components/page/page.textarea.vue
+++ b/src/client/components/page/page.textarea.vue
@@ -1,5 +1,5 @@
 <template>
-<MkTextarea :value="text" readonly></MkTextarea>
+<MkTextarea :model-value="text" readonly></MkTextarea>
 </template>
 
 <script lang="ts">
diff --git a/src/client/components/poll-editor.vue b/src/client/components/poll-editor.vue
index 0ade2c3ba0..dfc198fc1e 100644
--- a/src/client/components/poll-editor.vue
+++ b/src/client/components/poll-editor.vue
@@ -5,8 +5,8 @@
 	</p>
 	<ul ref="choices">
 		<li v-for="(choice, i) in choices" :key="i">
-			<MkInput class="input" :value="choice" @update:value="onInput(i, $event)">
-				<span>{{ $t('_poll.choiceN', { n: i + 1 }) }}</span>
+			<MkInput class="input" :model-value="choice" @update:modelValue="onInput(i, $event)">
+				<template #label>{{ $t('_poll.choiceN', { n: i + 1 }) }}</template>
 			</MkInput>
 			<button @click="remove(i)" class="_button">
 				<i class="fas fa-times"></i>
@@ -16,27 +16,27 @@
 	<MkButton class="add" v-if="choices.length < 10" @click="add">{{ $ts.add }}</MkButton>
 	<MkButton class="add" v-else disabled>{{ $ts._poll.noMore }}</MkButton>
 	<section>
-		<MkSwitch v-model:value="multiple">{{ $ts._poll.canMultipleVote }}</MkSwitch>
+		<MkSwitch v-model="multiple">{{ $ts._poll.canMultipleVote }}</MkSwitch>
 		<div>
-			<MkSelect v-model:value="expiration">
+			<MkSelect v-model="expiration">
 				<template #label>{{ $ts._poll.expiration }}</template>
 				<option value="infinite">{{ $ts._poll.infinite }}</option>
 				<option value="at">{{ $ts._poll.at }}</option>
 				<option value="after">{{ $ts._poll.after }}</option>
 			</MkSelect>
 			<section v-if="expiration === 'at'">
-				<MkInput v-model:value="atDate" type="date" class="input">
-					<span>{{ $ts._poll.deadlineDate }}</span>
+				<MkInput v-model="atDate" type="date" class="input">
+					<template #label>{{ $ts._poll.deadlineDate }}</template>
 				</MkInput>
-				<MkInput v-model:value="atTime" type="time" class="input">
-					<span>{{ $ts._poll.deadlineTime }}</span>
+				<MkInput v-model="atTime" type="time" class="input">
+					<template #label>{{ $ts._poll.deadlineTime }}</template>
 				</MkInput>
 			</section>
 			<section v-if="expiration === 'after'">
-				<MkInput v-model:value="after" type="number" class="input">
-					<span>{{ $ts._poll.duration }}</span>
+				<MkInput v-model="after" type="number" class="input">
+					<template #label>{{ $ts._poll.duration }}</template>
 				</MkInput>
-				<MkSelect v-model:value="unit">
+				<MkSelect v-model="unit">
 					<option value="second">{{ $ts._time.second }}</option>
 					<option value="minute">{{ $ts._time.minute }}</option>
 					<option value="hour">{{ $ts._time.hour }}</option>
diff --git a/src/client/components/sample.vue b/src/client/components/sample.vue
index 70949ea357..53eac0e2e6 100644
--- a/src/client/components/sample.vue
+++ b/src/client/components/sample.vue
@@ -1,10 +1,10 @@
 <template>
 <div class="_card">
 	<div class="_content">
-		<MkInput v-model:value="text">
-			<span>Text</span>
+		<MkInput v-model="text">
+			<template #label>Text</template>
 		</MkInput>
-		<MkSwitch v-model:value="flag">
+		<MkSwitch v-model="flag">
 			<span>Switch is now {{ flag ? 'on' : 'off' }}</span>
 		</MkSwitch>
 		<div style="margin: 32px 0;">
diff --git a/src/client/components/signin.vue b/src/client/components/signin.vue
index f8249ffcd6..0c6cd3440a 100755
--- a/src/client/components/signin.vue
+++ b/src/client/components/signin.vue
@@ -3,15 +3,15 @@
 	<div class="auth _section">
 		<div class="avatar" :style="{ backgroundImage: user ? `url('${ user.avatarUrl }')` : null }" v-show="withAvatar"></div>
 		<div class="normal-signin" v-if="!totpLogin">
-			<MkInput v-model:value="username" type="text" pattern="^[a-zA-Z0-9_]+$" spellcheck="false" autofocus required @update:value="onUsernameChange">
-				<span>{{ $ts.username }}</span>
+			<MkInput v-model="username" type="text" pattern="^[a-zA-Z0-9_]+$" spellcheck="false" autofocus required @update:modelValue="onUsernameChange">
+				<template #label>{{ $ts.username }}</template>
 				<template #prefix>@</template>
 				<template #suffix>@{{ host }}</template>
 			</MkInput>
-			<MkInput v-model:value="password" type="password" :with-password-toggle="true" v-if="!user || user && !user.usePasswordLessLogin" required>
-				<span>{{ $ts.password }}</span>
+			<MkInput v-model="password" type="password" :with-password-toggle="true" v-if="!user || user && !user.usePasswordLessLogin" required>
+				<template #label>{{ $ts.password }}</template>
 				<template #prefix><i class="fas fa-lock"></i></template>
-				<template #desc><button class="_textButton" @click="resetPassword">{{ $ts.forgotPassword }}</button></template>
+				<template #caption><button class="_textButton" @click="resetPassword" type="button">{{ $ts.forgotPassword }}</button></template>
 			</MkInput>
 			<MkButton type="submit" primary :disabled="signing" style="margin: 0 auto;">{{ signing ? $ts.loggingIn : $ts.login }}</MkButton>
 		</div>
@@ -27,12 +27,12 @@
 			</div>
 			<div class="twofa-group totp-group">
 				<p style="margin-bottom:0;">{{ $ts.twoStepAuthentication }}</p>
-				<MkInput v-model:value="password" type="password" :with-password-toggle="true" v-if="user && user.usePasswordLessLogin" required>
-					<span>{{ $ts.password }}</span>
+				<MkInput v-model="password" type="password" :with-password-toggle="true" v-if="user && user.usePasswordLessLogin" required>
+					<template #label>{{ $ts.password }}</template>
 					<template #prefix><i class="fas fa-lock"></i></template>
 				</MkInput>
-				<MkInput v-model:value="token" type="text" pattern="^[0-9]{6}$" autocomplete="off" spellcheck="false" required>
-					<span>{{ $ts.token }}</span>
+				<MkInput v-model="token" type="text" pattern="^[0-9]{6}$" autocomplete="off" spellcheck="false" required>
+					<template #label>{{ $ts.token }}</template>
 					<template #prefix><i class="fas fa-gavel"></i></template>
 				</MkInput>
 				<MkButton type="submit" :disabled="signing" primary style="margin: 0 auto;">{{ signing ? $ts.loggingIn : $ts.login }}</MkButton>
diff --git a/src/client/components/signup.vue b/src/client/components/signup.vue
index 671642b291..0cdeb633d8 100644
--- a/src/client/components/signup.vue
+++ b/src/client/components/signup.vue
@@ -1,39 +1,39 @@
 <template>
 <form class="mk-signup" @submit.prevent="onSubmit" :autocomplete="Math.random()">
 	<template v-if="meta">
-		<MkInput v-if="meta.disableRegistration" v-model:value="invitationCode" type="text" :autocomplete="Math.random()" spellcheck="false" required>
-			<span>{{ $ts.invitationCode }}</span>
+		<MkInput v-if="meta.disableRegistration" v-model="invitationCode" type="text" :autocomplete="Math.random()" spellcheck="false" required>
+			<template #label>{{ $ts.invitationCode }}</template>
 			<template #prefix><i class="fas fa-key"></i></template>
 		</MkInput>
-		<MkInput v-model:value="username" type="text" pattern="^[a-zA-Z0-9_]{1,20}$" :autocomplete="Math.random()" spellcheck="false" required @update:value="onChangeUsername">
-			<span>{{ $ts.username }}</span>
+		<MkInput v-model="username" type="text" pattern="^[a-zA-Z0-9_]{1,20}$" :autocomplete="Math.random()" spellcheck="false" required @update:modelValue="onChangeUsername">
+			<template #label>{{ $ts.username }}</template>
 			<template #prefix>@</template>
 			<template #suffix>@{{ host }}</template>
-			<template #desc>
+			<template #caption>
 				<span v-if="usernameState == 'wait'" style="color:#999"><i class="fas fa-spinner fa-pulse fa-fw"></i> {{ $ts.checking }}</span>
-				<span v-if="usernameState == 'ok'" style="color:#3CB7B5"><i class="fas fa-check fa-fw"></i> {{ $ts.available }}</span>
-				<span v-if="usernameState == 'unavailable'" style="color:#FF1161"><i class="fas fa-exclamation-triangle fa-fw"></i> {{ $ts.unavailable }}</span>
-				<span v-if="usernameState == 'error'" style="color:#FF1161"><i class="fas fa-exclamation-triangle fa-fw"></i> {{ $ts.error }}</span>
-				<span v-if="usernameState == 'invalid-format'" style="color:#FF1161"><i class="fas fa-exclamation-triangle fa-fw"></i> {{ $ts.usernameInvalidFormat }}</span>
-				<span v-if="usernameState == 'min-range'" style="color:#FF1161"><i class="fas fa-exclamation-triangle fa-fw"></i> {{ $ts.tooShort }}</span>
-				<span v-if="usernameState == 'max-range'" style="color:#FF1161"><i class="fas fa-exclamation-triangle fa-fw"></i> {{ $ts.tooLong }}</span>
+				<span v-if="usernameState == 'ok'" style="color: var(--success)"><i class="fas fa-check fa-fw"></i> {{ $ts.available }}</span>
+				<span v-if="usernameState == 'unavailable'" style="color: var(--error)"><i class="fas fa-exclamation-triangle fa-fw"></i> {{ $ts.unavailable }}</span>
+				<span v-if="usernameState == 'error'" style="color: var(--error)"><i class="fas fa-exclamation-triangle fa-fw"></i> {{ $ts.error }}</span>
+				<span v-if="usernameState == 'invalid-format'" style="color: var(--error)"><i class="fas fa-exclamation-triangle fa-fw"></i> {{ $ts.usernameInvalidFormat }}</span>
+				<span v-if="usernameState == 'min-range'" style="color: var(--error)"><i class="fas fa-exclamation-triangle fa-fw"></i> {{ $ts.tooShort }}</span>
+				<span v-if="usernameState == 'max-range'" style="color: var(--error)"><i class="fas fa-exclamation-triangle fa-fw"></i> {{ $ts.tooLong }}</span>
 			</template>
 		</MkInput>
-		<MkInput v-model:value="password" type="password" :autocomplete="Math.random()" required @update:value="onChangePassword">
-			<span>{{ $ts.password }}</span>
+		<MkInput v-model="password" type="password" :autocomplete="Math.random()" required @update:modelValue="onChangePassword">
+			<template #label>{{ $ts.password }}</template>
 			<template #prefix><i class="fas fa-lock"></i></template>
-			<template #desc>
-				<p v-if="passwordStrength == 'low'" style="color:#FF1161"><i class="fas fa-exclamation-triangle fa-fw"></i> {{ $ts.weakPassword }}</p>
-				<p v-if="passwordStrength == 'medium'" style="color:#3CB7B5"><i class="fas fa-check fa-fw"></i> {{ $ts.normalPassword }}</p>
-				<p v-if="passwordStrength == 'high'" style="color:#3CB7B5"><i class="fas fa-check fa-fw"></i> {{ $ts.strongPassword }}</p>
+			<template #caption>
+				<span v-if="passwordStrength == 'low'" style="color: var(--error)"><i class="fas fa-exclamation-triangle fa-fw"></i> {{ $ts.weakPassword }}</span>
+				<span v-if="passwordStrength == 'medium'" style="color: var(--warn)"><i class="fas fa-check fa-fw"></i> {{ $ts.normalPassword }}</span>
+				<span v-if="passwordStrength == 'high'" style="color: var(--success)"><i class="fas fa-check fa-fw"></i> {{ $ts.strongPassword }}</span>
 			</template>
 		</MkInput>
-		<MkInput v-model:value="retypedPassword" type="password" :autocomplete="Math.random()" required @update:value="onChangePasswordRetype">
-			<span>{{ $ts.password }} ({{ $ts.retype }})</span>
+		<MkInput v-model="retypedPassword" type="password" :autocomplete="Math.random()" required @update:modelValue="onChangePasswordRetype">
+			<template #label>{{ $ts.password }} ({{ $ts.retype }})</template>
 			<template #prefix><i class="fas fa-lock"></i></template>
-			<template #desc>
-				<p v-if="passwordRetypeState == 'match'" style="color:#3CB7B5"><i class="fas fa-check fa-fw"></i> {{ $ts.passwordMatched }}</p>
-				<p v-if="passwordRetypeState == 'not-match'" style="color:#FF1161"><i class="fas fa-exclamation-triangle fa-fw"></i> {{ $ts.passwordNotMatched }}</p>
+			<template #caption>
+				<span v-if="passwordRetypeState == 'match'" style="color: var(--success)"><i class="fas fa-check fa-fw"></i> {{ $ts.passwordMatched }}</span>
+				<span v-if="passwordRetypeState == 'not-match'" style="color: var(--error)"><i class="fas fa-exclamation-triangle fa-fw"></i> {{ $ts.passwordNotMatched }}</span>
 			</template>
 		</MkInput>
 		<label v-if="meta.tosUrl" class="tou">
diff --git a/src/client/components/token-generate-window.vue b/src/client/components/token-generate-window.vue
index 87a76931e4..fe61f61efa 100644
--- a/src/client/components/token-generate-window.vue
+++ b/src/client/components/token-generate-window.vue
@@ -14,13 +14,15 @@
 		<MkInfo warn>{{ information }}</MkInfo>
 	</div>
 	<div class="_section">
-		<MkInput v-model:value="name">{{ $ts.name }}</MkInput>
+		<MkInput v-model="name">
+			<template #label>{{ $ts.name }}</template>
+		</MkInput>
 	</div>
 	<div class="_section">
 		<div style="margin-bottom: 16px;"><b>{{ $ts.permission }}</b></div>
 		<MkButton inline @click="disableAll">{{ $ts.disableAll }}</MkButton>
 		<MkButton inline @click="enableAll">{{ $ts.enableAll }}</MkButton>
-		<MkSwitch v-for="kind in (initialPermissions || kinds)" :key="kind" v-model:value="permissions[kind]">{{ $t(`_permissions.${kind}`) }}</MkSwitch>
+		<MkSwitch v-for="kind in (initialPermissions || kinds)" :key="kind" v-model="permissions[kind]">{{ $t(`_permissions.${kind}`) }}</MkSwitch>
 	</div>
 </XModalWindow>
 </template>
diff --git a/src/client/components/ui/input.vue b/src/client/components/ui/input.vue
index 7415d9896b..22dd0fe9a5 100644
--- a/src/client/components/ui/input.vue
+++ b/src/client/components/ui/input.vue
@@ -1,32 +1,9 @@
 <template>
-<div class="juejbjww" :class="{ focused, filled, inline, disabled }">
-	<div class="icon" ref="icon"><slot name="icon"></slot></div>
-	<div class="input">
-		<span class="label" ref="labelEl"><slot></slot></span>
-		<span class="title" ref="title">
-			<slot name="title"></slot>
-			<span class="warning" v-if="invalid"><i class="fas fa-exclamation-circle"></i>{{ $refs.input.validationMessage }}</span>
-		</span>
+<div class="matxzzsk">
+	<div class="label" @click="focus"><slot name="label"></slot></div>
+	<div class="input" :class="{ inline, disabled, focused }">
 		<div class="prefix" ref="prefixEl"><slot name="prefix"></slot></div>
-		<input v-if="debounce" ref="inputEl"
-			v-debounce="500"
-			:type="type"
-			v-model.lazy="v"
-			:disabled="disabled"
-			:required="required"
-			:readonly="readonly"
-			:placeholder="placeholder"
-			:pattern="pattern"
-			:autocomplete="autocomplete"
-			:spellcheck="spellcheck"
-			:step="step"
-			@focus="focused = true"
-			@blur="focused = false"
-			@keydown="onKeydown($event)"
-			@input="onInput"
-			:list="id"
-		>
-		<input v-else ref="inputEl"
+		<input ref="inputEl"
 			:type="type"
 			v-model="v"
 			:disabled="disabled"
@@ -48,23 +25,25 @@
 		</datalist>
 		<div class="suffix" ref="suffixEl"><slot name="suffix"></slot></div>
 	</div>
-	<button class="save _textButton" v-if="save && changed" @click="() => { changed = false; save(); }">{{ $ts.save }}</button>
-	<div class="desc _caption"><slot name="desc"></slot></div>
+	<div class="caption"><slot name="caption"></slot></div>
+
+	<MkButton v-if="manualSave && changed" @click="updated" primary><i class="fas fa-save"></i> {{ $ts.save }}</MkButton>
 </div>
 </template>
 
 <script lang="ts">
 import { defineComponent, onMounted, onUnmounted, nextTick, ref, watch, computed, toRefs } from 'vue';
-import debounce from 'v-debounce';
-import * as os from '@client/os';
+import MkButton from './button.vue';
+import { debounce } from 'throttle-debounce';
 
 export default defineComponent({
-	directives: {
-		debounce
+	components: {
+		MkButton,
 	},
+
 	props: {
-		value: {
-			required: false
+		modelValue: {
+			required: true
 		},
 		type: {
 			type: String,
@@ -104,9 +83,6 @@ export default defineComponent({
 		step: {
 			required: false
 		},
-		debounce: {
-			required: false
-		},
 		datalist: {
 			type: Array,
 			required: false,
@@ -116,15 +92,23 @@ export default defineComponent({
 			required: false,
 			default: false
 		},
-		save: {
-			type: Function,
+		debounce: {
+			type: Boolean,
+			required: false,
+			default: false
+		},
+		manualSave: {
+			type: Boolean,
 			required: false,
+			default: false
 		},
 	},
-	emits: ['change', 'keydown', 'enter'],
+
+	emits: ['change', 'keydown', 'enter', 'update:modelValue'],
+
 	setup(props, context) {
-		const { value, type, autofocus } = toRefs(props);
-		const v = ref(value.value);
+		const { modelValue, type, autofocus } = toRefs(props);
+		const v = ref(modelValue.value);
 		const id = Math.random().toString(); // TODO: uuid?
 		const focused = ref(false);
 		const changed = ref(false);
@@ -133,7 +117,6 @@ export default defineComponent({
 		const inputEl = ref(null);
 		const prefixEl = ref(null);
 		const suffixEl = ref(null);
-		const labelEl = ref(null);
 
 		const focus = () => inputEl.value.focus();
 		const onInput = (ev) => {
@@ -148,15 +131,28 @@ export default defineComponent({
 			}
 		};
 
-		watch(value, newValue => {
+		const updated = () => {
+			changed.value = false;
+			if (type?.value === 'number') {
+				context.emit('update:modelValue', parseFloat(v.value));
+			} else {
+				context.emit('update:modelValue', v.value);
+			}
+		};
+
+		const debouncedUpdated = debounce(1000, updated);
+
+		watch(modelValue, newValue => {
 			v.value = newValue;
 		});
 
 		watch(v, newValue => {
-			if (type?.value === 'number') {
-				context.emit('update:value', parseFloat(newValue));
-			} else {
-				context.emit('update:value', newValue);
+			if (!props.manualSave) {
+				if (props.debounce) {
+					debouncedUpdated();
+				} else {
+					updated();
+				}
 			}
 
 			invalid.value = inputEl.value.validity.badInput;
@@ -172,7 +168,6 @@ export default defineComponent({
 				// 非表示状態だと要素の幅などは0になってしまうので、定期的に計算する
 				const clock = setInterval(() => {
 					if (prefixEl.value) {
-						labelEl.value.style.left = (prefixEl.value.offsetLeft + prefixEl.value.offsetWidth) + 'px';
 						if (prefixEl.value.offsetWidth) {
 							inputEl.value.style.paddingLeft = prefixEl.value.offsetWidth + 'px';
 						}
@@ -200,148 +195,70 @@ export default defineComponent({
 			inputEl,
 			prefixEl,
 			suffixEl,
-			labelEl,
 			focus,
 			onInput,
 			onKeydown,
+			updated,
 		};
 	},
 });
 </script>
 
 <style lang="scss" scoped>
-.juejbjww {
-	position: relative;
-	margin: 32px 0;
-
-	&:not(.inline):first-child {
-		margin-top: 8px;
-	}
-
-	&:not(.inline):last-child {
-		margin-bottom: 8px;
+.matxzzsk {
+	margin: 1em 0;
+
+	> .label {
+		font-size: 0.85em;
+		padding: 0 0 6px 6px;
+		font-weight: bold;
+		user-select: none;
 	}
 
-	> .icon {
-		position: absolute;
-		top: 0;
-		left: 0;
-		width: 24px;
-		text-align: center;
-		line-height: 32px;
-
-		&:not(:empty) + .input {
-			margin-left: 28px;
-		}
+	> .caption {
+		font-size: 0.8em;
+		padding: 6px 0 0 6px;
+		color: var(--fgTransparentWeak);
 	}
 
 	> .input {
+		$height: 42px;
 		position: relative;
 
-		&:before {
-			content: '';
-			display: block;
-			position: absolute;
-			bottom: 0;
-			left: 0;
-			right: 0;
-			height: 1px;
-			background: var(--inputBorder);
-		}
-
-		&:after {
-			content: '';
-			display: block;
-			position: absolute;
-			bottom: 0;
-			left: 0;
-			right: 0;
-			height: 2px;
-			background: var(--accent);
-			opacity: 0;
-			transform: scaleX(0.12);
-			transition: border 0.3s cubic-bezier(0.4, 0, 0.2, 1), opacity 0.3s cubic-bezier(0.4, 0, 0.2, 1), transform 0.3s cubic-bezier(0.4, 0, 0.2, 1);
-			will-change: border opacity transform;
-		}
-
-		> .label {
-			position: absolute;
-			z-index: 1;
-			top: 0;
-			left: 0;
-			pointer-events: none;
-			transition: 0.4s cubic-bezier(0.25, 0.8, 0.25, 1);
-			transition-duration: 0.3s;
-			font-size: 1em;
-			line-height: 32px;
-			color: var(--inputLabel);
-			pointer-events: none;
-			//will-change transform
-			transform-origin: top left;
-			transform: scale(1);
-		}
-
-		> .title {
-			position: absolute;
-			z-index: 1;
-			top: -17px;
-			left: 0 !important;
-			pointer-events: none;
-			font-size: 1em;
-			line-height: 32px;
-			color: var(--inputLabel);
-			pointer-events: none;
-			//will-change transform
-			transform-origin: top left;
-			transform: scale(.75);
-			white-space: nowrap;
-			width: 133%;
-			overflow: hidden;
-			text-overflow: ellipsis;
-
-			> .warning {
-				margin-left: 0.5em;
-				color: var(--infoWarnFg);
-
-				> svg {
-					margin-right: 0.1em;
-				}
-			}
-		}
-
 		> input {
-			$height: 32px;
+			appearance: none;
+			-webkit-appearance: none;
 			display: block;
 			height: $height;
 			width: 100%;
 			margin: 0;
-			padding: 0;
+			padding: 0 12px;
 			font: inherit;
 			font-weight: normal;
 			font-size: 1em;
-			line-height: $height;
-			color: var(--inputText);
-			background: transparent;
-			border: none;
-			border-radius: 0;
+			color: var(--fg);
+			background: var(--panel);
+			border: solid 1px var(--inputBorder);
+			border-radius: 6px;
 			outline: none;
 			box-shadow: none;
 			box-sizing: border-box;
 
-			&[type='file'] {
-				display: none;
+			&:hover {
+				border-color: var(--inputBorderHover);
 			}
 		}
 
 		> .prefix,
 		> .suffix {
-			display: block;
+			display: flex;
+			align-items: center;
 			position: absolute;
 			z-index: 1;
 			top: 0;
+			padding: 0 12px;
 			font-size: 1em;
-			line-height: 32px;
-			color: var(--inputLabel);
+			height: $height;
 			pointer-events: none;
 
 			&:empty {
@@ -360,66 +277,32 @@ export default defineComponent({
 
 		> .prefix {
 			left: 0;
-			padding-right: 4px;
+			padding-right: 6px;
 		}
 
 		> .suffix {
 			right: 0;
-			padding-left: 4px;
-		}
-	}
-
-	> .save {
-		margin: 6px 0 0 0;
-		font-size: 0.8em;
-	}
-
-	> .desc {
-		margin: 6px 0 0 0;
-
-		&:empty {
-			display: none;
+			padding-left: 6px;
 		}
 
-		* {
+		&.inline {
+			display: inline-block;
 			margin: 0;
 		}
-	}
-
-	&.focused {
-		> .input {
-			&:after {
-				opacity: 1;
-				transform: scaleX(1);
-			}
-
-			> .label {
-				color: var(--accent);
-			}
-		}
-	}
 
-	&.focused,
-	&.filled {
-		> .input {
-			> .label {
-				top: -17px;
-				left: 0 !important;
-				transform: scale(0.75);
+		&.focused {
+			> input {
+				border-color: var(--accent);
+				//box-shadow: 0 0 0 4px var(--focus);
 			}
 		}
-	}
 
-	&.inline {
-		display: inline-block;
-		margin: 0;
-	}
-
-	&.disabled {
-		opacity: 0.7;
+		&.disabled {
+			opacity: 0.7;
 
-		&, * {
-			cursor: not-allowed !important;
+			&, * {
+				cursor: not-allowed !important;
+			}
 		}
 	}
 }
diff --git a/src/client/components/ui/select.vue b/src/client/components/ui/select.vue
index e78c44fe0d..c38bd7230f 100644
--- a/src/client/components/ui/select.vue
+++ b/src/client/components/ui/select.vue
@@ -1,185 +1,210 @@
 <template>
-<div class="eiipwacr" :class="{ focused, disabled, filled, inline }">
-	<div class="icon" ref="icon"><slot name="icon"></slot></div>
-	<div class="input" @click="focus">
-		<span class="label" ref="label"><slot name="label"></slot></span>
-		<div class="prefix" ref="prefix"><slot name="prefix"></slot></div>
-		<select ref="input"
+<div class="vblkjoeq">
+	<div class="label" @click="focus"><slot name="label"></slot></div>
+	<div class="input" :class="{ inline, disabled, focused }">
+		<div class="prefix" ref="prefixEl"><slot name="prefix"></slot></div>
+		<select ref="inputEl"
 			v-model="v"
-			:required="required"
 			:disabled="disabled"
+			:required="required"
+			:readonly="readonly"
+			:placeholder="placeholder"
 			@focus="focused = true"
 			@blur="focused = false"
+			@input="onInput"
 		>
 			<slot></slot>
 		</select>
-		<div class="suffix">
-			<slot name="suffix">
-				<i class="fas fa-chevron-down"></i>
-			</slot>
-		</div>
+		<div class="suffix" ref="suffixEl"><i class="fas fa-chevron-down"></i></div>
 	</div>
-	<div class="text"><slot name="text"></slot></div>
+	<div class="caption"><slot name="caption"></slot></div>
+
+	<MkButton v-if="manualSave && changed" @click="updated" primary><i class="fas fa-save"></i> {{ $ts.save }}</MkButton>
 </div>
 </template>
 
 <script lang="ts">
-import { defineComponent } from 'vue';
+import { defineComponent, onMounted, onUnmounted, nextTick, ref, watch, computed, toRefs } from 'vue';
+import MkButton from './button.vue';
 
 export default defineComponent({
+	components: {
+		MkButton,
+	},
+
 	props: {
-		value: {
-			required: false
+		modelValue: {
+			required: true
 		},
 		required: {
 			type: Boolean,
 			required: false
 		},
+		readonly: {
+			type: Boolean,
+			required: false
+		},
 		disabled: {
 			type: Boolean,
 			required: false
 		},
+		placeholder: {
+			type: String,
+			required: false
+		},
+		autofocus: {
+			type: Boolean,
+			required: false,
+			default: false
+		},
 		inline: {
 			type: Boolean,
 			required: false,
 			default: false
 		},
+		manualSave: {
+			type: Boolean,
+			required: false,
+			default: false
+		},
 	},
-	data() {
-		return {
-			focused: false,
+
+	emits: ['change', 'update:modelValue'],
+
+	setup(props, context) {
+		const { modelValue, autofocus } = toRefs(props);
+		const v = ref(modelValue.value);
+		const focused = ref(false);
+		const changed = ref(false);
+		const invalid = ref(false);
+		const filled = computed(() => v.value !== '' && v.value != null);
+		const inputEl = ref(null);
+		const prefixEl = ref(null);
+		const suffixEl = ref(null);
+
+		const focus = () => inputEl.value.focus();
+		const onInput = (ev) => {
+			changed.value = true;
+			context.emit('change', ev);
 		};
-	},
-	computed: {
-		v: {
-			get() {
-				return this.value;
-			},
-			set(v) {
-				this.$emit('update:value', v);
+
+		const updated = () => {
+			changed.value = false;
+			context.emit('update:modelValue', v.value);
+		};
+
+		watch(modelValue, newValue => {
+			v.value = newValue;
+		});
+
+		watch(v, newValue => {
+			if (!props.manualSave) {
+				updated();
 			}
-		},
-		filled(): boolean {
-			return true;
-		}
-	},
-	mounted() {
-		if (this.$refs.prefix) {
-			this.$refs.label.style.left = (this.$refs.prefix.offsetLeft + this.$refs.prefix.offsetWidth) + 'px';
-		}
+
+			invalid.value = inputEl.value.validity.badInput;
+		});
+
+		onMounted(() => {
+			nextTick(() => {
+				if (autofocus.value) {
+					focus();
+				}
+
+				// このコンポーネントが作成された時、非表示状態である場合がある
+				// 非表示状態だと要素の幅などは0になってしまうので、定期的に計算する
+				const clock = setInterval(() => {
+					if (prefixEl.value) {
+						if (prefixEl.value.offsetWidth) {
+							inputEl.value.style.paddingLeft = prefixEl.value.offsetWidth + 'px';
+						}
+					}
+					if (suffixEl.value) {
+						if (suffixEl.value.offsetWidth) {
+							inputEl.value.style.paddingRight = suffixEl.value.offsetWidth + 'px';
+						}
+					}
+				}, 100);
+
+				onUnmounted(() => {
+					clearInterval(clock);
+				});
+			});
+		});
+
+		return {
+			v,
+			focused,
+			invalid,
+			changed,
+			filled,
+			inputEl,
+			prefixEl,
+			suffixEl,
+			focus,
+			onInput,
+			updated,
+		};
 	},
-	methods: {
-		focus() {
-			this.$refs.input.focus();
-		}
-	}
 });
 </script>
 
 <style lang="scss" scoped>
-.eiipwacr {
-	position: relative;
-	margin: 32px 0;
-
-	&:not(.inline):first-child {
-		margin-top: 8px;
+.vblkjoeq {
+	margin: 1em 0;
+
+	> .label {
+		font-size: 0.85em;
+		padding: 0 0 6px 6px;
+		font-weight: bold;
+		user-select: none;
 	}
 
-	&:not(.inline):last-child {
-		margin-bottom: 8px;
-	}
-
-	> .icon {
-		position: absolute;
-		top: 0;
-		left: 0;
-		width: 24px;
-		text-align: center;
-		line-height: 32px;
-
-		&:not(:empty) + .input {
-			margin-left: 28px;
-		}
+	> .caption {
+		font-size: 0.8em;
+		padding: 6px 0 0 6px;
+		color: var(--fgTransparentWeak);
 	}
 
 	> .input {
-		display: flex;
+		$height: 42px;
 		position: relative;
 
-		&:before {
-			content: '';
-			display: block;
-			position: absolute;
-			bottom: 0;
-			left: 0;
-			right: 0;
-			height: 1px;
-			background: var(--inputBorder);
-		}
-
-		&:after {
-			content: '';
-			display: block;
-			position: absolute;
-			bottom: 0;
-			left: 0;
-			right: 0;
-			height: 2px;
-			background: var(--accent);
-			opacity: 0;
-			transform: scaleX(0.12);
-			transition: border 0.3s cubic-bezier(0.4, 0, 0.2, 1), opacity 0.3s cubic-bezier(0.4, 0, 0.2, 1), transform 0.3s cubic-bezier(0.4, 0, 0.2, 1);
-			will-change: border opacity transform;
-		}
-
-		> .label {
-			position: absolute;
-			top: 0;
-			left: 0;
-			pointer-events: none;
-			transition: 0.4s cubic-bezier(0.25, 0.8, 0.25, 1);
-			transition-duration: 0.3s;
-			font-size: 1em;
-			line-height: 32px;
-			pointer-events: none;
-			//will-change transform
-			transform-origin: top left;
-			transform: scale(1);
-		}
-
 		> select {
+			appearance: none;
+			-webkit-appearance: none;
 			display: block;
-			flex: 1;
+			height: $height;
 			width: 100%;
-			padding: 0;
+			margin: 0;
+			padding: 0 8px;
 			font: inherit;
 			font-weight: normal;
 			font-size: 1em;
-			height: 32px;
-			background: none;
-			border: none;
-			border-radius: 0;
+			color: var(--fg);
+			background: var(--panel);
+			border: solid 1px var(--inputBorder);
+			border-radius: 6px;
 			outline: none;
 			box-shadow: none;
-			appearance: none;
-			-webkit-appearance: none;
-			color: var(--fg);
+			box-sizing: border-box;
+			cursor: pointer;
 
-			option,
-			optgroup {
-				color: var(--fg);
-				background: var(--bg);
+			&:hover {
+				border-color: var(--inputBorderHover);
 			}
 		}
 
 		> .prefix,
 		> .suffix {
-			display: block;
-			align-self: center;
-			justify-self: center;
+			display: flex;
+			align-items: center;
+			position: absolute;
+			z-index: 1;
+			top: 0;
+			padding: 0 12px;
 			font-size: 1em;
-			line-height: 32px;
-			color: var(--inputLabel);
+			height: $height;
 			pointer-events: none;
 
 			&:empty {
@@ -187,53 +212,41 @@ export default defineComponent({
 			}
 
 			> * {
-				display: block;
+				display: inline-block;
 				min-width: 16px;
+				max-width: 150px;
+				overflow: hidden;
+				white-space: nowrap;
+				text-overflow: ellipsis;
 			}
 		}
 
 		> .prefix {
-			padding-right: 4px;
+			left: 0;
+			padding-right: 6px;
 		}
 
 		> .suffix {
-			padding-left: 4px;
-		}
-	}
-
-	> .text {
-		margin: 6px 0;
-		font-size: 0.8em;
-
-		&:empty {
-			display: none;
+			right: 0;
+			padding-left: 6px;
 		}
 
-		* {
+		&.inline {
+			display: inline-block;
 			margin: 0;
 		}
-	}
-
-	&.focused {
-		> .input {
-			&:after {
-				opacity: 1;
-				transform: scaleX(1);
-			}
 
-			> .label {
-				color: var(--accent);
+		&.focused {
+			> select {
+				border-color: var(--accent);
 			}
 		}
-	}
 
-	&.focused,
-	&.filled {
-		> .input {
-			> .label {
-				top: -17px;
-				left: 0 !important;
-				transform: scale(0.75);
+		&.disabled {
+			opacity: 0.7;
+
+			&, * {
+				cursor: not-allowed !important;
 			}
 		}
 	}
diff --git a/src/client/components/ui/switch.vue b/src/client/components/ui/switch.vue
index 762fba6d99..7aa9c0619d 100644
--- a/src/client/components/ui/switch.vue
+++ b/src/client/components/ui/switch.vue
@@ -18,7 +18,7 @@
 	</span>
 	<span class="label">
 		<span><slot></slot></span>
-		<p><slot name="desc"></slot></p>
+		<p><slot name="caption"></slot></p>
 	</span>
 </div>
 </template>
@@ -28,7 +28,7 @@ import { defineComponent } from 'vue';
 
 export default defineComponent({
 	props: {
-		value: {
+		modelValue: {
 			type: Boolean,
 			default: false
 		},
@@ -39,13 +39,13 @@ export default defineComponent({
 	},
 	computed: {
 		checked(): boolean {
-			return this.value;
+			return this.modelValue;
 		}
 	},
 	methods: {
 		toggle() {
 			if (this.disabled) return;
-			this.$emit('update:value', !this.checked);
+			this.$emit('update:modelValue', !this.checked);
 		}
 	}
 });
@@ -136,7 +136,7 @@ export default defineComponent({
 
 		> p {
 			margin: 0;
-			opacity: 0.7;
+			color: var(--fgTransparentWeak);
 			font-size: 90%;
 		}
 	}
diff --git a/src/client/components/ui/textarea.vue b/src/client/components/ui/textarea.vue
index 1032c10d14..592b8b9ca0 100644
--- a/src/client/components/ui/textarea.vue
+++ b/src/client/components/ui/textarea.vue
@@ -1,30 +1,45 @@
 <template>
-<div class="adhpbeos" :class="{ focused, filled, tall, pre }">
-	<div class="input">
-		<span class="label" ref="label"><slot></slot></span>
-		<textarea ref="input" :class="{ code, _monospace: code }"
-			:value="value"
+<div class="adhpbeos">
+	<div class="label" @click="focus"><slot name="label"></slot></div>
+	<div class="input" :class="{ disabled, focused, tall, pre }">
+		<textarea ref="inputEl"
+			:class="{ code, _monospace: code }"
+			v-model="v"
+			:disabled="disabled"
 			:required="required"
 			:readonly="readonly"
+			:placeholder="placeholder"
 			:pattern="pattern"
 			:autocomplete="autocomplete"
-			:spellcheck="!code"
-			@input="onInput"
+			:spellcheck="spellcheck"
 			@focus="focused = true"
 			@blur="focused = false"
+			@keydown="onKeydown($event)"
+			@input="onInput"
 		></textarea>
 	</div>
-	<button class="save _textButton" v-if="save && changed" @click="() => { changed = false; save(); }">{{ $ts.save }}</button>
-	<div class="desc _caption"><slot name="desc"></slot></div>
+	<div class="caption"><slot name="caption"></slot></div>
+
+	<MkButton v-if="manualSave && changed" @click="updated" primary><i class="fas fa-save"></i> {{ $ts.save }}</MkButton>
 </div>
 </template>
 
 <script lang="ts">
-import { defineComponent } from 'vue';
+import { defineComponent, onMounted, onUnmounted, nextTick, ref, watch, computed, toRefs } from 'vue';
+import MkButton from './button.vue';
+import { debounce } from 'throttle-debounce';
 
 export default defineComponent({
+	components: {
+		MkButton,
+	},
+
 	props: {
-		value: {
+		modelValue: {
+			required: true
+		},
+		type: {
+			type: String,
 			required: false
 		},
 		required: {
@@ -35,14 +50,29 @@ export default defineComponent({
 			type: Boolean,
 			required: false
 		},
+		disabled: {
+			type: Boolean,
+			required: false
+		},
 		pattern: {
 			type: String,
 			required: false
 		},
-		autocomplete: {
+		placeholder: {
 			type: String,
 			required: false
 		},
+		autofocus: {
+			type: Boolean,
+			required: false,
+			default: false
+		},
+		autocomplete: {
+			required: false
+		},
+		spellcheck: {
+			required: false
+		},
 		code: {
 			type: Boolean,
 			required: false
@@ -57,169 +87,156 @@ export default defineComponent({
 			required: false,
 			default: false
 		},
-		save: {
-			type: Function,
+		debounce: {
+			type: Boolean,
 			required: false,
+			default: false
+		},
+		manualSave: {
+			type: Boolean,
+			required: false,
+			default: false
 		},
 	},
-	data() {
+
+	emits: ['change', 'keydown', 'enter', 'update:modelValue'],
+
+	setup(props, context) {
+		const { modelValue, autofocus } = toRefs(props);
+		const v = ref(modelValue.value);
+		const focused = ref(false);
+		const changed = ref(false);
+		const invalid = ref(false);
+		const filled = computed(() => v.value !== '' && v.value != null);
+		const inputEl = ref(null);
+
+		const focus = () => inputEl.value.focus();
+		const onInput = (ev) => {
+			changed.value = true;
+			context.emit('change', ev);
+		};
+		const onKeydown = (ev: KeyboardEvent) => {
+			context.emit('keydown', ev);
+
+			if (ev.code === 'Enter') {
+				context.emit('enter');
+			}
+		};
+
+		const updated = () => {
+			changed.value = false;
+			context.emit('update:modelValue', v.value);
+		};
+
+		const debouncedUpdated = debounce(1000, updated);
+
+		watch(modelValue, newValue => {
+			v.value = newValue;
+		});
+
+		watch(v, newValue => {
+			if (!props.manualSave) {
+				if (props.debounce) {
+					debouncedUpdated();
+				} else {
+					updated();
+				}
+			}
+
+			invalid.value = inputEl.value.validity.badInput;
+		});
+
+		onMounted(() => {
+			nextTick(() => {
+				if (autofocus.value) {
+					focus();
+				}
+			});
+		});
+
 		return {
-			focused: false,
-			changed: false,
-		}
-	},
-	computed: {
-		filled(): boolean {
-			return this.value != '' && this.value != null;
-		}
+			v,
+			focused,
+			invalid,
+			changed,
+			filled,
+			inputEl,
+			focus,
+			onInput,
+			onKeydown,
+			updated,
+		};
 	},
-	methods: {
-		focus() {
-			this.$refs.input.focus();
-		},
-		onInput(ev) {
-			this.changed = true;
-			this.$emit('update:value', ev.target.value);
-		}
-	}
 });
 </script>
 
 <style lang="scss" scoped>
 .adhpbeos {
-	margin: 42px 0 32px 0;
-	position: relative;
+	margin: 1em 0;
 
-	&:first-child {
-		margin-top: 16px;
+	> .label {
+		font-size: 0.85em;
+		padding: 0 0 6px 6px;
+		font-weight: bold;
+		user-select: none;
 	}
 
-	&:last-child {
-		margin-bottom: 0;
+	> .caption {
+		font-size: 0.8em;
+		padding: 6px 0 0 6px;
+		color: var(--fgTransparentWeak);
 	}
 
 	> .input {
 		position: relative;
-	
-		&:before {
-			content: '';
-			display: block;
-			position: absolute;
-			top: 0;
-			bottom: 0;
-			left: 0;
-			right: 0;
-			background: none;
-			border: solid 1px var(--inputBorder);
-			border-radius: 3px;
-			pointer-events: none;
-		}
-
-		&:after {
-			content: '';
-			display: block;
-			position: absolute;
-			top: 0;
-			bottom: 0;
-			left: 0;
-			right: 0;
-			background: none;
-			border: solid 2px var(--accent);
-			border-radius: 3px;
-			opacity: 0;
-			transition: opacity 0.3s cubic-bezier(0.4, 0, 0.2, 1);
-			pointer-events: none;
-		}
-
-		> .label {
-			position: absolute;
-			top: 6px;
-			left: 12px;
-			pointer-events: none;
-			transition: 0.4s cubic-bezier(0.25, 0.8, 0.25, 1);
-			transition-duration: 0.3s;
-			font-size: 1em;
-			line-height: 32px;
-			pointer-events: none;
-			//will-change transform
-			transform-origin: top left;
-			transform: scale(1);
-		}
 
 		> textarea {
+			appearance: none;
+			-webkit-appearance: none;
 			display: block;
 			width: 100%;
 			min-width: 100%;
 			max-width: 100%;
 			min-height: 130px;
+			margin: 0;
 			padding: 12px;
-			box-sizing: border-box;
 			font: inherit;
 			font-weight: normal;
 			font-size: 1em;
-			background: transparent;
-			border: none;
-			border-radius: 0;
+			color: var(--fg);
+			background: var(--panel);
+			border: solid 1px var(--inputBorder);
+			border-radius: 6px;
 			outline: none;
 			box-shadow: none;
-			color: var(--fg);
+			box-sizing: border-box;
 
-			&.code {
-				tab-size: 2;
+			&:hover {
+				border-color: var(--inputBorderHover);
 			}
 		}
-	}
-
-	> .save {
-		margin: 6px 0 0 0;
-		font-size: 0.8em;
-	}
-
-	> .desc {
-		margin: 6px 0 0 0;
-
-		&:empty {
-			display: none;
-		}
-
-		* {
-			margin: 0;
-		}
-	}
 
-	&.focused {
-		> .input {
-			&:after {
-				opacity: 1;
-			}
-
-			> .label {
-				color: var(--accent);
+		&.focused {
+			> textarea {
+				border-color: var(--accent);
 			}
 		}
-	}
 
-	&.focused,
-	&.filled {
-		> .input {
-			> .label {
-				top: -24px;
-				left: 0 !important;
-				transform: scale(0.75);
+		&.disabled {
+			opacity: 0.7;
+
+			&, * {
+				cursor: not-allowed !important;
 			}
 		}
-	}
 
-	&.tall {
-		> .input {
+		&.tall {
 			> textarea {
 				min-height: 200px;
 			}
 		}
-	}
 
-	&.pre {
-		> .input {
+		&.pre {
 			> textarea {
 				white-space: pre;
 			}
diff --git a/src/client/components/user-select-dialog.vue b/src/client/components/user-select-dialog.vue
index 74081753b7..8e7b0a190c 100644
--- a/src/client/components/user-select-dialog.vue
+++ b/src/client/components/user-select-dialog.vue
@@ -11,8 +11,14 @@
 	<div class="tbhwbxda _monolithic_">
 		<div class="_section">
 			<div class="inputs">
-				<MkInput v-model:value="username" class="input" @update:value="search" ref="username"><span>{{ $ts.username }}</span><template #prefix>@</template></MkInput>
-				<MkInput v-model:value="host" class="input" @update:value="search"><span>{{ $ts.host }}</span><template #prefix>@</template></MkInput>
+				<MkInput v-model="username" class="input" @update:modelValue="search" ref="username">
+					<template #label>{{ $ts.username }}</template>
+					<template #prefix>@</template>
+				</MkInput>
+				<MkInput v-model="host" class="input" @update:modelValue="search">
+					<template #label>{{ $ts.host }}</template>
+					<template #prefix>@</template>
+				</MkInput>
 			</div>
 		</div>
 		<div class="_section result" v-if="username != '' || host != ''" :class="{ hit: users.length > 0 }">
diff --git a/src/client/components/widgets.vue b/src/client/components/widgets.vue
index 0baef86565..6e5c2d5ade 100644
--- a/src/client/components/widgets.vue
+++ b/src/client/components/widgets.vue
@@ -2,7 +2,7 @@
 <div class="vjoppmmu">
 	<template v-if="edit">
 		<header>
-			<MkSelect v-model:value="widgetAdderSelected" style="margin-bottom: var(--margin)">
+			<MkSelect v-model="widgetAdderSelected" style="margin-bottom: var(--margin)">
 				<template #label>{{ $ts.selectWidget }}</template>
 				<option v-for="widget in widgetDefs" :value="widget" :key="widget">{{ $t(`_widgets.${widget}`) }}</option>
 			</MkSelect>
diff --git a/src/client/pages/api-console.vue b/src/client/pages/api-console.vue
index b153d10396..adae17658c 100644
--- a/src/client/pages/api-console.vue
+++ b/src/client/pages/api-console.vue
@@ -1,13 +1,13 @@
 <template>
 <div class="_root">
 	<div class="_block" style="padding: 24px;">
-		<MkInput v-model:value="endpoint" :datalist="endpoints" @update:value="onEndpointChange()">
-			<span>Endpoint</span>
+		<MkInput v-model="endpoint" :datalist="endpoints" @update:modelValue="onEndpointChange()">
+			<template #label>Endpoint</template>
 		</MkInput>
-		<MkTextarea v-model:value="body" code>
-			<span>Params (JSON or JSON5)</span>
+		<MkTextarea v-model="body" code>
+			<template #label>Params (JSON or JSON5)</template>
 		</MkTextarea>
-		<MkSwitch v-model:value="withCredential">
+		<MkSwitch v-model="withCredential">
 			With credential
 		</MkSwitch>
 		<MkButton primary full @click="send" :disabled="sending">
@@ -16,8 +16,8 @@
 		</MkButton>
 	</div>
 	<div v-if="res" class="_block" style="padding: 24px;">
-		<MkTextarea v-model:value="res" code readonly tall>
-			<span>Response</span>
+		<MkTextarea v-model="res" code readonly tall>
+			<template #label>Response</template>
 		</MkTextarea>
 	</div>
 </div>
diff --git a/src/client/pages/channel-editor.vue b/src/client/pages/channel-editor.vue
index bc772d34fa..eeea0b70aa 100644
--- a/src/client/pages/channel-editor.vue
+++ b/src/client/pages/channel-editor.vue
@@ -2,9 +2,13 @@
 <div>
 	<div class="_section">
 		<div class="_content">
-			<MkInput v-model:value="name">{{ $ts.name }}</MkInput>
+			<MkInput v-model="name">
+				<template #label>{{ $ts.name }}</template>
+			</MkInput>
 
-			<MkTextarea v-model:value="description">{{ $ts.description }}</MkTextarea>
+			<MkTextarea v-model="description">
+				<template #label>{{ $ts.description }}</template>
+			</MkTextarea>
 
 			<div class="banner">
 				<MkButton v-if="bannerId == null" @click="setBannerImage"><i class="fas fa-plus"></i> {{ $ts._channel.setBanner }}</MkButton>
diff --git a/src/client/pages/docs.vue b/src/client/pages/docs.vue
index a419bf5f92..639a95bb7a 100644
--- a/src/client/pages/docs.vue
+++ b/src/client/pages/docs.vue
@@ -1,7 +1,10 @@
 <template>
 <div class="vtaihdtm">
 	<div class="search">
-		<MkInput v-model:value="query" :debounce="true" type="search"><template #icon><i class="fas fa-search"></i></template><span>{{ $ts.search }}</span></MkInput>
+		<MkInput v-model="query" :debounce="true" type="search">
+			<template #prefix><i class="fas fa-search"></i></template>
+			<template #label>{{ $ts.search }}</template>
+		</MkInput>
 	</div>
 	<MkFolder>
 		<template #header>{{ $ts._docs.generalTopics }}</template>
diff --git a/src/client/pages/explore.vue b/src/client/pages/explore.vue
index 7bcb09d8c5..7054940a1a 100644
--- a/src/client/pages/explore.vue
+++ b/src/client/pages/explore.vue
@@ -2,7 +2,10 @@
 <div class="lznhrdub _root">
 	<div>
 		<div class="_isolated">
-			<MkInput v-model:value="query" :debounce="true" type="search"><template #icon><i class="fas fa-search"></i></template><span>{{ $ts.searchUser }}</span></MkInput>
+			<MkInput v-model="query" :debounce="true" type="search">
+				<template #prefix><i class="fas fa-search"></i></template>
+				<template #label>{{ $ts.searchUser }}</template>
+			</MkInput>
 		</div>
 
 		<XUserList v-if="query" class="_gap" :pagination="searchPagination" ref="search"/>
diff --git a/src/client/pages/instance-info.vue b/src/client/pages/instance-info.vue
index c66ad50f6d..4165f73734 100644
--- a/src/client/pages/instance-info.vue
+++ b/src/client/pages/instance-info.vue
@@ -62,7 +62,7 @@
 			<div class="_formLabel">{{ $ts.statistics }}</div>
 			<div class="_formPanel cmhjzshl">
 				<div class="selects">
-					<MkSelect v-model:value="chartSrc" style="margin: 0; flex: 1;">
+					<MkSelect v-model="chartSrc" style="margin: 0; flex: 1;">
 						<option value="requests">{{ $ts._instanceCharts.requests }}</option>
 						<option value="users">{{ $ts._instanceCharts.users }}</option>
 						<option value="users-total">{{ $ts._instanceCharts.usersTotal }}</option>
@@ -75,7 +75,7 @@
 						<option value="drive-files">{{ $ts._instanceCharts.files }}</option>
 						<option value="drive-files-total">{{ $ts._instanceCharts.filesTotal }}</option>
 					</MkSelect>
-					<MkSelect v-model:value="chartSpan" style="margin: 0;">
+					<MkSelect v-model="chartSpan" style="margin: 0;">
 						<option value="hour">{{ $ts.perHour }}</option>
 						<option value="day">{{ $ts.perDay }}</option>
 					</MkSelect>
diff --git a/src/client/pages/instance/abuses.vue b/src/client/pages/instance/abuses.vue
index 2af57bb975..ac20ebabe5 100644
--- a/src/client/pages/instance/abuses.vue
+++ b/src/client/pages/instance/abuses.vue
@@ -3,19 +3,19 @@
 	<div class="_section reports">
 		<div class="_content">
 			<div class="inputs" style="display: flex;">
-				<MkSelect v-model:value="state" style="margin: 0; flex: 1;">
+				<MkSelect v-model="state" style="margin: 0; flex: 1;">
 					<template #label>{{ $ts.state }}</template>
 					<option value="all">{{ $ts.all }}</option>
 					<option value="unresolved">{{ $ts.unresolved }}</option>
 					<option value="resolved">{{ $ts.resolved }}</option>
 				</MkSelect>
-				<MkSelect v-model:value="targetUserOrigin" style="margin: 0; flex: 1;">
+				<MkSelect v-model="targetUserOrigin" style="margin: 0; flex: 1;">
 					<template #label>{{ $ts.targetUserOrigin }}</template>
 					<option value="combined">{{ $ts.all }}</option>
 					<option value="local">{{ $ts.local }}</option>
 					<option value="remote">{{ $ts.remote }}</option>
 				</MkSelect>
-				<MkSelect v-model:value="reporterOrigin" style="margin: 0; flex: 1;">
+				<MkSelect v-model="reporterOrigin" style="margin: 0; flex: 1;">
 					<template #label>{{ $ts.reporterOrigin }}</template>
 					<option value="combined">{{ $ts.all }}</option>
 					<option value="local">{{ $ts.local }}</option>
diff --git a/src/client/pages/instance/ads.vue b/src/client/pages/instance/ads.vue
index 6b536793b7..50c8c29cbf 100644
--- a/src/client/pages/instance/ads.vue
+++ b/src/client/pages/instance/ads.vue
@@ -4,11 +4,11 @@
 	<section class="_card _gap ads" v-for="ad in ads">
 		<div class="_content ad">
 			<MkAd v-if="ad.url" :specify="ad"/>
-			<MkInput v-model:value="ad.url" type="url">
-				<span>URL</span>
+			<MkInput v-model="ad.url" type="url">
+				<template #label>URL</template>
 			</MkInput>
-			<MkInput v-model:value="ad.imageUrl">
-				<span>{{ $ts.imageUrl }}</span>
+			<MkInput v-model="ad.imageUrl">
+				<template #label>{{ $ts.imageUrl }}</template>
 			</MkInput>
 			<div style="margin: 32px 0;">
 				<MkRadio v-model="ad.place" value="square">square</MkRadio>
@@ -23,14 +23,14 @@
 				<MkRadio v-model="ad.priority" value="low">{{ $ts.low }}</MkRadio>
 			</div>
 			-->
-			<MkInput v-model:value="ad.ratio" type="number">
-				<span>{{ $ts.ratio }}</span>
+			<MkInput v-model="ad.ratio" type="number">
+				<template #label>{{ $ts.ratio }}</template>
 			</MkInput>
-			<MkInput v-model:value="ad.expiresAt" type="date">
-				<span>{{ $ts.expiration }}</span>
+			<MkInput v-model="ad.expiresAt" type="date">
+				<template #label>{{ $ts.expiration }}</template>
 			</MkInput>
-			<MkTextarea v-model:value="ad.memo">
-				<span>{{ $ts.memo }}</span>
+			<MkTextarea v-model="ad.memo">
+				<template #label>{{ $ts.memo }}</template>
 			</MkTextarea>
 			<div class="buttons">
 				<MkButton class="button" inline @click="save(ad)" primary><i class="fas fa-save"></i> {{ $ts.save }}</MkButton>
diff --git a/src/client/pages/instance/announcements.vue b/src/client/pages/instance/announcements.vue
index ac0e9d5135..d48e3737ad 100644
--- a/src/client/pages/instance/announcements.vue
+++ b/src/client/pages/instance/announcements.vue
@@ -3,14 +3,14 @@
 	<MkButton @click="add()" primary style="margin: 0 auto 16px auto;"><i class="fas fa-plus"></i> {{ $ts.add }}</MkButton>
 	<section class="_card _gap announcements" v-for="announcement in announcements">
 		<div class="_content announcement">
-			<MkInput v-model:value="announcement.title">
-				<span>{{ $ts.title }}</span>
+			<MkInput v-model="announcement.title">
+				<template #label>{{ $ts.title }}</template>
 			</MkInput>
-			<MkTextarea v-model:value="announcement.text">
-				<span>{{ $ts.text }}</span>
+			<MkTextarea v-model="announcement.text">
+				<template #label>{{ $ts.text }}</template>
 			</MkTextarea>
-			<MkInput v-model:value="announcement.imageUrl">
-				<span>{{ $ts.imageUrl }}</span>
+			<MkInput v-model="announcement.imageUrl">
+				<template #label>{{ $ts.imageUrl }}</template>
 			</MkInput>
 			<p v-if="announcement.reads">{{ $t('nUsersRead', { n: announcement.reads }) }}</p>
 			<div class="buttons">
diff --git a/src/client/pages/instance/emoji-edit-dialog.vue b/src/client/pages/instance/emoji-edit-dialog.vue
index f7a3671584..7e9bdc80dd 100644
--- a/src/client/pages/instance/emoji-edit-dialog.vue
+++ b/src/client/pages/instance/emoji-edit-dialog.vue
@@ -11,11 +11,15 @@
 	<div class="_monolithic_">
 		<div class="yigymqpb _section">
 			<img :src="emoji.url" class="img"/>
-			<MkInput v-model:value="name"><span>{{ $ts.name }}</span></MkInput>
-			<MkInput v-model:value="category" :datalist="categories"><span>{{ $ts.category }}</span></MkInput>
-			<MkInput v-model:value="aliases">
-				<span>{{ $ts.tags }}</span>
-				<template #desc>{{ $ts.setMultipleBySeparatingWithSpace }}</template>
+			<MkInput v-model="name">
+				<template #label>{{ $ts.name }}</template>
+			</MkInput>
+			<MkInput v-model="category" :datalist="categories">
+				<template #label>{{ $ts.category }}</template>
+			</MkInput>
+			<MkInput v-model="aliases">
+				<template #label>{{ $ts.tags }}</template>
+				<template #caption>{{ $ts.setMultipleBySeparatingWithSpace }}</template>
 			</MkInput>
 			<MkButton danger @click="del()"><i class="fas fa-trash-alt"></i> {{ $ts.delete }}</MkButton>
 		</div>
diff --git a/src/client/pages/instance/emojis.vue b/src/client/pages/instance/emojis.vue
index fd641703cb..e971ca942e 100644
--- a/src/client/pages/instance/emojis.vue
+++ b/src/client/pages/instance/emojis.vue
@@ -7,7 +7,10 @@
 
 	<div class="local" v-if="tab === 'local'">
 		<MkButton primary @click="add" style="margin: var(--margin) auto;"><i class="fas fa-plus"></i> {{ $ts.addEmoji }}</MkButton>
-		<MkInput v-model:value="query" :debounce="true" type="search" style="margin: var(--margin);"><template #icon><i class="fas fa-search"></i></template><span>{{ $ts.search }}</span></MkInput>
+		<MkInput v-model="query" :debounce="true" type="search" style="margin: var(--margin);">
+			<template #prefix><i class="fas fa-search"></i></template>
+			<template #label>{{ $ts.search }}</template>
+		</MkInput>
 		<MkPagination :pagination="pagination" ref="emojis">
 			<template #empty><span>{{ $ts.noCustomEmojis }}</span></template>
 			<template #default="{items}">
@@ -25,8 +28,13 @@
 	</div>
 
 	<div class="remote" v-else-if="tab === 'remote'">
-		<MkInput v-model:value="queryRemote" :debounce="true" type="search" style="margin: var(--margin);"><template #icon><i class="fas fa-search"></i></template><span>{{ $ts.search }}</span></MkInput>
-		<MkInput v-model:value="host" :debounce="true" style="margin: var(--margin);"><span>{{ $ts.host }}</span></MkInput>
+		<MkInput v-model="queryRemote" :debounce="true" type="search" style="margin: var(--margin);">
+			<template #prefix><i class="fas fa-search"></i></template>
+			<template #label>{{ $ts.search }}</template>
+		</MkInput>
+		<MkInput v-model="host" :debounce="true" style="margin: var(--margin);">
+			<template #label>{{ $ts.host }}</template>
+		</MkInput>
 		<MkPagination :pagination="remotePagination" ref="remoteEmojis">
 			<template #empty><span>{{ $ts.noCustomEmojis }}</span></template>
 			<template #default="{items}">
diff --git a/src/client/pages/instance/file-dialog.vue b/src/client/pages/instance/file-dialog.vue
index 74a755fa15..be6bf6cbf2 100644
--- a/src/client/pages/instance/file-dialog.vue
+++ b/src/client/pages/instance/file-dialog.vue
@@ -16,7 +16,7 @@
 		</div>
 		<div class="_section">
 			<div class="_content">
-				<MkSwitch @update:value="toggleIsSensitive" v-model:value="isSensitive">NSFW</MkSwitch>
+				<MkSwitch @update:modelValue="toggleIsSensitive" v-model="isSensitive">NSFW</MkSwitch>
 			</div>
 		</div>
 		<div class="_section">
diff --git a/src/client/pages/instance/files.vue b/src/client/pages/instance/files.vue
index 427c5b411a..b7f472b7c8 100644
--- a/src/client/pages/instance/files.vue
+++ b/src/client/pages/instance/files.vue
@@ -9,8 +9,8 @@
 	<div class="_section lookup">
 		<div class="_title"><i class="fas fa-search"></i> {{ $ts.lookup }}</div>
 		<div class="_content">
-			<MkInput class="target" v-model:value="q" type="text" @enter="find()">
-				<span>{{ $ts.fileIdOrUrl }}</span>
+			<MkInput class="target" v-model="q" type="text" @enter="find()">
+				<template #label>{{ $ts.fileIdOrUrl }}</template>
 			</MkInput>
 			<MkButton @click="find()" primary><i class="fas fa-search"></i> {{ $ts.lookup }}</MkButton>
 		</div>
@@ -19,19 +19,19 @@
 	<div class="_section">
 		<div class="_content">
 			<div class="inputs" style="display: flex;">
-				<MkSelect v-model:value="origin" style="margin: 0; flex: 1;">
+				<MkSelect v-model="origin" style="margin: 0; flex: 1;">
 					<template #label>{{ $ts.instance }}</template>
 					<option value="combined">{{ $ts.all }}</option>
 					<option value="local">{{ $ts.local }}</option>
 					<option value="remote">{{ $ts.remote }}</option>
 				</MkSelect>
-				<MkInput v-model:value="searchHost" :debounce="true" type="search" style="margin: 0; flex: 1;" :disabled="pagination.params().origin === 'local'">
-					<span>{{ $ts.host }}</span>
+				<MkInput v-model="searchHost" :debounce="true" type="search" style="margin: 0; flex: 1;" :disabled="pagination.params().origin === 'local'">
+					<template #label>{{ $ts.host }}</template>
 				</MkInput>
 			</div>
 			<div class="inputs" style="display: flex; padding-top: 1.2em;">
-				<MkInput v-model:value="type" :debounce="true" type="search" style="margin: 0; flex: 1;">
-					<span>{{ $ts.type }}</span>
+				<MkInput v-model="type" :debounce="true" type="search" style="margin: 0; flex: 1;">
+					<template #label>{{ $ts.type }}</template>
 				</MkInput>
 			</div>
 			<MkPagination :pagination="pagination" #default="{items}" class="urempief" ref="files">
diff --git a/src/client/pages/instance/instance.vue b/src/client/pages/instance/instance.vue
index a4ac1de46b..c39f0d1ecb 100644
--- a/src/client/pages/instance/instance.vue
+++ b/src/client/pages/instance/instance.vue
@@ -77,7 +77,7 @@
 			<div class="header">
 				<span class="label">{{ $ts.charts }}</span>
 				<div class="selects">
-					<MkSelect v-model:value="chartSrc" style="margin: 0; flex: 1;">
+					<MkSelect v-model="chartSrc" style="margin: 0; flex: 1;">
 						<option value="requests">{{ $ts._instanceCharts.requests }}</option>
 						<option value="users">{{ $ts._instanceCharts.users }}</option>
 						<option value="users-total">{{ $ts._instanceCharts.usersTotal }}</option>
@@ -90,7 +90,7 @@
 						<option value="drive-files">{{ $ts._instanceCharts.files }}</option>
 						<option value="drive-files-total">{{ $ts._instanceCharts.filesTotal }}</option>
 					</MkSelect>
-					<MkSelect v-model:value="chartSpan" style="margin: 0;">
+					<MkSelect v-model="chartSpan" style="margin: 0;">
 						<option value="hour">{{ $ts.perHour }}</option>
 						<option value="day">{{ $ts.perDay }}</option>
 					</MkSelect>
@@ -102,8 +102,8 @@
 		</div>
 		<div class="operations section">
 			<span class="label">{{ $ts.operations }}</span>
-			<MkSwitch v-model:value="isSuspended" class="switch">{{ $ts.stopActivityDelivery }}</MkSwitch>
-			<MkSwitch :value="isBlocked" class="switch" @update:value="changeBlock">{{ $ts.blockThisInstance }}</MkSwitch>
+			<MkSwitch v-model="isSuspended" class="switch">{{ $ts.stopActivityDelivery }}</MkSwitch>
+			<MkSwitch :model-value="isBlocked" class="switch" @update:modelValue="changeBlock">{{ $ts.blockThisInstance }}</MkSwitch>
 			<details>
 				<summary>{{ $ts.deleteAllFiles }}</summary>
 				<MkButton @click="deleteAllFiles()" style="margin: 0.5em 0 0.5em 0;"><i class="fas fa-trash-alt"></i> {{ $ts.deleteAllFiles }}</MkButton>
diff --git a/src/client/pages/instance/logs.vue b/src/client/pages/instance/logs.vue
index 112b0f66d0..4eee816f96 100644
--- a/src/client/pages/instance/logs.vue
+++ b/src/client/pages/instance/logs.vue
@@ -1,10 +1,10 @@
 <template>
 <div class="_section">
 	<div class="_inputs">
-		<MkInput v-model:value="logDomain" :debounce="true">
-			<span>{{ $ts.domain }}</span>
+		<MkInput v-model="logDomain" :debounce="true">
+			<template #label>{{ $ts.domain }}</template>
 		</MkInput>
-		<MkSelect v-model:value="logLevel">
+		<MkSelect v-model="logLevel">
 			<template #label>Level</template>
 			<option value="all">All</option>
 			<option value="info">Info</option>
diff --git a/src/client/pages/instance/users.vue b/src/client/pages/instance/users.vue
index ccddca16ad..8db62683ba 100644
--- a/src/client/pages/instance/users.vue
+++ b/src/client/pages/instance/users.vue
@@ -7,14 +7,14 @@
 
 	<div class="users">
 		<div class="inputs" style="display: flex;">
-			<MkSelect v-model:value="sort" style="margin: 0; flex: 1;">
+			<MkSelect v-model="sort" style="margin: 0; flex: 1;">
 				<template #label>{{ $ts.sort }}</template>
 				<option value="-createdAt">{{ $ts.registeredDate }} ({{ $ts.ascendingOrder }})</option>
 				<option value="+createdAt">{{ $ts.registeredDate }} ({{ $ts.descendingOrder }})</option>
 				<option value="-updatedAt">{{ $ts.lastUsed }} ({{ $ts.ascendingOrder }})</option>
 				<option value="+updatedAt">{{ $ts.lastUsed }} ({{ $ts.descendingOrder }})</option>
 			</MkSelect>
-			<MkSelect v-model:value="state" style="margin: 0; flex: 1;">
+			<MkSelect v-model="state" style="margin: 0; flex: 1;">
 				<template #label>{{ $ts.state }}</template>
 				<option value="all">{{ $ts.all }}</option>
 				<option value="available">{{ $ts.normal }}</option>
@@ -23,7 +23,7 @@
 				<option value="silenced">{{ $ts.silence }}</option>
 				<option value="suspended">{{ $ts.suspend }}</option>
 			</MkSelect>
-			<MkSelect v-model:value="origin" style="margin: 0; flex: 1;">
+			<MkSelect v-model="origin" style="margin: 0; flex: 1;">
 				<template #label>{{ $ts.instance }}</template>
 				<option value="combined">{{ $ts.all }}</option>
 				<option value="local">{{ $ts.local }}</option>
@@ -31,11 +31,11 @@
 			</MkSelect>
 		</div>
 		<div class="inputs" style="display: flex; padding-top: 1.2em;">
-			<MkInput v-model:value="searchUsername" style="margin: 0; flex: 1;" type="text" spellcheck="false" @update:value="$refs.users.reload()">
-				<span>{{ $ts.username }}</span>
+			<MkInput v-model="searchUsername" style="margin: 0; flex: 1;" type="text" spellcheck="false" @update:modelValue="$refs.users.reload()">
+				<template #label>{{ $ts.username }}</template>
 			</MkInput>
-			<MkInput v-model:value="searchHost" style="margin: 0; flex: 1;" type="text" spellcheck="false" @update:value="$refs.users.reload()" :disabled="pagination.params().origin === 'local'">
-				<span>{{ $ts.host }}</span>
+			<MkInput v-model="searchHost" style="margin: 0; flex: 1;" type="text" spellcheck="false" @update:modelValue="$refs.users.reload()" :disabled="pagination.params().origin === 'local'">
+				<template #label>{{ $ts.host }}</template>
 			</MkInput>
 		</div>
 
diff --git a/src/client/pages/mfm-cheat-sheet.vue b/src/client/pages/mfm-cheat-sheet.vue
index 75bbfce7e8..751dccd7a1 100644
--- a/src/client/pages/mfm-cheat-sheet.vue
+++ b/src/client/pages/mfm-cheat-sheet.vue
@@ -7,7 +7,7 @@
 			<p>{{ $ts._mfm.mentionDescription }}</p>
 			<div class="preview">
 				<Mfm :text="preview_mention"/>
-				<MkTextarea v-model:value="preview_mention"><span>MFM</span></MkTextarea>
+				<MkTextarea v-model="preview_mention"><template #label>MFM</template></MkTextarea>
 			</div>
 		</div>
 	</div>
@@ -17,7 +17,7 @@
 			<p>{{ $ts._mfm.hashtagDescription }}</p>
 			<div class="preview">
 				<Mfm :text="preview_hashtag"/>
-				<MkTextarea v-model:value="preview_hashtag"><span>MFM</span></MkTextarea>
+				<MkTextarea v-model="preview_hashtag"><template #label>MFM</template></MkTextarea>
 			</div>
 		</div>
 	</div>
@@ -27,7 +27,7 @@
 			<p>{{ $ts._mfm.urlDescription }}</p>
 			<div class="preview">
 				<Mfm :text="preview_url"/>
-				<MkTextarea v-model:value="preview_url"><span>MFM</span></MkTextarea>
+				<MkTextarea v-model="preview_url"><template #label>MFM</template></MkTextarea>
 			</div>
 		</div>
 	</div>
@@ -37,7 +37,7 @@
 			<p>{{ $ts._mfm.linkDescription }}</p>
 			<div class="preview">
 				<Mfm :text="preview_link"/>
-				<MkTextarea v-model:value="preview_link"><span>MFM</span></MkTextarea>
+				<MkTextarea v-model="preview_link"><template #label>MFM</template></MkTextarea>
 			</div>
 		</div>
 	</div>
@@ -47,7 +47,7 @@
 			<p>{{ $ts._mfm.emojiDescription }}</p>
 			<div class="preview">
 				<Mfm :text="preview_emoji"/>
-				<MkTextarea v-model:value="preview_emoji"><span>MFM</span></MkTextarea>
+				<MkTextarea v-model="preview_emoji"><template #label>MFM</template></MkTextarea>
 			</div>
 		</div>
 	</div>
@@ -57,7 +57,7 @@
 			<p>{{ $ts._mfm.boldDescription }}</p>
 			<div class="preview">
 				<Mfm :text="preview_bold"/>
-				<MkTextarea v-model:value="preview_bold"><span>MFM</span></MkTextarea>
+				<MkTextarea v-model="preview_bold"><template #label>MFM</template></MkTextarea>
 			</div>
 		</div>
 	</div>
@@ -67,7 +67,7 @@
 			<p>{{ $ts._mfm.smallDescription }}</p>
 			<div class="preview">
 				<Mfm :text="preview_small"/>
-				<MkTextarea v-model:value="preview_small"><span>MFM</span></MkTextarea>
+				<MkTextarea v-model="preview_small"><template #label>MFM</template></MkTextarea>
 			</div>
 		</div>
 	</div>
@@ -77,7 +77,7 @@
 			<p>{{ $ts._mfm.quoteDescription }}</p>
 			<div class="preview">
 				<Mfm :text="preview_quote"/>
-				<MkTextarea v-model:value="preview_quote"><span>MFM</span></MkTextarea>
+				<MkTextarea v-model="preview_quote"><template #label>MFM</template></MkTextarea>
 			</div>
 		</div>
 	</div>
@@ -87,7 +87,7 @@
 			<p>{{ $ts._mfm.centerDescription }}</p>
 			<div class="preview">
 				<Mfm :text="preview_center"/>
-				<MkTextarea v-model:value="preview_center"><span>MFM</span></MkTextarea>
+				<MkTextarea v-model="preview_center"><template #label>MFM</template></MkTextarea>
 			</div>
 		</div>
 	</div>
@@ -97,7 +97,7 @@
 			<p>{{ $ts._mfm.inlineCodeDescription }}</p>
 			<div class="preview">
 				<Mfm :text="preview_inlineCode"/>
-				<MkTextarea v-model:value="preview_inlineCode"><span>MFM</span></MkTextarea>
+				<MkTextarea v-model="preview_inlineCode"><template #label>MFM</template></MkTextarea>
 			</div>
 		</div>
 	</div>
@@ -107,7 +107,7 @@
 			<p>{{ $ts._mfm.blockCodeDescription }}</p>
 			<div class="preview">
 				<Mfm :text="preview_blockCode"/>
-				<MkTextarea v-model:value="preview_blockCode"><span>MFM</span></MkTextarea>
+				<MkTextarea v-model="preview_blockCode"><template #label>MFM</template></MkTextarea>
 			</div>
 		</div>
 	</div>
@@ -117,7 +117,7 @@
 			<p>{{ $ts._mfm.inlineMathDescription }}</p>
 			<div class="preview">
 				<Mfm :text="preview_inlineMath"/>
-				<MkTextarea v-model:value="preview_inlineMath"><span>MFM</span></MkTextarea>
+				<MkTextarea v-model="preview_inlineMath"><template #label>MFM</template></MkTextarea>
 			</div>
 		</div>
 	</div>
@@ -127,7 +127,7 @@
 			<p>{{ $ts._mfm.searchDescription }}</p>
 			<div class="preview">
 				<Mfm :text="preview_search"/>
-				<MkTextarea v-model:value="preview_search"><span>MFM</span></MkTextarea>
+				<MkTextarea v-model="preview_search"><template #label>MFM</template></MkTextarea>
 			</div>
 		</div>
 	</div>
@@ -137,7 +137,7 @@
 			<p>{{ $ts._mfm.flipDescription }}</p>
 			<div class="preview">
 				<Mfm :text="preview_flip"/>
-				<MkTextarea v-model:value="preview_flip"><span>MFM</span></MkTextarea>
+				<MkTextarea v-model="preview_flip"><template #label>MFM</template></MkTextarea>
 			</div>
 		</div>
 	</div>
@@ -147,7 +147,7 @@
 			<p>{{ $ts._mfm.fontDescription }}</p>
 			<div class="preview">
 				<Mfm :text="preview_font"/>
-				<MkTextarea v-model:value="preview_font"><span>MFM</span></MkTextarea>
+				<MkTextarea v-model="preview_font"><template #label>MFM</template></MkTextarea>
 			</div>
 		</div>
 	</div>
@@ -157,7 +157,7 @@
 			<p>{{ $ts._mfm.x2Description }}</p>
 			<div class="preview">
 				<Mfm :text="preview_x2"/>
-				<MkTextarea v-model:value="preview_x2"><span>MFM</span></MkTextarea>
+				<MkTextarea v-model="preview_x2"><template #label>MFM</template></MkTextarea>
 			</div>
 		</div>
 	</div>
@@ -167,7 +167,7 @@
 			<p>{{ $ts._mfm.x3Description }}</p>
 			<div class="preview">
 				<Mfm :text="preview_x3"/>
-				<MkTextarea v-model:value="preview_x3"><span>MFM</span></MkTextarea>
+				<MkTextarea v-model="preview_x3"><template #label>MFM</template></MkTextarea>
 			</div>
 		</div>
 	</div>
@@ -177,7 +177,7 @@
 			<p>{{ $ts._mfm.x4Description }}</p>
 			<div class="preview">
 				<Mfm :text="preview_x4"/>
-				<MkTextarea v-model:value="preview_x4"><span>MFM</span></MkTextarea>
+				<MkTextarea v-model="preview_x4"><template #label>MFM</template></MkTextarea>
 			</div>
 		</div>
 	</div>
@@ -187,7 +187,7 @@
 			<p>{{ $ts._mfm.blurDescription }}</p>
 			<div class="preview">
 				<Mfm :text="preview_blur"/>
-				<MkTextarea v-model:value="preview_blur"><span>MFM</span></MkTextarea>
+				<MkTextarea v-model="preview_blur"><template #label>MFM</template></MkTextarea>
 			</div>
 		</div>
 	</div>
@@ -197,7 +197,7 @@
 			<p>{{ $ts._mfm.jellyDescription }}</p>
 			<div class="preview">
 				<Mfm :text="preview_jelly"/>
-				<MkTextarea v-model:value="preview_jelly"><span>MFM</span></MkTextarea>
+				<MkTextarea v-model="preview_jelly"><template #label>MFM</template></MkTextarea>
 			</div>
 		</div>
 	</div>
@@ -207,7 +207,7 @@
 			<p>{{ $ts._mfm.tadaDescription }}</p>
 			<div class="preview">
 				<Mfm :text="preview_tada"/>
-				<MkTextarea v-model:value="preview_tada"><span>MFM</span></MkTextarea>
+				<MkTextarea v-model="preview_tada"><template #label>MFM</template></MkTextarea>
 			</div>
 		</div>
 	</div>
@@ -217,7 +217,7 @@
 			<p>{{ $ts._mfm.jumpDescription }}</p>
 			<div class="preview">
 				<Mfm :text="preview_jump"/>
-				<MkTextarea v-model:value="preview_jump"><span>MFM</span></MkTextarea>
+				<MkTextarea v-model="preview_jump"><template #label>MFM</template></MkTextarea>
 			</div>
 		</div>
 	</div>
@@ -227,7 +227,7 @@
 			<p>{{ $ts._mfm.bounceDescription }}</p>
 			<div class="preview">
 				<Mfm :text="preview_bounce"/>
-				<MkTextarea v-model:value="preview_bounce"><span>MFM</span></MkTextarea>
+				<MkTextarea v-model="preview_bounce"><template #label>MFM</template></MkTextarea>
 			</div>
 		</div>
 	</div>
@@ -237,7 +237,7 @@
 			<p>{{ $ts._mfm.spinDescription }}</p>
 			<div class="preview">
 				<Mfm :text="preview_spin"/>
-				<MkTextarea v-model:value="preview_spin"><span>MFM</span></MkTextarea>
+				<MkTextarea v-model="preview_spin"><template #label>MFM</template></MkTextarea>
 			</div>
 		</div>
 	</div>
@@ -247,7 +247,7 @@
 			<p>{{ $ts._mfm.shakeDescription }}</p>
 			<div class="preview">
 				<Mfm :text="preview_shake"/>
-				<MkTextarea v-model:value="preview_shake"><span>MFM</span></MkTextarea>
+				<MkTextarea v-model="preview_shake"><template #label>MFM</template></MkTextarea>
 			</div>
 		</div>
 	</div>
@@ -257,7 +257,7 @@
 			<p>{{ $ts._mfm.twitchDescription }}</p>
 			<div class="preview">
 				<Mfm :text="preview_twitch"/>
-				<MkTextarea v-model:value="preview_twitch"><span>MFM</span></MkTextarea>
+				<MkTextarea v-model="preview_twitch"><template #label>MFM</template></MkTextarea>
 			</div>
 		</div>
 	</div>
@@ -267,7 +267,7 @@
 			<p>{{ $ts._mfm.rainbowDescription }}</p>
 			<div class="preview">
 				<Mfm :text="preview_rainbow"/>
-				<MkTextarea v-model:value="preview_rainbow"><span>MFM</span></MkTextarea>
+				<MkTextarea v-model="preview_rainbow"><template #label>MFM</template></MkTextarea>
 			</div>
 		</div>
 	</div>
diff --git a/src/client/pages/my-antennas/index.antenna.vue b/src/client/pages/my-antennas/index.antenna.vue
index fcb7559a98..3a74a9d7f1 100644
--- a/src/client/pages/my-antennas/index.antenna.vue
+++ b/src/client/pages/my-antennas/index.antenna.vue
@@ -2,10 +2,10 @@
 <div class="shaynizk _card">
 	<div class="_title" v-if="antenna.name">{{ antenna.name }}</div>
 	<div class="_content body">
-		<MkInput v-model:value="name">
-			<span>{{ $ts.name }}</span>
+		<MkInput v-model="name">
+			<template #label>{{ $ts.name }}</template>
 		</MkInput>
-		<MkSelect v-model:value="src">
+		<MkSelect v-model="src">
 			<template #label>{{ $ts.antennaSource }}</template>
 			<option value="all">{{ $ts._antennaSources.all }}</option>
 			<option value="home">{{ $ts._antennaSources.homeTimeline }}</option>
@@ -13,30 +13,30 @@
 			<option value="list">{{ $ts._antennaSources.userList }}</option>
 			<option value="group">{{ $ts._antennaSources.userGroup }}</option>
 		</MkSelect>
-		<MkSelect v-model:value="userListId" v-if="src === 'list'">
+		<MkSelect v-model="userListId" v-if="src === 'list'">
 			<template #label>{{ $ts.userList }}</template>
 			<option v-for="list in userLists" :value="list.id" :key="list.id">{{ list.name }}</option>
 		</MkSelect>
-		<MkSelect v-model:value="userGroupId" v-else-if="src === 'group'">
+		<MkSelect v-model="userGroupId" v-else-if="src === 'group'">
 			<template #label>{{ $ts.userGroup }}</template>
 			<option v-for="group in userGroups" :value="group.id" :key="group.id">{{ group.name }}</option>
 		</MkSelect>
-		<MkTextarea v-model:value="users" v-else-if="src === 'users'">
-			<span>{{ $ts.users }}</span>
-			<template #desc>{{ $ts.antennaUsersDescription }} <button class="_textButton" @click="addUser">{{ $ts.addUser }}</button></template>
+		<MkTextarea v-model="users" v-else-if="src === 'users'">
+			<template #label>{{ $ts.users }}</template>
+			<template #caption>{{ $ts.antennaUsersDescription }} <button class="_textButton" @click="addUser">{{ $ts.addUser }}</button></template>
 		</MkTextarea>
-		<MkSwitch v-model:value="withReplies">{{ $ts.withReplies }}</MkSwitch>
-		<MkTextarea v-model:value="keywords">
-			<span>{{ $ts.antennaKeywords }}</span>
-			<template #desc>{{ $ts.antennaKeywordsDescription }}</template>
+		<MkSwitch v-model="withReplies">{{ $ts.withReplies }}</MkSwitch>
+		<MkTextarea v-model="keywords">
+			<template #label>{{ $ts.antennaKeywords }}</template>
+			<template #caption>{{ $ts.antennaKeywordsDescription }}</template>
 		</MkTextarea>
-		<MkTextarea v-model:value="excludeKeywords">
-			<span>{{ $ts.antennaExcludeKeywords }}</span>
-			<template #desc>{{ $ts.antennaKeywordsDescription }}</template>
+		<MkTextarea v-model="excludeKeywords">
+			<template #label>{{ $ts.antennaExcludeKeywords }}</template>
+			<template #caption>{{ $ts.antennaKeywordsDescription }}</template>
 		</MkTextarea>
-		<MkSwitch v-model:value="caseSensitive">{{ $ts.caseSensitive }}</MkSwitch>
-		<MkSwitch v-model:value="withFile">{{ $ts.withFileAntenna }}</MkSwitch>
-		<MkSwitch v-model:value="notify">{{ $ts.notifyAntenna }}</MkSwitch>
+		<MkSwitch v-model="caseSensitive">{{ $ts.caseSensitive }}</MkSwitch>
+		<MkSwitch v-model="withFile">{{ $ts.withFileAntenna }}</MkSwitch>
+		<MkSwitch v-model="notify">{{ $ts.notifyAntenna }}</MkSwitch>
 	</div>
 	<div class="_footer">
 		<MkButton inline @click="saveAntenna()" primary><i class="fas fa-save"></i> {{ $ts.save }}</MkButton>
diff --git a/src/client/pages/page-editor/els/page-editor.el.button.vue b/src/client/pages/page-editor/els/page-editor.el.button.vue
index 6e9036faac..3a43817cf6 100644
--- a/src/client/pages/page-editor/els/page-editor.el.button.vue
+++ b/src/client/pages/page-editor/els/page-editor.el.button.vue
@@ -3,9 +3,9 @@
 	<template #header><i class="fas fa-bolt"></i> {{ $ts._pages.blocks.button }}</template>
 
 	<section class="xfhsjczc">
-		<MkInput v-model:value="value.text"><span>{{ $ts._pages.blocks._button.text }}</span></MkInput>
-		<MkSwitch v-model:value="value.primary"><span>{{ $ts._pages.blocks._button.colored }}</span></MkSwitch>
-		<MkSelect v-model:value="value.action">
+		<MkInput v-model="value.text"><template #label>{{ $ts._pages.blocks._button.text }}</template></MkInput>
+		<MkSwitch v-model="value.primary"><span>{{ $ts._pages.blocks._button.colored }}</span></MkSwitch>
+		<MkSelect v-model="value.action">
 			<template #label>{{ $ts._pages.blocks._button.action }}</template>
 			<option value="dialog">{{ $ts._pages.blocks._button._action.dialog }}</option>
 			<option value="resetRandom">{{ $ts._pages.blocks._button._action.resetRandom }}</option>
@@ -13,12 +13,12 @@
 			<option value="callAiScript">{{ $ts._pages.blocks._button._action.callAiScript }}</option>
 		</MkSelect>
 		<template v-if="value.action === 'dialog'">
-			<MkInput v-model:value="value.content"><span>{{ $ts._pages.blocks._button._action._dialog.content }}</span></MkInput>
+			<MkInput v-model="value.content"><template #label>{{ $ts._pages.blocks._button._action._dialog.content }}</template></MkInput>
 		</template>
 		<template v-else-if="value.action === 'pushEvent'">
-			<MkInput v-model:value="value.event"><span>{{ $ts._pages.blocks._button._action._pushEvent.event }}</span></MkInput>
-			<MkInput v-model:value="value.message"><span>{{ $ts._pages.blocks._button._action._pushEvent.message }}</span></MkInput>
-			<MkSelect v-model:value="value.var">
+			<MkInput v-model="value.event"><template #label>{{ $ts._pages.blocks._button._action._pushEvent.event }}</template></MkInput>
+			<MkInput v-model="value.message"><template #label>{{ $ts._pages.blocks._button._action._pushEvent.message }}</template></MkInput>
+			<MkSelect v-model="value.var">
 				<template #label>{{ $ts._pages.blocks._button._action._pushEvent.variable }}</template>
 				<option :value="null">{{ $t('_pages.blocks._button._action._pushEvent.no-variable') }}</option>
 				<option v-for="v in hpml.getVarsByType()" :value="v.name">{{ v.name }}</option>
@@ -31,7 +31,7 @@
 			</MkSelect>
 		</template>
 		<template v-else-if="value.action === 'callAiScript'">
-			<MkInput v-model:value="value.fn"><span>{{ $ts._pages.blocks._button._action._callAiScript.functionName }}</span></MkInput>
+			<MkInput v-model="value.fn"><template #label>{{ $ts._pages.blocks._button._action._callAiScript.functionName }}</template></MkInput>
 		</template>
 	</section>
 </XContainer>
diff --git a/src/client/pages/page-editor/els/page-editor.el.canvas.vue b/src/client/pages/page-editor/els/page-editor.el.canvas.vue
index 59d29b9b71..d8d5b990ca 100644
--- a/src/client/pages/page-editor/els/page-editor.el.canvas.vue
+++ b/src/client/pages/page-editor/els/page-editor.el.canvas.vue
@@ -3,9 +3,18 @@
 	<template #header><i class="fas fa-paint-brush"></i> {{ $ts._pages.blocks.canvas }}</template>
 
 	<section style="padding: 0 16px 0 16px;">
-		<MkInput v-model:value="value.name"><template #prefix><i class="fas fa-magic"></i></template><span>{{ $ts._pages.blocks._canvas.id }}</span></MkInput>
-		<MkInput v-model:value="value.width" type="number"><span>{{ $ts._pages.blocks._canvas.width }}</span><template #suffix>px</template></MkInput>
-		<MkInput v-model:value="value.height" type="number"><span>{{ $ts._pages.blocks._canvas.height }}</span><template #suffix>px</template></MkInput>
+		<MkInput v-model="value.name">
+			<template #prefix><i class="fas fa-magic"></i></template>
+			<template #label>{{ $ts._pages.blocks._canvas.id }}</template>
+		</MkInput>
+		<MkInput v-model="value.width" type="number">
+			<template #label>{{ $ts._pages.blocks._canvas.width }}</template>
+			<template #suffix>px</template>
+		</MkInput>
+		<MkInput v-model="value.height" type="number">
+			<template #label>{{ $ts._pages.blocks._canvas.height }}</template>
+			<template #suffix>px</template>
+		</MkInput>
 	</section>
 </XContainer>
 </template>
diff --git a/src/client/pages/page-editor/els/page-editor.el.counter.vue b/src/client/pages/page-editor/els/page-editor.el.counter.vue
index 3394817b53..973de50fc2 100644
--- a/src/client/pages/page-editor/els/page-editor.el.counter.vue
+++ b/src/client/pages/page-editor/els/page-editor.el.counter.vue
@@ -3,9 +3,16 @@
 	<template #header><i class="fas fa-bolt"></i> {{ $ts._pages.blocks.counter }}</template>
 
 	<section style="padding: 0 16px 0 16px;">
-		<MkInput v-model:value="value.name"><template #prefix><i class="fas fa-magic"></i></template><span>{{ $ts._pages.blocks._counter.name }}</span></MkInput>
-		<MkInput v-model:value="value.text"><span>{{ $ts._pages.blocks._counter.text }}</span></MkInput>
-		<MkInput v-model:value="value.inc" type="number"><span>{{ $ts._pages.blocks._counter.inc }}</span></MkInput>
+		<MkInput v-model="value.name">
+			<template #prefix><i class="fas fa-magic"></i></template>
+			<template #label>{{ $ts._pages.blocks._counter.name }}</template>
+		</MkInput>
+		<MkInput v-model="value.text">
+			<template #label>{{ $ts._pages.blocks._counter.text }}</template>
+		</MkInput>
+		<MkInput v-model="value.inc" type="number">
+			<template #label>{{ $ts._pages.blocks._counter.inc }}</template>
+		</MkInput>
 	</section>
 </XContainer>
 </template>
diff --git a/src/client/pages/page-editor/els/page-editor.el.if.vue b/src/client/pages/page-editor/els/page-editor.el.if.vue
index 7f4ed458aa..6eb0c7709f 100644
--- a/src/client/pages/page-editor/els/page-editor.el.if.vue
+++ b/src/client/pages/page-editor/els/page-editor.el.if.vue
@@ -8,7 +8,7 @@
 	</template>
 
 	<section class="romcojzs">
-		<MkSelect v-model:value="value.var">
+		<MkSelect v-model="value.var">
 			<template #label>{{ $ts._pages.blocks._if.variable }}</template>
 			<option v-for="v in hpml.getVarsByType('boolean')" :value="v.name">{{ v.name }}</option>
 			<optgroup :label="$ts._pages.script.pageVariables">
diff --git a/src/client/pages/page-editor/els/page-editor.el.note.vue b/src/client/pages/page-editor/els/page-editor.el.note.vue
index d4801f3059..5766564c1a 100644
--- a/src/client/pages/page-editor/els/page-editor.el.note.vue
+++ b/src/client/pages/page-editor/els/page-editor.el.note.vue
@@ -3,11 +3,11 @@
 	<template #header><i class="fas fa-sticky-note"></i> {{ $ts._pages.blocks.note }}</template>
 
 	<section style="padding: 0 16px 0 16px;">
-		<MkInput v-model:value="id">
-			<span>{{ $ts._pages.blocks._note.id }}</span>
-			<template #desc>{{ $ts._pages.blocks._note.idDescription }}</template>
+		<MkInput v-model="id">
+			<template #label>{{ $ts._pages.blocks._note.id }}</template>
+			<template #caption>{{ $ts._pages.blocks._note.idDescription }}</template>
 		</MkInput>
-		<MkSwitch v-model:value="value.detailed"><span>{{ $ts._pages.blocks._note.detailed }}</span></MkSwitch>
+		<MkSwitch v-model="value.detailed"><span>{{ $ts._pages.blocks._note.detailed }}</span></MkSwitch>
 
 		<XNote v-if="note && !value.detailed" v-model:note="note" :key="note.id + ':normal'" style="margin-bottom: 16px;"/>
 		<XNoteDetailed v-if="note && value.detailed" v-model:note="note" :key="note.id + ':detail'" style="margin-bottom: 16px;"/>
diff --git a/src/client/pages/page-editor/els/page-editor.el.number-input.vue b/src/client/pages/page-editor/els/page-editor.el.number-input.vue
index 8058d941c1..892e7e1caa 100644
--- a/src/client/pages/page-editor/els/page-editor.el.number-input.vue
+++ b/src/client/pages/page-editor/els/page-editor.el.number-input.vue
@@ -3,9 +3,16 @@
 	<template #header><i class="fas fa-bolt"></i> {{ $ts._pages.blocks.numberInput }}</template>
 
 	<section style="padding: 0 16px 0 16px;">
-		<MkInput v-model:value="value.name"><template #prefix><i class="fas fa-magic"></i></template><span>{{ $ts._pages.blocks._numberInput.name }}</span></MkInput>
-		<MkInput v-model:value="value.text"><span>{{ $ts._pages.blocks._numberInput.text }}</span></MkInput>
-		<MkInput v-model:value="value.default" type="number"><span>{{ $ts._pages.blocks._numberInput.default }}</span></MkInput>
+		<MkInput v-model="value.name">
+			<template #prefix><i class="fas fa-magic"></i></template>
+			<template #label>{{ $ts._pages.blocks._numberInput.name }}</template>
+		</MkInput>
+		<MkInput v-model="value.text">
+			<template #label>{{ $ts._pages.blocks._numberInput.text }}</template>
+		</MkInput>
+		<MkInput v-model="value.default" type="number">
+			<template #label>{{ $ts._pages.blocks._numberInput.default }}</template>
+		</MkInput>
 	</section>
 </XContainer>
 </template>
diff --git a/src/client/pages/page-editor/els/page-editor.el.post.vue b/src/client/pages/page-editor/els/page-editor.el.post.vue
index 1ed7f860c8..4215b159d3 100644
--- a/src/client/pages/page-editor/els/page-editor.el.post.vue
+++ b/src/client/pages/page-editor/els/page-editor.el.post.vue
@@ -3,9 +3,9 @@
 	<template #header><i class="fas fa-paper-plane"></i> {{ $ts._pages.blocks.post }}</template>
 
 	<section style="padding: 16px;">
-		<MkTextarea v-model:value="value.text">{{ $ts._pages.blocks._post.text }}</MkTextarea>
-		<MkSwitch v-model:value="value.attachCanvasImage"><span>{{ $ts._pages.blocks._post.attachCanvasImage }}</span></MkSwitch>
-		<MkInput v-if="value.attachCanvasImage" v-model:value="value.canvasId"><span>{{ $ts._pages.blocks._post.canvasId }}</span></MkInput>
+		<MkTextarea v-model="value.text"><template #label>{{ $ts._pages.blocks._post.text }}</template></MkTextarea>
+		<MkSwitch v-model="value.attachCanvasImage"><span>{{ $ts._pages.blocks._post.attachCanvasImage }}</span></MkSwitch>
+		<MkInput v-if="value.attachCanvasImage" v-model="value.canvasId"><template #label>{{ $ts._pages.blocks._post.canvasId }}</template></MkInput>
 	</section>
 </XContainer>
 </template>
diff --git a/src/client/pages/page-editor/els/page-editor.el.radio-button.vue b/src/client/pages/page-editor/els/page-editor.el.radio-button.vue
index 97715ed69c..88be96f35d 100644
--- a/src/client/pages/page-editor/els/page-editor.el.radio-button.vue
+++ b/src/client/pages/page-editor/els/page-editor.el.radio-button.vue
@@ -3,10 +3,10 @@
 	<template #header><i class="fas fa-bolt"></i> {{ $ts._pages.blocks.radioButton }}</template>
 
 	<section style="padding: 0 16px 16px 16px;">
-		<MkInput v-model:value="value.name"><template #prefix><i class="fas fa-magic"></i></template><span>{{ $ts._pages.blocks._radioButton.name }}</span></MkInput>
-		<MkInput v-model:value="value.title"><span>{{ $ts._pages.blocks._radioButton.title }}</span></MkInput>
-		<MkTextarea v-model:value="values"><span>{{ $ts._pages.blocks._radioButton.values }}</span></MkTextarea>
-		<MkInput v-model:value="value.default"><span>{{ $ts._pages.blocks._radioButton.default }}</span></MkInput>
+		<MkInput v-model="value.name"><template #prefix><i class="fas fa-magic"></i></template><template #label>{{ $ts._pages.blocks._radioButton.name }}</template></MkInput>
+		<MkInput v-model="value.title"><template #label>{{ $ts._pages.blocks._radioButton.title }}</template></MkInput>
+		<MkTextarea v-model="values"><template #label>{{ $ts._pages.blocks._radioButton.values }}</template></MkTextarea>
+		<MkInput v-model="value.default"><template #label>{{ $ts._pages.blocks._radioButton.default }}</template></MkInput>
 	</section>
 </XContainer>
 </template>
diff --git a/src/client/pages/page-editor/els/page-editor.el.switch.vue b/src/client/pages/page-editor/els/page-editor.el.switch.vue
index 564d5e22c3..ade1291410 100644
--- a/src/client/pages/page-editor/els/page-editor.el.switch.vue
+++ b/src/client/pages/page-editor/els/page-editor.el.switch.vue
@@ -3,9 +3,9 @@
 	<template #header><i class="fas fa-bolt"></i> {{ $ts._pages.blocks.switch }}</template>
 
 	<section class="kjuadyyj">
-		<MkInput v-model:value="value.name"><template #prefix><i class="fas fa-magic"></i></template><span>{{ $ts._pages.blocks._switch.name }}</span></MkInput>
-		<MkInput v-model:value="value.text"><span>{{ $ts._pages.blocks._switch.text }}</span></MkInput>
-		<MkSwitch v-model:value="value.default"><span>{{ $ts._pages.blocks._switch.default }}</span></MkSwitch>
+		<MkInput v-model="value.name"><template #prefix><i class="fas fa-magic"></i></template><template #label>{{ $ts._pages.blocks._switch.name }}</template></MkInput>
+		<MkInput v-model="value.text"><template #label>{{ $ts._pages.blocks._switch.text }}</template></MkInput>
+		<MkSwitch v-model="value.default"><span>{{ $ts._pages.blocks._switch.default }}</span></MkSwitch>
 	</section>
 </XContainer>
 </template>
diff --git a/src/client/pages/page-editor/els/page-editor.el.text-input.vue b/src/client/pages/page-editor/els/page-editor.el.text-input.vue
index 4435d9b841..3c8fcc04af 100644
--- a/src/client/pages/page-editor/els/page-editor.el.text-input.vue
+++ b/src/client/pages/page-editor/els/page-editor.el.text-input.vue
@@ -3,9 +3,9 @@
 	<template #header><i class="fas fa-bolt"></i> {{ $ts._pages.blocks.textInput }}</template>
 
 	<section style="padding: 0 16px 0 16px;">
-		<MkInput v-model:value="value.name"><template #prefix><i class="fas fa-magic"></i></template><span>{{ $ts._pages.blocks._textInput.name }}</span></MkInput>
-		<MkInput v-model:value="value.text"><span>{{ $ts._pages.blocks._textInput.text }}</span></MkInput>
-		<MkInput v-model:value="value.default" type="text"><span>{{ $ts._pages.blocks._textInput.default }}</span></MkInput>
+		<MkInput v-model="value.name"><template #prefix><i class="fas fa-magic"></i></template><template #label>{{ $ts._pages.blocks._textInput.name }}</template></MkInput>
+		<MkInput v-model="value.text"><template #label>{{ $ts._pages.blocks._textInput.text }}</template></MkInput>
+		<MkInput v-model="value.default" type="text"><template #label>{{ $ts._pages.blocks._textInput.default }}</template></MkInput>
 	</section>
 </XContainer>
 </template>
diff --git a/src/client/pages/page-editor/els/page-editor.el.textarea-input.vue b/src/client/pages/page-editor/els/page-editor.el.textarea-input.vue
index cf3b9f93f4..a4fbb08ffe 100644
--- a/src/client/pages/page-editor/els/page-editor.el.textarea-input.vue
+++ b/src/client/pages/page-editor/els/page-editor.el.textarea-input.vue
@@ -3,9 +3,9 @@
 	<template #header><i class="fas fa-bolt"></i> {{ $ts._pages.blocks.textareaInput }}</template>
 
 	<section style="padding: 0 16px 16px 16px;">
-		<MkInput v-model:value="value.name"><template #prefix><i class="fas fa-magic"></i></template><span>{{ $ts._pages.blocks._textareaInput.name }}</span></MkInput>
-		<MkInput v-model:value="value.text"><span>{{ $ts._pages.blocks._textareaInput.text }}</span></MkInput>
-		<MkTextarea v-model:value="value.default"><span>{{ $ts._pages.blocks._textareaInput.default }}</span></MkTextarea>
+		<MkInput v-model="value.name"><template #prefix><i class="fas fa-magic"></i></template><template #label>{{ $ts._pages.blocks._textareaInput.name }}</template></MkInput>
+		<MkInput v-model="value.text"><template #label>{{ $ts._pages.blocks._textareaInput.text }}</template></MkInput>
+		<MkTextarea v-model="value.default"><template #label>{{ $ts._pages.blocks._textareaInput.default }}</template></MkTextarea>
 	</section>
 </XContainer>
 </template>
diff --git a/src/client/pages/page-editor/page-editor.script-block.vue b/src/client/pages/page-editor/page-editor.script-block.vue
index 65ac731e47..fedcd7b317 100644
--- a/src/client/pages/page-editor/page-editor.script-block.vue
+++ b/src/client/pages/page-editor/page-editor.script-block.vue
@@ -40,9 +40,9 @@
 		<input v-model="value.value"/>
 	</section>
 	<section v-else-if="value.type === 'fn'" class="" style="padding:0 16px 16px 16px;">
-		<MkTextarea v-model:value="slots">
-			<span>{{ $ts._pages.script.blocks._fn.slots }}</span>
-			<template #desc>{{ $t('_pages.script.blocks._fn.slots-info') }}</template>
+		<MkTextarea v-model="slots">
+			<template #label>{{ $ts._pages.script.blocks._fn.slots }}</template>
+			<template #caption>{{ $t('_pages.script.blocks._fn.slots-info') }}</template>
 		</MkTextarea>
 		<XV v-if="value.value.expression" v-model:value="value.value.expression" :title="$t(`_pages.script.blocks._fn.arg1`)" :get-expected-type="() => null" :hpml="hpml" :fn-slots="value.value.slots" :name="name"/>
 	</section>
diff --git a/src/client/pages/page-editor/page-editor.vue b/src/client/pages/page-editor/page-editor.vue
index e96e1faaf2..dc6896ba12 100644
--- a/src/client/pages/page-editor/page-editor.vue
+++ b/src/client/pages/page-editor/page-editor.vue
@@ -11,28 +11,28 @@
 	<MkContainer :foldable="true" :expanded="true" class="_gap">
 		<template #header><i class="fas fa-cog"></i> {{ $ts._pages.pageSetting }}</template>
 		<div style="padding: 16px;">
-			<MkInput v-model:value="title">
-				<span>{{ $ts._pages.title }}</span>
+			<MkInput v-model="title">
+				<template #label>{{ $ts._pages.title }}</template>
 			</MkInput>
 
-			<MkInput v-model:value="summary">
-				<span>{{ $ts._pages.summary }}</span>
+			<MkInput v-model="summary">
+				<template #label>{{ $ts._pages.summary }}</template>
 			</MkInput>
 
-			<MkInput v-model:value="name">
+			<MkInput v-model="name">
 				<template #prefix>{{ url }}/@{{ author.username }}/pages/</template>
-				<span>{{ $ts._pages.url }}</span>
+				<template #label>{{ $ts._pages.url }}</template>
 			</MkInput>
 
-			<MkSwitch v-model:value="alignCenter">{{ $ts._pages.alignCenter }}</MkSwitch>
+			<MkSwitch v-model="alignCenter">{{ $ts._pages.alignCenter }}</MkSwitch>
 
-			<MkSelect v-model:value="font">
+			<MkSelect v-model="font">
 				<template #label>{{ $ts._pages.font }}</template>
 				<option value="serif">{{ $ts._pages.fontSerif }}</option>
 				<option value="sans-serif">{{ $ts._pages.fontSansSerif }}</option>
 			</MkSelect>
 
-			<MkSwitch v-model:value="hideTitleWhenPinned">{{ $ts._pages.hideTitleWhenPinned }}</MkSwitch>
+			<MkSwitch v-model="hideTitleWhenPinned">{{ $ts._pages.hideTitleWhenPinned }}</MkSwitch>
 
 			<div class="eyeCatch">
 				<MkButton v-if="eyeCatchingImageId == null && !readonly" @click="setEyeCatchingImage"><i class="fas fa-plus"></i> {{ $ts._pages.eyeCatchingImageSet }}</MkButton>
@@ -77,7 +77,7 @@
 	<MkContainer :foldable="true" :expanded="true" class="_gap">
 		<template #header><i class="fas fa-code"></i> {{ $ts.script }}</template>
 		<div>
-			<MkTextarea class="_code" v-model:value="script"/>
+			<MkTextarea class="_code" v-model="script"/>
 		</div>
 	</MkContainer>
 </div>
diff --git a/src/client/pages/reversi/game.setting.vue b/src/client/pages/reversi/game.setting.vue
index 341aa7d658..1cc623b790 100644
--- a/src/client/pages/reversi/game.setting.vue
+++ b/src/client/pages/reversi/game.setting.vue
@@ -57,9 +57,9 @@
 			</header>
 
 			<div>
-				<MkSwitch v-model:value="game.isLlotheo" @update:value="updateSettings('isLlotheo')">{{ $ts._reversi.isLlotheo }}</MkSwitch>
-				<MkSwitch v-model:value="game.loopedBoard" @update:value="updateSettings('loopedBoard')">{{ $ts._reversi.loopedMap }}</MkSwitch>
-				<MkSwitch v-model:value="game.canPutEverywhere" @update:value="updateSettings('canPutEverywhere')">{{ $ts._reversi.canPutEverywhere }}</MkSwitch>
+				<MkSwitch v-model="game.isLlotheo" @update:modelValue="updateSettings('isLlotheo')">{{ $ts._reversi.isLlotheo }}</MkSwitch>
+				<MkSwitch v-model="game.loopedBoard" @update:modelValue="updateSettings('loopedBoard')">{{ $ts._reversi.loopedMap }}</MkSwitch>
+				<MkSwitch v-model="game.canPutEverywhere" @update:modelValue="updateSettings('canPutEverywhere')">{{ $ts._reversi.canPutEverywhere }}</MkSwitch>
 			</div>
 		</div>
 
@@ -70,7 +70,7 @@
 
 			<div>
 				<template v-for="item in form">
-					<MkSwitch v-if="item.type == 'switch'" v-model:value="item.value" :key="item.id" @change="onChangeForm(item)">{{ item.label || item.desc || '' }}</MkSwitch>
+					<MkSwitch v-if="item.type == 'switch'" v-model="item.value" :key="item.id" @change="onChangeForm(item)">{{ item.label || item.desc || '' }}</MkSwitch>
 
 					<div class="card" v-if="item.type == 'radio'" :key="item.id">
 						<header>
diff --git a/src/client/pages/room/room.vue b/src/client/pages/room/room.vue
index 61650e067f..365ed5b803 100644
--- a/src/client/pages/room/room.vue
+++ b/src/client/pages/room/room.vue
@@ -31,7 +31,7 @@
 			<MkButton @click="add()"><i class="fas fa-box-open"></i> {{ $ts._rooms.addFurniture }}</MkButton>
 		</div>
 		<div class="_content">
-			<MkSelect :value="roomType" @update:value="updateRoomType($event)">
+			<MkSelect :model-value="roomType" @update:modelValue="updateRoomType($event)">
 				<template #label>{{ $ts._rooms.roomType }}</template>
 				<option value="default">{{ $ts._rooms._roomType.default }}</option>
 				<option value="washitsu">{{ $ts._rooms._roomType.washitsu }}</option>
diff --git a/src/client/pages/settings/2fa.vue b/src/client/pages/settings/2fa.vue
index aa14f91d71..48b06eaa24 100644
--- a/src/client/pages/settings/2fa.vue
+++ b/src/client/pages/settings/2fa.vue
@@ -20,7 +20,7 @@
 					</div>
 				</div>
 
-				<MkSwitch v-model:value="usePasswordLessLogin" @update:value="updatePasswordLessLogin" v-if="$i.securityKeysList.length > 0">{{ $ts.passwordLessLogin }}</MkSwitch>
+				<MkSwitch v-model="usePasswordLessLogin" @update:modelValue="updatePasswordLessLogin" v-if="$i.securityKeysList.length > 0">{{ $ts.passwordLessLogin }}</MkSwitch>
 
 				<MkInfo warn v-if="registration && registration.error">{{ $ts.error }} {{ registration.error }}</MkInfo>
 				<MkButton v-if="!registration || registration.error" @click="addSecurityKey">{{ $ts._2fa.registerKey }}</MkButton>
@@ -32,8 +32,8 @@
 					</li>
 					<li v-if="registration.stage >= 1">
 						<MkForm :disabled="registration.stage != 1 || registration.saving">
-							<MkInput v-model:value="keyName" :max="30">
-								<span>{{ $ts.securityKeyName }}</span>
+							<MkInput v-model="keyName" :max="30">
+								<template #label>{{ $ts.securityKeyName }}</template>
 							</MkInput>
 							<MkButton @click="registerKey" :disabled="keyName.length == 0">{{ $ts.registerSecurityKey }}</MkButton>
 							<i v-if="registration.saving && registration.stage == 1" class="fas fa-spinner fa-pulse fa-fw"></i>
@@ -56,7 +56,7 @@
 				</li>
 				<li>{{ $ts._2fa.step2 }}<br><img :src="data.qr"></li>
 				<li>{{ $ts._2fa.step3 }}<br>
-					<MkInput v-model:value="token" type="text" pattern="^[0-9]{6}$" autocomplete="off" spellcheck="false">{{ $ts.token }}</MkInput>
+					<MkInput v-model="token" type="text" pattern="^[0-9]{6}$" autocomplete="off" spellcheck="false"><template #label>{{ $ts.token }}</template></MkInput>
 					<MkButton primary @click="submit">{{ $ts.done }}</MkButton>
 				</li>
 			</ol>
diff --git a/src/client/pages/test.vue b/src/client/pages/test.vue
index 9a06d31090..131571e9dd 100644
--- a/src/client/pages/test.vue
+++ b/src/client/pages/test.vue
@@ -4,23 +4,23 @@
 		<div class="_card _gap">
 			<div class="_title">Dialog</div>
 			<div class="_content">
-				<MkInput v-model:value="dialogTitle">
-					<span>Title</span>
+				<MkInput v-model="dialogTitle">
+					<template #label>Title</template>
 				</MkInput>
-				<MkInput v-model:value="dialogBody">
-					<span>Body</span>
+				<MkInput v-model="dialogBody">
+					<template #label>Body</template>
 				</MkInput>
 				<MkRadio v-model="dialogType" value="info">Info</MkRadio>
 				<MkRadio v-model="dialogType" value="success">Success</MkRadio>
 				<MkRadio v-model="dialogType" value="warning">Warn</MkRadio>
 				<MkRadio v-model="dialogType" value="error">Error</MkRadio>
-				<MkSwitch v-model:value="dialogCancel">
+				<MkSwitch v-model="dialogCancel">
 					<span>With cancel button</span>
 				</MkSwitch>
-				<MkSwitch v-model:value="dialogCancelByBgClick">
+				<MkSwitch v-model="dialogCancelByBgClick">
 					<span>Can cancel by modal bg click</span>
 				</MkSwitch>
-				<MkSwitch v-model:value="dialogInput">
+				<MkSwitch v-model="dialogInput">
 					<span>With input field</span>
 				</MkSwitch>
 				<MkButton @click="showDialog()">Show</MkButton>
@@ -33,11 +33,11 @@
 		<div class="_card _gap">
 			<div class="_title">Form</div>
 			<div class="_content">
-				<MkInput v-model:value="formTitle">
-					<span>Title</span>
+				<MkInput v-model="formTitle">
+					<template #label>Title</template>
 				</MkInput>
-				<MkTextarea v-model:value="formForm">
-					<span>Form</span>
+				<MkTextarea v-model="formForm">
+					<template #label>Form</template>
 				</MkTextarea>
 				<MkButton @click="form()">Show</MkButton>
 			</div>
@@ -49,8 +49,8 @@
 		<div class="_card _gap">
 			<div class="_title">MFM</div>
 			<div class="_content">
-				<MkTextarea v-model:value="mfm">
-					<span>MFM</span>
+				<MkTextarea v-model="mfm">
+					<template #label>MFM</template>
 				</MkTextarea>
 			</div>
 			<div class="_content">
@@ -61,7 +61,7 @@
 		<div class="_card _gap">
 			<div class="_title">selectDriveFile</div>
 			<div class="_content">
-				<MkSwitch v-model:value="selectDriveFileMultiple">
+				<MkSwitch v-model="selectDriveFileMultiple">
 					<span>Multiple</span>
 				</MkSwitch>
 				<MkButton @click="selectDriveFile()">selectDriveFile</MkButton>
@@ -74,7 +74,7 @@
 		<div class="_card _gap">
 			<div class="_title">selectDriveFolder</div>
 			<div class="_content">
-				<MkSwitch v-model:value="selectDriveFolderMultiple">
+				<MkSwitch v-model="selectDriveFolderMultiple">
 					<span>Multiple</span>
 				</MkSwitch>
 				<MkButton @click="selectDriveFolder()">selectDriveFolder</MkButton>
@@ -97,14 +97,14 @@
 		<div class="_card _gap">
 			<div class="_title">Notification</div>
 			<div class="_content">
-				<MkInput v-model:value="notificationIconUrl">
-					<span>Icon URL</span>
+				<MkInput v-model="notificationIconUrl">
+					<template #label>Icon URL</template>
 				</MkInput>
-				<MkInput v-model:value="notificationHeader">
-					<span>Header</span>
+				<MkInput v-model="notificationHeader">
+					<template #label>Header</template>
 				</MkInput>
-				<MkTextarea v-model:value="notificationBody">
-					<span>Body</span>
+				<MkTextarea v-model="notificationBody">
+					<template #label>Body</template>
 				</MkTextarea>
 				<MkButton @click="createNotification()">createNotification</MkButton>
 			</div>
diff --git a/src/client/pages/welcome.setup.vue b/src/client/pages/welcome.setup.vue
index 79464b814a..5ed1ae49c4 100644
--- a/src/client/pages/welcome.setup.vue
+++ b/src/client/pages/welcome.setup.vue
@@ -3,13 +3,13 @@
 	<h1>Welcome to Misskey!</h1>
 	<div>
 		<p>{{ $ts.intro }}</p>
-		<MkInput v-model:value="username" pattern="^[a-zA-Z0-9_]{1,20}$" spellcheck="false" required>
-			<span>{{ $ts.username }}</span>
+		<MkInput v-model="username" pattern="^[a-zA-Z0-9_]{1,20}$" spellcheck="false" required>
+			<template #label>{{ $ts.username }}</template>
 			<template #prefix>@</template>
 			<template #suffix>@{{ host }}</template>
 		</MkInput>
-		<MkInput v-model:value="password" type="password">
-			<span>{{ $ts.password }}</span>
+		<MkInput v-model="password" type="password">
+			<template #label>{{ $ts.password }}</template>
 			<template #prefix><i class="fas fa-lock"></i></template>
 		</MkInput>
 		<footer>
diff --git a/src/client/themes/_dark.json5 b/src/client/themes/_dark.json5
index fb0fe80146..a8ec67e8c7 100644
--- a/src/client/themes/_dark.json5
+++ b/src/client/themes/_dark.json5
@@ -53,7 +53,8 @@
 		cwHoverBg: '#707b97',
 		buttonBg: 'rgba(255, 255, 255, 0.05)',
 		buttonHoverBg: 'rgba(255, 255, 255, 0.1)',
-		inputBorder: '#959da2',
+		inputBorder: 'rgba(255, 255, 255, 0.1)',
+		inputBorderHover: 'rgba(255, 255, 255, 0.2)',
 		listItemHoverBg: 'rgba(255, 255, 255, 0.03)',
 		driveFolderBg: ':alpha<0.3<@accent',
 		wallpaperOverlay: 'rgba(0, 0, 0, 0.5)',
diff --git a/src/client/themes/_light.json5 b/src/client/themes/_light.json5
index db971ba0e4..0c54c704a6 100644
--- a/src/client/themes/_light.json5
+++ b/src/client/themes/_light.json5
@@ -53,7 +53,8 @@
 		cwHoverBg: '#bbc4ce',
 		buttonBg: 'rgba(0, 0, 0, 0.05)',
 		buttonHoverBg: 'rgba(0, 0, 0, 0.1)',
-		inputBorder: '#dae0e4',
+		inputBorder: 'rgba(0, 0, 0, 0.1)',
+		inputBorderHover: 'rgba(0, 0, 0, 0.2)',
 		listItemHoverBg: 'rgba(0, 0, 0, 0.03)',
 		driveFolderBg: ':alpha<0.3<@accent',
 		wallpaperOverlay: 'rgba(255, 255, 255, 0.5)',
diff --git a/src/client/themes/d-astro.json5 b/src/client/themes/d-astro.json5
index c9818f2c5c..74b90addd5 100644
--- a/src/client/themes/d-astro.json5
+++ b/src/client/themes/d-astro.json5
@@ -38,7 +38,8 @@
 		infoWarnFg: '#ffbd3e',
 		navHoverFg: ':lighten<17<@fg',
 		dateLabelFg: '@fg',
-		inputBorder: '#959da2',
+		inputBorder: 'rgba(255, 255, 255, 0.1)',
+		inputBorderHover: 'rgba(255, 255, 255, 0.2)',
 		panelBorder: '" solid 1px var(--divider)',
 		accentDarken: ':darken<10<@accent',
 		acrylicPanel: ':alpha<0.5<@panel',
diff --git a/src/client/themes/l-apricot.json5 b/src/client/themes/l-apricot.json5
index 5e98d79492..74cb24d407 100644
--- a/src/client/themes/l-apricot.json5
+++ b/src/client/themes/l-apricot.json5
@@ -16,6 +16,7 @@
 		mention: '@accent',
 		hashtag: '@accent',
 		inputBorder: 'rgba(0, 0, 0, 0.1)',
+		inputBorderHover: 'rgba(0, 0, 0, 0.2)',
 		infoBg: 'rgb(226, 235, 241)',
 	},
 }
diff --git a/src/client/themes/l-vivid.json5 b/src/client/themes/l-vivid.json5
index 0d6255d300..9fc04cd0d3 100644
--- a/src/client/themes/l-vivid.json5
+++ b/src/client/themes/l-vivid.json5
@@ -41,7 +41,8 @@
 		infoWarnFg: '#573c08',
 		navHoverFg: ':darken<17<@fg',
 		dateLabelFg: '@fg',
-		inputBorder: '#dae0e4',
+		inputBorder: 'rgba(0, 0, 0, 0.1)',
+		inputBorderHover: 'rgba(0, 0, 0, 0.2)',
 		panelBorder: '" solid 1px var(--divider)',
 		accentDarken: ':darken<10<@accent',
 		acrylicPanel: ':alpha<0.5<@panel',
-- 
GitLab


From 3a28c06534b229998bee340e13da5b8efd13a177 Mon Sep 17 00:00:00 2001
From: syuilo <Syuilotan@yahoo.co.jp>
Date: Fri, 6 Aug 2021 22:47:26 +0900
Subject: [PATCH 37/70] :art:

---
 src/client/style.scss | 19 +++++++++++++++++++
 1 file changed, 19 insertions(+)

diff --git a/src/client/style.scss b/src/client/style.scss
index 02f794fba4..d2a54e34b0 100644
--- a/src/client/style.scss
+++ b/src/client/style.scss
@@ -401,6 +401,25 @@ hr {
 	backdrop-filter: blur(15px);
 }
 
+._inputSplit {
+	display: grid;
+	grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
+	grid-gap: 8px;
+	margin: 1em 0;
+
+	> * {
+		margin: 0 !important;
+	}
+}
+
+._inputNoTopMargin {
+	margin-top: 0 !important;
+}
+
+._inputNoBottomMargin {
+	margin-bottom: 0 !important;
+}
+
 ._table {
 	> ._row {
 		display: flex;
-- 
GitLab


From 742a005523af309ab12cf71ab8277adf195886bf Mon Sep 17 00:00:00 2001
From: syuilo <Syuilotan@yahoo.co.jp>
Date: Sat, 7 Aug 2021 10:23:59 +0900
Subject: [PATCH 38/70] =?UTF-8?q?=E3=82=AB=E3=82=B9=E3=82=BF=E3=83=A0?=
 =?UTF-8?q?=E7=B5=B5=E6=96=87=E5=AD=97=E4=B8=80=E8=A6=A7=E3=83=9A=E3=83=BC?=
 =?UTF-8?q?=E3=82=B8?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 locales/ja-JP.yml           |   1 +
 src/client/menu.ts          |   5 ++
 src/client/pages/emojis.vue | 153 ++++++++++++++++++++++++++++++++++++
 3 files changed, 159 insertions(+)
 create mode 100644 src/client/pages/emojis.vue

diff --git a/locales/ja-JP.yml b/locales/ja-JP.yml
index 9fa4531db5..08fd3c9125 100644
--- a/locales/ja-JP.yml
+++ b/locales/ja-JP.yml
@@ -765,6 +765,7 @@ customCss: "カスタムCSS"
 customCssWarn: "この設定は必ず知識のある方が行ってください。不適切な設定を行うとクライアントが正常に使用できなくなる恐れがあります。"
 global: "グローバル"
 squareAvatars: "アイコンを四角形で表示"
+searchResult: "検索結果"
 
 _docs: 
   continueReading: "続きを読む"
diff --git a/src/client/menu.ts b/src/client/menu.ts
index 8a9f4d4ac6..b00fa7a6ad 100644
--- a/src/client/menu.ts
+++ b/src/client/menu.ts
@@ -113,6 +113,11 @@ export const menuDef = {
 		icon: 'fas fa-satellite-dish',
 		to: '/channels',
 	},
+	emojis: {
+		title: 'emojis',
+		icon: 'fas fa-laugh',
+		to: '/emojis',
+	},
 	games: {
 		title: 'games',
 		icon: 'fas fa-gamepad',
diff --git a/src/client/pages/emojis.vue b/src/client/pages/emojis.vue
new file mode 100644
index 0000000000..c766b5f7b8
--- /dev/null
+++ b/src/client/pages/emojis.vue
@@ -0,0 +1,153 @@
+<template>
+<div class="driuhtrh">
+	<div class="query">
+		<MkInput v-model="q" class="_inputNoTopMargin _inputNoBottomMargin">
+			<template #prefix><i class="fas fa-search"></i></template>
+			<template #label>{{ $ts.search }}</template>
+		</MkInput>
+	</div>
+
+	<div class="emojis">
+		<MkFolder v-if="searchEmojis">
+			<template #header>{{ $ts.searchResult }}</template>
+			<div class="zuvgdzyt">
+				<button v-for="emoji in searchEmojis" :key="emoji.name" class="emoji _button" @click="menu(emoji, $event)">
+					<img :src="emoji.url" class="img" :alt="emoji.name"/>
+					<div class="body">
+						<div class="name _monospace">{{ emoji.name }}</div>
+						<div class="info">{{ emoji.aliases.join(' ') }}</div>
+					</div>
+				</button>
+			</div>
+		</MkFolder>
+		<MkFolder v-for="category in customEmojiCategories" :key="category">
+			<template #header>{{ category || $ts.other }}</template>
+			<div class="zuvgdzyt">
+				<button v-for="emoji in customEmojis.filter(e => e.category === category)" :key="emoji.name" class="emoji _button" @click="menu(emoji, $event)">
+					<img :src="emoji.url" class="img" :alt="emoji.name"/>
+					<div class="body">
+						<div class="name _monospace">{{ emoji.name }}</div>
+						<div class="info">{{ emoji.aliases.join(' ') }}</div>
+					</div>
+				</button>
+			</div>
+		</MkFolder>
+	</div>
+</div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+import MkButton from '@client/components/ui/button.vue';
+import MkInput from '@client/components/ui/input.vue';
+import MkSelect from '@client/components/ui/select.vue';
+import MkFolder from '@client/components/ui/folder.vue';
+import * as os from '@client/os';
+import * as symbols from '@client/symbols';
+import { emojiCategories } from '@client/instance';
+import copyToClipboard from '@client/scripts/copy-to-clipboard';
+
+export default defineComponent({
+	components: {
+		MkButton,
+		MkInput,
+		MkSelect,
+		MkFolder,
+	},
+
+	data() {
+		return {
+			[symbols.PAGE_INFO]: {
+				title: this.$ts.customEmojis,
+				icon: 'fas fa-laugh'
+			},
+			q: '',
+			customEmojiCategories: emojiCategories,
+			customEmojis: this.$instance.emojis,
+			searchEmojis: null,
+		}
+	},
+
+	watch: {
+		q() {
+			if (this.q === '' || this.q == null) {
+				this.searchEmojis = null;
+				return;
+			}
+
+			this.searchEmojis = this.customEmojis.filter(e => e.name.includes(this.q) || e.aliases.includes(this.q));
+		}
+	},
+
+	methods: {
+		menu(emoji, ev) {
+			os.modalMenu([{
+				type: 'label',
+				text: ':' + emoji.name + ':',
+			}, {
+				text: this.$ts.copy,
+				icon: 'fas fa-copy',
+				action: () => {
+					copyToClipboard(`:${emoji.name}:`);
+					os.success();
+				}
+			}], ev.currentTarget || ev.target);
+		}
+	}
+});
+</script>
+
+<style lang="scss" scoped>
+.driuhtrh {
+	> .query {
+		background: var(--bg);
+		padding: 16px;
+		border-bottom: solid 0.5px var(--divider);
+	}
+
+	> .emojis {
+		.zuvgdzyt {
+			display: grid;
+			grid-template-columns: repeat(auto-fill, minmax(190px, 1fr));
+			grid-gap: 12px;
+			margin: 0 var(--margin) var(--margin) var(--margin);
+
+			> .emoji {
+				display: flex;
+				align-items: center;
+				padding: 12px;
+				text-align: left;
+				border: solid 1px var(--divider);
+				border-radius: 8px;
+
+				&:hover {
+					border-color: var(--accent);
+				}
+
+				> .img {
+					width: 42px;
+					height: 42px;
+				}
+
+				> .body {
+					padding: 0 0 0 8px;
+					white-space: nowrap;
+					overflow: hidden;
+
+					> .name {
+						text-overflow: ellipsis;
+						overflow: hidden;
+					}
+
+					> .info {
+						opacity: 0.5;
+						font-size: 0.9em;
+						text-overflow: ellipsis;
+						overflow: hidden;
+					}
+				}
+			}
+		}
+	}
+}
+</style>
-- 
GitLab


From 9f9d7325fd013af418dd30c86cfd88becb48fca1 Mon Sep 17 00:00:00 2001
From: syuilo <Syuilotan@yahoo.co.jp>
Date: Sat, 7 Aug 2021 10:24:50 +0900
Subject: [PATCH 39/70] =?UTF-8?q?=E3=82=A4=E3=83=B3=E3=82=B9=E3=82=BF?=
 =?UTF-8?q?=E3=83=B3=E3=82=B9=E4=B8=80=E8=A6=A7=E3=83=9A=E3=83=BC=E3=82=B8?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 locales/ja-JP.yml                             |   2 +
 src/client/menu.ts                            |   5 +
 .../pages/{instance => }/federation.vue       | 190 ++++++++++++------
 src/client/pages/instance/index.vue           |   2 +-
 4 files changed, 142 insertions(+), 57 deletions(-)
 rename src/client/pages/{instance => }/federation.vue (50%)

diff --git a/locales/ja-JP.yml b/locales/ja-JP.yml
index 08fd3c9125..eed17edb14 100644
--- a/locales/ja-JP.yml
+++ b/locales/ja-JP.yml
@@ -765,6 +765,8 @@ customCss: "カスタムCSS"
 customCssWarn: "この設定は必ず知識のある方が行ってください。不適切な設定を行うとクライアントが正常に使用できなくなる恐れがあります。"
 global: "グローバル"
 squareAvatars: "アイコンを四角形で表示"
+sent: "送信"
+received: "受信"
 searchResult: "検索結果"
 
 _docs: 
diff --git a/src/client/menu.ts b/src/client/menu.ts
index b00fa7a6ad..0b5341f970 100644
--- a/src/client/menu.ts
+++ b/src/client/menu.ts
@@ -113,6 +113,11 @@ export const menuDef = {
 		icon: 'fas fa-satellite-dish',
 		to: '/channels',
 	},
+	federation: {
+		title: 'federation',
+		icon: 'fas fa-globe',
+		to: '/federation',
+	},
 	emojis: {
 		title: 'emojis',
 		icon: 'fas fa-laugh',
diff --git a/src/client/pages/instance/federation.vue b/src/client/pages/federation.vue
similarity index 50%
rename from src/client/pages/instance/federation.vue
rename to src/client/pages/federation.vue
index 96f72fed44..59867b8e54 100644
--- a/src/client/pages/instance/federation.vue
+++ b/src/client/pages/federation.vue
@@ -1,9 +1,12 @@
 <template>
-<div class="enuoauvw">
+<div class="taeiyria">
 	<div class="query">
-		<MkInput v-model:value="host" :debounce="true"><span>{{ $ts.host }}</span></MkInput>
-		<div class="inputs" style="display: flex;">
-			<MkSelect v-model:value="state" style="margin: 0; flex: 1;">
+		<MkInput v-model="host" :debounce="true" class="_inputNoTopMargin">
+			<template #prefix><i class="fas fa-search"></i></template>
+			<template #label>{{ $ts.host }}</template>
+		</MkInput>
+		<div class="_inputSplit _inputNoBottomMargin">
+			<MkSelect v-model="state">
 				<template #label>{{ $ts.state }}</template>
 				<option value="all">{{ $ts.all }}</option>
 				<option value="federating">{{ $ts.federating }}</option>
@@ -13,7 +16,7 @@
 				<option value="blocked">{{ $ts.blocked }}</option>
 				<option value="notResponding">{{ $ts.notResponding }}</option>
 			</MkSelect>
-			<MkSelect v-model:value="sort" style="margin: 0; flex: 1;">
+			<MkSelect v-model="sort">
 				<template #label>{{ $ts.sort }}</template>
 				<option value="+pubSub">{{ $ts.pubSub }} ({{ $ts.descendingOrder }})</option>
 				<option value="-pubSub">{{ $ts.pubSub }} ({{ $ts.ascendingOrder }})</option>
@@ -38,16 +41,53 @@
 	</div>
 
 	<MkPagination :pagination="pagination" #default="{items}" ref="instances" :key="host + state">
-		<div class="ppgwaixt _block" v-for="instance in items" :key="instance.id" @click="info(instance)">
-			<div class="host"><i class="fas fa-circle indicator" :class="getStatus(instance)"></i><b>{{ instance.host }}</b></div>
-			<div class="status">
-				<span class="sub" v-if="instance.followersCount > 0"><i class="fas fa-caret-down icon"></i>Sub</span>
-				<span class="sub" v-else><i class="fas fa-caret-down icon"></i>-</span>
-				<span class="pub" v-if="instance.followingCount > 0"><i class="fas fa-caret-up icon"></i>Pub</span>
-				<span class="pub" v-else><i class="fas fa-caret-up icon"></i>-</span>
-				<span class="lastCommunicatedAt"><i class="fas fa-exchange-alt icon"></i><MkTime :time="instance.lastCommunicatedAt"/></span>
-				<span class="latestStatus"><i class="fas fa-traffic-light icon"></i>{{ instance.latestStatus || '-' }}</span>
-			</div>
+		<div class="dqokceoi">
+			<MkA class="instance" v-for="instance in items" :key="instance.id" :to="`/instance-info/${instance.host}`">
+				<div class="host"><img :src="instance.faviconUrl">{{ instance.host }}</div>
+				<div class="table">
+					<div class="cell">
+						<div class="key">{{ $ts.registeredAt }}</div>
+						<div class="value"><MkTime :time="instance.caughtAt"/></div>
+					</div>
+					<div class="cell">
+						<div class="key">{{ $ts.software }}</div>
+						<div class="value">{{ instance.softwareName || `(${$ts.unknown})` }}</div>
+					</div>
+					<div class="cell">
+						<div class="key">{{ $ts.version }}</div>
+						<div class="value">{{ instance.softwareVersion || `(${$ts.unknown})` }}</div>
+					</div>
+					<div class="cell">
+						<div class="key">{{ $ts.users }}</div>
+						<div class="value">{{ instance.usersCount }}</div>
+					</div>
+					<div class="cell">
+						<div class="key">{{ $ts.notes }}</div>
+						<div class="value">{{ instance.notesCount }}</div>
+					</div>
+					<div class="cell">
+						<div class="key">{{ $ts.sent }}</div>
+						<div class="value"><MkTime v-if="instance.latestRequestSentAt" :time="instance.latestRequestSentAt"/><span v-else>N/A</span></div>
+					</div>
+					<div class="cell">
+						<div class="key">{{ $ts.received }}</div>
+						<div class="value"><MkTime v-if="instance.latestRequestReceivedAt" :time="instance.latestRequestReceivedAt"/><span v-else>N/A</span></div>
+					</div>
+				</div>
+				<div class="footer">
+					<span class="status" :class="getStatus(instance)">{{ getStatus(instance) }}</span>
+					<span class="pubSub">
+						<span class="sub" v-if="instance.followersCount > 0"><i class="fas fa-caret-down icon"></i>Sub</span>
+						<span class="sub" v-else><i class="fas fa-caret-down icon"></i>-</span>
+						<span class="pub" v-if="instance.followingCount > 0"><i class="fas fa-caret-up icon"></i>Pub</span>
+						<span class="pub" v-else><i class="fas fa-caret-up icon"></i>-</span>
+					</span>
+					<span class="right">
+						<span class="latestStatus">{{ instance.latestStatus || '-' }}</span>
+						<span class="lastCommunicatedAt"><MkTime :time="instance.lastCommunicatedAt"/></span>
+					</span>
+				</div>
+			</MkA>
 		</div>
 	</MkPagination>
 </div>
@@ -59,7 +99,6 @@ import MkButton from '@client/components/ui/button.vue';
 import MkInput from '@client/components/ui/input.vue';
 import MkSelect from '@client/components/ui/select.vue';
 import MkPagination from '@client/components/ui/pagination.vue';
-import MkInstanceInfo from './instance.vue';
 import * as os from '@client/os';
 import * as symbols from '@client/symbols';
 
@@ -117,69 +156,108 @@ export default defineComponent({
 
 	methods: {
 		getStatus(instance) {
-			if (instance.isSuspended) return 'off';
-			if (instance.isNotResponding) return 'red';
-			return 'green';
+			if (instance.isSuspended) return 'suspended';
+			if (instance.isNotResponding) return 'error';
+			return 'alive';
 		},
-
-		info(instance) {
-			os.popup(MkInstanceInfo, {
-				instance: instance
-			}, {}, 'closed');
-		}
 	}
 });
 </script>
 
 <style lang="scss" scoped>
-.enuoauvw {
+.taeiyria {
 	> .query {
-		margin: var(--margin);
+		background: var(--bg);
+		padding: 16px;
+		border-bottom: solid 0.5px var(--divider);
 	}
 }
 
-.ppgwaixt {
-	cursor: pointer;
+.dqokceoi {
+	display: grid;
+	grid-template-columns: repeat(auto-fill, minmax(270px, 1fr));
+	grid-gap: 12px;
 	padding: 16px;
 
-	&:hover {
-		color: var(--accent);
-	}
+	> .instance {
+		padding: 16px;
+		border: solid 1px var(--divider);
+		border-radius: 6px;
 
-	> .host {
-		> .indicator {
-			font-size: 70%;
-			vertical-align: baseline;
-			margin-right: 4px;
+		&:hover {
+			border: solid 1px var(--accent);
+			text-decoration: none;
+		}
 
-			&.green {
-				color: #49c5ba;
+		> .host {
+			font-weight: bold;
+			white-space: nowrap;
+			overflow: hidden;
+			text-overflow: ellipsis;
+
+			> img {
+				width: 18px;
+				height: 18px;
+				margin-right: 6px;
+				vertical-align: middle;
 			}
+		}
+
+		> .table {
+			display: grid;
+			grid-template-columns: repeat(auto-fill, minmax(60px, 1fr));
+			grid-gap: 6px;
+			margin: 6px 0;
+			font-size: 70%;
 
-			&.yellow {
-				color: #c5a549;
+			> .cell {
+				> .key, > .value {
+					white-space: nowrap;
+					overflow: hidden;
+					text-overflow: ellipsis;
+				}
+
+				> .key {
+					opacity: 0.7;
+				}
+
+				> .value {
+				}
 			}
+		}
+
+		> .footer {
+			display: flex;
+			align-items: center;
+
+			> .status {
+				&.suspended {
+					opacity: 0.5;
+				}
 
-			&.red {
-				color: #c54949;
+				&.error {
+					color: var(--error);
+				}
+
+				&.alive {
+					color: var(--success);
+				}
 			}
 
-			&.off {
-				color: rgba(0, 0, 0, 0.5);
+			> .pubSub {
+				margin-left: 8px;
 			}
-		}
-	}
 
-	> .status {
-		display: flex;
-		align-items: center;
-		font-size: 90%;
+			> .right {
+				margin-left: auto;
+				font-size: 0.9em;
 
-		> span {
-			flex: 1;
-			
-			> .icon {
-				margin-right: 6px;
+				> .latestStatus {
+					border: solid 1px var(--divider);
+					border-radius: 4px;
+					margin: 0 8px;
+					padding: 0 4px;
+				}
 			}
 		}
 	}
diff --git a/src/client/pages/instance/index.vue b/src/client/pages/instance/index.vue
index acd46518f5..90dd29d55f 100644
--- a/src/client/pages/instance/index.vue
+++ b/src/client/pages/instance/index.vue
@@ -100,7 +100,7 @@ export default defineComponent({
 				case 'overview': return defineAsyncComponent(() => import('./overview.vue'));
 				case 'users': return defineAsyncComponent(() => import('./users.vue'));
 				case 'emojis': return defineAsyncComponent(() => import('./emojis.vue'));
-				case 'federation': return defineAsyncComponent(() => import('./federation.vue'));
+				case 'federation': return defineAsyncComponent(() => import('../federation.vue'));
 				case 'queue': return defineAsyncComponent(() => import('./queue.vue'));
 				case 'files': return defineAsyncComponent(() => import('./files.vue'));
 				case 'announcements': return defineAsyncComponent(() => import('./announcements.vue'));
-- 
GitLab


From ebb53e87f3221ddd17e907100c4ddf05aa0062f0 Mon Sep 17 00:00:00 2001
From: syuilo <Syuilotan@yahoo.co.jp>
Date: Sat, 7 Aug 2021 12:47:01 +0900
Subject: [PATCH 40/70] =?UTF-8?q?=E3=83=8F=E3=83=83=E3=82=B7=E3=83=A5?=
 =?UTF-8?q?=E3=82=BF=E3=82=B0=E5=85=A5=E5=8A=9B=E3=82=A8=E3=83=AA=E3=82=A2?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Resolve #7600
---
 locales/ja-JP.yml                   |  1 +
 src/client/components/post-form.vue | 32 +++++++++++++++++++++++++----
 src/client/store.ts                 |  8 ++++++++
 3 files changed, 37 insertions(+), 4 deletions(-)

diff --git a/locales/ja-JP.yml b/locales/ja-JP.yml
index eed17edb14..e3d0afcefb 100644
--- a/locales/ja-JP.yml
+++ b/locales/ja-JP.yml
@@ -768,6 +768,7 @@ squareAvatars: "アイコンを四角形で表示"
 sent: "送信"
 received: "受信"
 searchResult: "検索結果"
+hashtags: "ハッシュタグ"
 
 _docs: 
   continueReading: "続きを読む"
diff --git a/src/client/components/post-form.vue b/src/client/components/post-form.vue
index 13bbb3f9e5..ed2a934c26 100644
--- a/src/client/components/post-form.vue
+++ b/src/client/components/post-form.vue
@@ -37,6 +37,7 @@
 		<MkInfo warn v-if="hasNotSpecifiedMentions" class="hasNotSpecifiedMentions">{{ $ts.notSpecifiedMentionWarning }} - <button class="_textButton" @click="addMissingMention()">{{ $ts.add }}</button></MkInfo>
 		<input v-show="useCw" ref="cw" class="cw" v-model="cw" :placeholder="$ts.annotation" @keydown="onKeydown">
 		<textarea v-model="text" class="text" :class="{ withCw: useCw }" ref="text" :disabled="posting" :placeholder="placeholder" @keydown="onKeydown" @paste="onPaste" @compositionupdate="onCompositionUpdate" @compositionend="onCompositionEnd" />
+		<input v-show="withHashtags" ref="hashtags" class="hashtags" v-model="hashtags" :placeholder="$ts.hashtags" list="hashtags">
 		<XPostFormAttaches class="attaches" :files="files" @updated="updateFiles" @detach="detachFile" @changeSensitive="updateFileSensitive" @changeName="updateFileName"/>
 		<XPollEditor v-if="poll" :poll="poll" @destroyed="poll = null" @updated="onPollUpdate"/>
 		<footer>
@@ -44,9 +45,13 @@
 			<button class="_button" @click="togglePoll" :class="{ active: poll }" v-tooltip="$ts.poll"><i class="fas fa-poll-h"></i></button>
 			<button class="_button" @click="useCw = !useCw" :class="{ active: useCw }" v-tooltip="$ts.useCw"><i class="fas fa-eye-slash"></i></button>
 			<button class="_button" @click="insertMention" v-tooltip="$ts.mention"><i class="fas fa-at"></i></button>
+			<button class="_button" @click="withHashtags = !withHashtags" v-tooltip="$ts.hashtags"><i class="fas fa-hashtag"></i></button>
 			<button class="_button" @click="insertEmoji" v-tooltip="$ts.emoji"><i class="fas fa-laugh-squint"></i></button>
 			<button class="_button" @click="showActions" v-tooltip="$ts.plugin" v-if="postFormActions.length > 0"><i class="fas fa-plug"></i></button>
 		</footer>
+		<datalist id="hashtags">
+			<option v-for="hashtag in recentHashtags" :value="hashtag" :key="hashtag"/>
+		</datalist>
 	</div>
 </div>
 </template>
@@ -67,10 +72,11 @@ import { Autocomplete } from '@client/scripts/autocomplete';
 import { noteVisibilities } from '../../types';
 import * as os from '@client/os';
 import { selectFile } from '@client/scripts/select-file';
-import { notePostInterruptors, postFormActions } from '@client/store';
+import { defaultStore, notePostInterruptors, postFormActions } from '@client/store';
 import { isMobile } from '@client/scripts/is-mobile';
 import { throttle } from 'throttle-debounce';
 import MkInfo from '@client/components/ui/info.vue';
+import { defaultStore } from '@client/store';
 
 export default defineComponent({
 	components: {
@@ -212,7 +218,10 @@ export default defineComponent({
 
 		max(): number {
 			return this.$instance ? this.$instance.maxNoteTextLength : 1000;
-		}
+		},
+
+		withHashtags: defaultStore.makeGetterSetter('postFormWithHashtags'),
+		hashtags: defaultStore.makeGetterSetter('postFormHashtags'),
 	},
 
 	watch: {
@@ -303,6 +312,7 @@ export default defineComponent({
 		// TODO: detach when unmount
 		new Autocomplete(this.$refs.text, this, { model: 'text' });
 		new Autocomplete(this.$refs.cw, this, { model: 'cw' });
+		new Autocomplete(this.$refs.hashtags, this, { model: 'hashtags' });
 
 		this.$nextTick(() => {
 			// 書きかけの投稿を復元
@@ -605,6 +615,11 @@ export default defineComponent({
 				viaMobile: isMobile
 			};
 
+			if (this.withHashtags) {
+				const hashtags = this.hashtags.trim().split(' ').map(x => x.startsWith('#') ? x : '#' + x).join(' ');
+				data.text = data.text ? `${data.text} ${hashtags}` : hashtags;
+			}
+
 			// plugin
 			if (notePostInterruptors.length > 0) {
 				for (const interruptor of notePostInterruptors) {
@@ -618,8 +633,8 @@ export default defineComponent({
 				this.$nextTick(() => {
 					this.deleteDraft();
 					this.$emit('posted');
-					if (this.text && this.text != '') {
-						const hashtags = mfm.parse(this.text).filter(x => x.type === 'hashtag').map(x => x.props.hashtag);
+					if (data.text && data.text != '') {
+						const hashtags = mfm.parse(data.text).filter(x => x.type === 'hashtag').map(x => x.props.hashtag);
 						const history = JSON.parse(localStorage.getItem('hashtags') || '[]') as string[];
 						localStorage.setItem('hashtags', JSON.stringify(unique(hashtags.concat(history))));
 					}
@@ -785,6 +800,7 @@ export default defineComponent({
 		}
 
 		> .cw,
+		> .hashtags,
 		> .text {
 			display: block;
 			box-sizing: border-box;
@@ -813,6 +829,13 @@ export default defineComponent({
 			border-bottom: solid 0.5px var(--divider);
 		}
 
+		> .hashtags {
+			z-index: 1;
+			padding-top: 8px;
+			padding-bottom: 8px;
+			border-top: solid 0.5px var(--divider);
+		}
+
 		> .text {
 			max-width: 100%;
 			min-width: 100%;
@@ -872,6 +895,7 @@ export default defineComponent({
 			}
 
 			> .cw,
+			> .hashtags,
 			> .text {
 				padding: 0 16px;
 			}
diff --git a/src/client/store.ts b/src/client/store.ts
index 6ca431e059..364d8afd93 100644
--- a/src/client/store.ts
+++ b/src/client/store.ts
@@ -198,6 +198,14 @@ export const defaultStore = markRaw(new Storage('base', {
 		where: 'device',
 		default: false
 	},
+	postFormWithHashtags: {
+		where: 'device',
+		default: false
+	},
+	postFormHashtags: {
+		where: 'device',
+		default: ''
+	},
 }));
 
 // TODO: 他のタブと永続化されたstateを同期
-- 
GitLab


From b9972ec6bd7882381e92998ae227370de8fa1024 Mon Sep 17 00:00:00 2001
From: syuilo <Syuilotan@yahoo.co.jp>
Date: Sat, 7 Aug 2021 13:19:00 +0900
Subject: [PATCH 41/70] :art:

---
 src/client/pages/docs.vue | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/client/pages/docs.vue b/src/client/pages/docs.vue
index 639a95bb7a..8bd07937f8 100644
--- a/src/client/pages/docs.vue
+++ b/src/client/pages/docs.vue
@@ -1,7 +1,7 @@
 <template>
 <div class="vtaihdtm">
 	<div class="search">
-		<MkInput v-model="query" :debounce="true" type="search">
+		<MkInput v-model="query" :debounce="true" type="search" class="_inputNoTopMargin _inputNoBottomMargin">
 			<template #prefix><i class="fas fa-search"></i></template>
 			<template #label>{{ $ts.search }}</template>
 		</MkInput>
@@ -89,7 +89,7 @@ export default defineComponent({
 	background: var(--panel);
 
 	> .search {
-		padding: 8px;
+		padding: 12px;
 	}
 
 	.docs {
-- 
GitLab


From 18afdd6040ff21e43833cebacb92909f87a253f9 Mon Sep 17 00:00:00 2001
From: syuilo <Syuilotan@yahoo.co.jp>
Date: Sat, 7 Aug 2021 13:35:18 +0900
Subject: [PATCH 42/70] Improve docs

---
 src/docs/ja-JP/features/note.md     |  7 +++++++
 src/docs/ja-JP/features/timeline.md | 25 +++++++++++++++++++++----
 src/docs/ja-JP/general/glossary.md  | 12 ++++++++++++
 3 files changed, 40 insertions(+), 4 deletions(-)

diff --git a/src/docs/ja-JP/features/note.md b/src/docs/ja-JP/features/note.md
index a8b030fa2b..b32df7b727 100644
--- a/src/docs/ja-JP/features/note.md
+++ b/src/docs/ja-JP/features/note.md
@@ -43,6 +43,13 @@ Contents Warningの略で、ノートの内容を、閲覧者の操作なしに
 ### 「ローカルのみ」オプション
 このオプションを有効にすると、リモートにノートを連合しなくなります。
 
+### 公開範囲の比較
+<table>
+	<tr><th></th><th>パブリック</th><th>ホーム</th><th>フォロワー</th><th>ダイレクト</th></tr>
+	<tr><th>フォロワーのLTL/STL/GTL</th><td>✔</td><td>✔</td><td>✔</td><td></td></tr>
+	<tr><th>非フォロワーのLTL/STL/GTL</th><td>✔</td><td></td><td></td><td></td></tr>
+</table>
+
 ## ピン留め
 ノートをピン留めすると、ユーザーページに常にそのノートを表示しておくことができます。
 ノートのメニューを開き、「ピン留め」を選択してピン留めできます。
diff --git a/src/docs/ja-JP/features/timeline.md b/src/docs/ja-JP/features/timeline.md
index de8c6e5605..6e8ad62a0b 100644
--- a/src/docs/ja-JP/features/timeline.md
+++ b/src/docs/ja-JP/features/timeline.md
@@ -4,13 +4,30 @@
 なお、タイムラインの種類によってはサーバーにより無効になっている場合があります。
 
 ## ホーム
-自分のフォローしているユーザーの投稿
+自分のフォローしているユーザーの投稿が流れます。HTLと略されます。
 
 ## ローカル
-全てのローカルユーザーの「ホーム」指定されていない投稿
+全てのローカルユーザーの「ホーム」指定されていない投稿が流れます。LTLと略されます。
 
 ## ソーシャル
-自分のフォローしているユーザーの投稿と、全てのローカルユーザーの「ホーム」指定されていない投稿
+自分のフォローしているユーザーの投稿と、全てのローカルユーザーの「ホーム」指定されていない投稿が流れます。STLと略されます。
 
 ## グローバル
-全てのローカルユーザーの「ホーム」指定されていない投稿と、サーバーに届いた全てのリモートユーザーの「ホーム」指定されていない投稿
+全てのローカルユーザーの「ホーム」指定されていない投稿と、サーバーに届いた全てのリモートユーザーの「ホーム」指定されていない投稿が流れます。GTLと略されます。
+
+## 比較
+| ソース                |            |        |   タイムライン |       |            |
+|-----------------------|------------|--------|---------|------------|------------|
+| ユーザー              | 公開範囲   | ホーム | ローカル | ソーシャル | グローバル |
+| ローカル (フォロー)   | 公開       | ✔      | ✔        | ✔          | ✔          |
+|                       | ホーム     | ✔      |          | ✔          |            |
+|                       | フォロワー | ✔      | ✔        | ✔          | ✔          |
+| リモート (フォロー)   | 公開       | ✔      |          | ✔          | ✔          |
+|                       | ホーム     | ✔      |          | ✔          |            |
+|                       | フォロワー | ✔      |          | ✔          | ✔          |
+| ローカル (未フォロー) | 公開       |        | ✔        | ✔          | ✔          |
+|                       | ホーム     |        |          |            |            |
+|                       | フォロワー |        |          |            |            |
+| リモート (未フォロー) | 公開       |        |          |            | ✔          |
+|                       | ホーム     |        |          |            |            |
+|                       | フォロワー |        |          |            |            |
diff --git a/src/docs/ja-JP/general/glossary.md b/src/docs/ja-JP/general/glossary.md
index 59756b6857..5fab0990d9 100644
--- a/src/docs/ja-JP/general/glossary.md
+++ b/src/docs/ja-JP/general/glossary.md
@@ -25,6 +25,15 @@ Contents Warningの略。ノートの内容を、操作なしには表示しな
 (読み: ふぇでぃばーす)
 Misskeyを含む様々な分散型ソフトウェアのサーバーで構成されたネットワーク。
 
+## GTL
+グローバルタイムライン(Global TimeLine)の略。タイムラインの詳細は[こちら。](../features/timeline)
+
+## HTL
+ホームタイムライン(Home TimeLine)の略。タイムラインの詳細は[こちら。](../features/timeline)
+
+## LTL
+ローカルタイムライン(Local TimeLine)の略。タイムラインの詳細は[こちら。](../features/timeline)
+
 ## MFM
 (読み: えむえふえむ)
 Misskey Flavored Markdownの略で、Misskey上で使用できるマークアップ言語です。詳細は[こちら。](../features/mfm)
@@ -37,6 +46,9 @@ Not Safe For Workの略。画像を「閲覧注意」扱いにし、操作なし
 (読み: りのーと)
 既にあるノートを引用、もしくはそのノートを新しいノートとして共有する行為、またそれによって作成されたノート。詳細は[こちら。](../features/note)
 
+## STL
+ソーシャルタイムライン(Social TimeLine)の略。タイムラインの詳細は[こちら。](../features/timeline)
+
 ## 藍
 (読み: あい)
 Misskeyの看板娘(公式キャラクター)です。
-- 
GitLab


From 2ceeb170568c240cb94134a45324370da66cfed2 Mon Sep 17 00:00:00 2001
From: syuilo <Syuilotan@yahoo.co.jp>
Date: Sat, 7 Aug 2021 13:41:14 +0900
Subject: [PATCH 43/70] Add doc for admin

---
 locales/ja-JP.yml           |  1 +
 src/client/pages/docs.vue   | 10 ++++++++++
 src/docs/ja-JP/admin/faq.md |  5 +++++
 3 files changed, 16 insertions(+)
 create mode 100644 src/docs/ja-JP/admin/faq.md

diff --git a/locales/ja-JP.yml b/locales/ja-JP.yml
index e3d0afcefb..ef6a094fd7 100644
--- a/locales/ja-JP.yml
+++ b/locales/ja-JP.yml
@@ -775,6 +775,7 @@ _docs:
   features: "機能"
   generalTopics: "一般的なトピック"
   advancedTopics: "高度なトピック"
+  admin: "管理"
 
 _ad:
   back: "戻る"
diff --git a/src/client/pages/docs.vue b/src/client/pages/docs.vue
index 8bd07937f8..b1d3c2c7f9 100644
--- a/src/client/pages/docs.vue
+++ b/src/client/pages/docs.vue
@@ -36,6 +36,16 @@
 			</MkA>
 		</div>
 	</MkFolder>
+	<MkFolder>
+		<template #header>{{ $ts._docs.admin }}</template>
+		<div class="docs">
+			<MkA v-for="doc in docs.filter(doc => doc.path.startsWith('admin/'))" :key="doc.path" :to="`/docs/${doc.path}`" class="doc">
+				<div class="title">{{ doc.title }}</div>
+				<div class="summary">{{ doc.summary }}</div>
+				<div class="read">{{ $ts._docs.continueReading }}</div>
+			</MkA>
+		</div>
+	</MkFolder>
 </div>
 </template>
 
diff --git a/src/docs/ja-JP/admin/faq.md b/src/docs/ja-JP/admin/faq.md
new file mode 100644
index 0000000000..317b4e0655
--- /dev/null
+++ b/src/docs/ja-JP/admin/faq.md
@@ -0,0 +1,5 @@
+# よくある質問
+ここでは、サーバー管理者向けのよくある質問を掲載しています。
+
+## デフォルトテーマを設定したい
+現在、デフォルトテーマ設定機能は実装されていません。
-- 
GitLab


From 90999e0ef960f0a19744339a4c07abddd5459932 Mon Sep 17 00:00:00 2001
From: syuilo <Syuilotan@yahoo.co.jp>
Date: Sat, 7 Aug 2021 13:56:18 +0900
Subject: [PATCH 44/70] Improve docs

---
 src/docs/ja-JP/admin/disable-timelines.md | 11 +++++++++++
 src/docs/ja-JP/general/glossary.md        |  6 ++++++
 2 files changed, 17 insertions(+)
 create mode 100644 src/docs/ja-JP/admin/disable-timelines.md

diff --git a/src/docs/ja-JP/admin/disable-timelines.md b/src/docs/ja-JP/admin/disable-timelines.md
new file mode 100644
index 0000000000..d5b4182e1e
--- /dev/null
+++ b/src/docs/ja-JP/admin/disable-timelines.md
@@ -0,0 +1,11 @@
+# LTL/STL/GTLの無効化
+Misskeyでは、LTL/STL/GTLをそれぞれ無効化することができます。有効/無効を切り替えるには、インスタンスコントロールパネルで設定します。
+
+LTLやSTLは、そのインスタンス全員の投稿が見れるため、新規のユーザーにとってはユーザーを探す必要がなくなり、興味のあるユーザーを見つけやすいという利点があります。
+しかし同時に、フォロー機能が活用されなくなったり、不適切な投稿が目につきやすくなったり、チャットのようになることで内輪感が生じて逆に新規ユーザーが参加しにくくなるといったデメリットも持ち合わせています。
+サーバーによってメリット/デメリットどちらが優勢かは異なるので、オプションとして無効にできるようになっています。
+もしデメリットの方が上回っていると感じたら、それらのタイムラインを無効化することも検討してください。
+
+<div class="warn">⚠️ 無効化を行うと、ユーザーが困惑し、短期的に見て利用者が減る可能性があります。そのため、無効化の際は影響を慎重に検討し、事前に説明してフォローを整える期間を一定程度設けることを推奨します。</div>
+
+なお、管理者/モデレーターは、これらのタイムラインの無効化状態は適用されず、引き続き利用可能です。
diff --git a/src/docs/ja-JP/general/glossary.md b/src/docs/ja-JP/general/glossary.md
index 5fab0990d9..b9df7cfa81 100644
--- a/src/docs/ja-JP/general/glossary.md
+++ b/src/docs/ja-JP/general/glossary.md
@@ -53,9 +53,15 @@ Not Safe For Workの略。画像を「閲覧注意」扱いにし、操作なし
 (読み: あい)
 Misskeyの看板娘(公式キャラクター)です。
 
+## アクティブユーザー
+インスタンスにアカウントを作っているユーザーのうち、現在も実際にサービスを利用しているユーザーのこと。
+
 ## インスタンス
 todo
 
+## コントロールパネル
+インスタンスの設定画面のこと。
+
 ## サーバー
 todo
 
-- 
GitLab


From a1a51ce51876ac20b790db3817567a5eafc6b1e0 Mon Sep 17 00:00:00 2001
From: syuilo <Syuilotan@yahoo.co.jp>
Date: Sat, 7 Aug 2021 14:05:12 +0900
Subject: [PATCH 45/70] Improve docs

---
 src/docs/ja-JP/admin/disable-timelines.md | 2 +-
 src/docs/ja-JP/advanced/aiscript.md       | 7 +++++--
 2 files changed, 6 insertions(+), 3 deletions(-)

diff --git a/src/docs/ja-JP/admin/disable-timelines.md b/src/docs/ja-JP/admin/disable-timelines.md
index d5b4182e1e..910b31bf11 100644
--- a/src/docs/ja-JP/admin/disable-timelines.md
+++ b/src/docs/ja-JP/admin/disable-timelines.md
@@ -8,4 +8,4 @@ LTLやSTLは、そのインスタンス全員の投稿が見れるため、新
 
 <div class="warn">⚠️ 無効化を行うと、ユーザーが困惑し、短期的に見て利用者が減る可能性があります。そのため、無効化の際は影響を慎重に検討し、事前に説明してフォローを整える期間を一定程度設けることを推奨します。</div>
 
-なお、管理者/モデレーターは、これらのタイムラインの無効化状態は適用されず、引き続き利用可能です。
+なお、管理者/モデレーターは、これらのタイムラインの無効化状態は適用されず、引き続き利用することが可能です。
diff --git a/src/docs/ja-JP/advanced/aiscript.md b/src/docs/ja-JP/advanced/aiscript.md
index 6c28b446e3..604d17daa8 100644
--- a/src/docs/ja-JP/advanced/aiscript.md
+++ b/src/docs/ja-JP/advanced/aiscript.md
@@ -1,4 +1,7 @@
 # AiScript
+AiScriptは、Misskeyで使用できるスクリプト言語です。
 
-## 関数
-デフォルトで値渡しです。
+<div class="info">ℹ️ AiScript実装はMisskeyとは別リポジトリで、<a href="https://github.com/syuilo/aiscript" target="_blank">オープンソースで公開されています。</a></div>
+
+## 使い方
+AiScriptの構文や組み込み関数などのドキュメントは、[こちら](https://github.com/syuilo/aiscript/tree/master/docs)で公開されています。
-- 
GitLab


From aa28e8a7a6e5432da11d9b649c0bc8fd0400bdce Mon Sep 17 00:00:00 2001
From: syuilo <Syuilotan@yahoo.co.jp>
Date: Sat, 7 Aug 2021 14:42:51 +0900
Subject: [PATCH 46/70] Update stream.md

---
 src/docs/ja-JP/advanced/stream.md | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/src/docs/ja-JP/advanced/stream.md b/src/docs/ja-JP/advanced/stream.md
index 40fc49916e..9d5599a888 100644
--- a/src/docs/ja-JP/advanced/stream.md
+++ b/src/docs/ja-JP/advanced/stream.md
@@ -38,6 +38,8 @@ MisskeyのストリーミングAPIにはチャンネルという概念があり
 Misskeyのストリームに接続しただけでは、まだリアルタイムでタイムラインの投稿を受信したりはできません。
 ストリーム上でチャンネルに接続することで、様々な情報を受け取ったり情報を送信したりすることができるようになります。
 
+ひとつのストリーム上で、同時に複数のチャンネルに接続することができます。
+
 ### チャンネルに接続する
 チャンネルに接続するには、次のようなデータをJSONでストリームに送信します:
 
-- 
GitLab


From a41144a00f7e0e8ac2769e20c3caca11f8b84c3a Mon Sep 17 00:00:00 2001
From: syuilo <Syuilotan@yahoo.co.jp>
Date: Sat, 7 Aug 2021 15:13:38 +0900
Subject: [PATCH 47/70] Improve docs

---
 src/docs/ja-JP/advanced/stream.md  | 12 +++---------
 src/docs/ja-JP/features/drive.md   |  2 ++
 src/docs/ja-JP/features/widgets.md |  8 ++++++++
 3 files changed, 13 insertions(+), 9 deletions(-)
 create mode 100644 src/docs/ja-JP/features/widgets.md

diff --git a/src/docs/ja-JP/advanced/stream.md b/src/docs/ja-JP/advanced/stream.md
index 9d5599a888..da6cd216a5 100644
--- a/src/docs/ja-JP/advanced/stream.md
+++ b/src/docs/ja-JP/advanced/stream.md
@@ -13,9 +13,7 @@
 
 認証情報は、自分のAPIキーや、アプリケーションからストリームに接続する際はユーザーのアクセストークンのことを指します。
 
-<div class="ui info">
-	<p><i class="fas fa-info-circle"></i> 認証情報の取得については、<a href="./api">こちらのドキュメント</a>をご確認ください。</p>
-</div>
+<div class="info">ℹ️ 認証情報の取得については、<a href="./api">こちらのドキュメント</a>をご確認ください。</div>
 
 ---
 
@@ -61,9 +59,7 @@ Misskeyのストリームに接続しただけでは、まだリアルタイム
 * `id`にはそのチャンネルとやり取りするための任意のIDを設定します。ストリームでは様々なメッセージが流れるので、そのメッセージがどのチャンネルからのものなのか識別する必要があるからです。このIDは、UUIDや、乱数のようなもので構いません。
 * `params`はチャンネルに接続する際のパラメータです。チャンネルによって接続時に必要とされるパラメータは異なります。パラメータ不要のチャンネルに接続する際は、このプロパティは省略可能です。
 
-<div class="ui info">
-	<p><i class="fas fa-info-circle"></i> IDはチャンネルごとではなく「チャンネルの接続ごと」です。なぜなら、同じチャンネルに異なるパラメータで複数接続するケースもあるからです。</p>
-</div>
+<div class="info">ℹ️ IDはチャンネルごとではなく「チャンネルの接続ごと」です。なぜなら、同じチャンネルに異なるパラメータで複数接続するケースもあるからです。</div>
 
 ### チャンネルからのメッセージを受け取る
 例えばタイムラインのチャンネルなら、新しい投稿があった時にメッセージを発します。そのメッセージを受け取ることで、タイムラインに新しい投稿がされたことをリアルタイムで知ることができます。
@@ -147,9 +143,7 @@ Misskeyのストリームに接続しただけでは、まだリアルタイム
 * `endpoint`には、あなたがリクエストしたいAPIのエンドポイントを指定します。
 * `data`には、エンドポイントのパラメータを含めます。
 
-<div class="ui info">
-	<p><i class="fas fa-info-circle"></i> APIのエンドポイントやパラメータについてはAPIリファレンスをご確認ください。</p>
-</div>
+<div class="info">ℹ️ APIのエンドポイントやパラメータについてはAPIリファレンスをご確認ください。</div>
 
 ### レスポンスの受信
 
diff --git a/src/docs/ja-JP/features/drive.md b/src/docs/ja-JP/features/drive.md
index 784fb492e8..dce09a449a 100644
--- a/src/docs/ja-JP/features/drive.md
+++ b/src/docs/ja-JP/features/drive.md
@@ -3,6 +3,8 @@
 
 [ドライブのページ](/my/drive)から任意のファイルをアップロードできるほか、アバターに設定した画像や、ノートに添付したファイルなどもすべてドライブにアップロードされます。
 
+<div class="warn">⚠️ ドライブからファイルを削除すると、そのファイルが添付されたノートも消えます。</div>
+
 ドライブにアップロードされたファイルは、いつでもダウンロードすることができるほか、ノート作成時に「ドライブからファイルを添付」することでファイルを再利用することもできます。
 
 ドライブ内にフォルダを作り、複数のファイルをまとめて整理することもできます。
diff --git a/src/docs/ja-JP/features/widgets.md b/src/docs/ja-JP/features/widgets.md
new file mode 100644
index 0000000000..e9b938e8c4
--- /dev/null
+++ b/src/docs/ja-JP/features/widgets.md
@@ -0,0 +1,8 @@
+# ウィジェット
+ウィジェットは、MisskeyのUI上に設置できる小型の情報表示、操作が行えるパーツです。
+
+ウィジェットを編集するには、ウィジェット編集モードに切り替えます。切り替え方法はUIによって異なります。
+ウィジェット編集モードでは、ウィジェットの追加、削除、並び替え、およびそれぞれのウィジェットの設定を行えます。
+
+## 利用可能なウィジェット一覧
+todo
-- 
GitLab


From aec2762bf1130a238bec896e896c4ff4b6e41da0 Mon Sep 17 00:00:00 2001
From: syuilo <Syuilotan@yahoo.co.jp>
Date: Sat, 7 Aug 2021 16:12:42 +0900
Subject: [PATCH 48/70] :art:

---
 src/client/components/user-select-dialog.vue  | 10 +---------
 src/client/pages/docs.vue                     |  3 +--
 src/client/pages/emojis.vue                   |  4 +---
 src/client/pages/federation.vue               |  1 -
 src/client/pages/messaging/messaging-room.vue |  6 +++++-
 src/client/style.scss                         |  2 +-
 src/client/themes/_dark.json5                 |  2 +-
 src/client/themes/_light.json5                |  2 +-
 src/client/themes/d-astro.json5               |  2 +-
 src/client/themes/d-black.json5               |  1 -
 src/client/themes/l-light.json5               |  1 -
 src/client/themes/l-vivid.json5               |  2 +-
 12 files changed, 13 insertions(+), 23 deletions(-)

diff --git a/src/client/components/user-select-dialog.vue b/src/client/components/user-select-dialog.vue
index 8e7b0a190c..87c32dab25 100644
--- a/src/client/components/user-select-dialog.vue
+++ b/src/client/components/user-select-dialog.vue
@@ -10,7 +10,7 @@
 	<template #header>{{ $ts.selectUser }}</template>
 	<div class="tbhwbxda _monolithic_">
 		<div class="_section">
-			<div class="inputs">
+			<div class="_inputSplit _inputNoTopMargin _inputNoBottomMargin">
 				<MkInput v-model="username" class="input" @update:modelValue="search" ref="username">
 					<template #label>{{ $ts.username }}</template>
 					<template #prefix>@</template>
@@ -144,14 +144,6 @@ export default defineComponent({
 			padding: 0;
 		}
 
-		> .inputs {
-			> .input {
-				display: inline-block;
-				width: 50%;
-				margin: 0;
-			}
-		}
-
 		> .users {
 			flex: 1;
 			overflow: auto;
diff --git a/src/client/pages/docs.vue b/src/client/pages/docs.vue
index b1d3c2c7f9..48bae6c5c2 100644
--- a/src/client/pages/docs.vue
+++ b/src/client/pages/docs.vue
@@ -1,9 +1,8 @@
 <template>
 <div class="vtaihdtm">
 	<div class="search">
-		<MkInput v-model="query" :debounce="true" type="search" class="_inputNoTopMargin _inputNoBottomMargin">
+		<MkInput v-model="query" :debounce="true" type="search" class="_inputNoTopMargin _inputNoBottomMargin" :placeholder="$ts.search">
 			<template #prefix><i class="fas fa-search"></i></template>
-			<template #label>{{ $ts.search }}</template>
 		</MkInput>
 	</div>
 	<MkFolder>
diff --git a/src/client/pages/emojis.vue b/src/client/pages/emojis.vue
index c766b5f7b8..435727e196 100644
--- a/src/client/pages/emojis.vue
+++ b/src/client/pages/emojis.vue
@@ -1,9 +1,8 @@
 <template>
 <div class="driuhtrh">
 	<div class="query">
-		<MkInput v-model="q" class="_inputNoTopMargin _inputNoBottomMargin">
+		<MkInput v-model="q" class="_inputNoTopMargin _inputNoBottomMargin" :placeholder="$ts.search">
 			<template #prefix><i class="fas fa-search"></i></template>
-			<template #label>{{ $ts.search }}</template>
 		</MkInput>
 	</div>
 
@@ -102,7 +101,6 @@ export default defineComponent({
 	> .query {
 		background: var(--bg);
 		padding: 16px;
-		border-bottom: solid 0.5px var(--divider);
 	}
 
 	> .emojis {
diff --git a/src/client/pages/federation.vue b/src/client/pages/federation.vue
index 59867b8e54..4a861ac911 100644
--- a/src/client/pages/federation.vue
+++ b/src/client/pages/federation.vue
@@ -169,7 +169,6 @@ export default defineComponent({
 	> .query {
 		background: var(--bg);
 		padding: 16px;
-		border-bottom: solid 0.5px var(--divider);
 	}
 }
 
diff --git a/src/client/pages/messaging/messaging-room.vue b/src/client/pages/messaging/messaging-room.vue
index 396f5f56fd..24ed105913 100644
--- a/src/client/pages/messaging/messaging-room.vue
+++ b/src/client/pages/messaging/messaging-room.vue
@@ -29,7 +29,7 @@
 					<button class="_buttonPrimary" @click="onIndicatorClick"><i class="fas fa-arrow-circle-down"></i>{{ $ts.newMessageExists }}</button>
 				</div>
 			</transition>
-			<XForm v-if="!fetching" :user="user" :group="group" ref="form"/>
+			<XForm v-if="!fetching" :user="user" :group="group" ref="form" class="form"/>
 		</footer>
 	</div>
 </div>
@@ -452,6 +452,10 @@ export default Component;
 				}
 			}
 		}
+
+		> .form {
+			border-top: solid 0.5px var(--divider);
+		}
 	}
 }
 
diff --git a/src/client/style.scss b/src/client/style.scss
index d2a54e34b0..99c1ced049 100644
--- a/src/client/style.scss
+++ b/src/client/style.scss
@@ -403,7 +403,7 @@ hr {
 
 ._inputSplit {
 	display: grid;
-	grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
+	grid-template-columns: repeat(auto-fill, minmax(170px, 1fr));
 	grid-gap: 8px;
 	margin: 1em 0;
 
diff --git a/src/client/themes/_dark.json5 b/src/client/themes/_dark.json5
index a8ec67e8c7..fef8df4c7c 100644
--- a/src/client/themes/_dark.json5
+++ b/src/client/themes/_dark.json5
@@ -59,7 +59,7 @@
 		driveFolderBg: ':alpha<0.3<@accent',
 		wallpaperOverlay: 'rgba(0, 0, 0, 0.5)',
 		badge: '#31b1ce',
-		messageBg: ':lighten<5<@bg',
+		messageBg: '@bg',
 		success: '#86b300',
 		error: '#ec4137',
 		warn: '#ecb637',
diff --git a/src/client/themes/_light.json5 b/src/client/themes/_light.json5
index 0c54c704a6..b31e369a37 100644
--- a/src/client/themes/_light.json5
+++ b/src/client/themes/_light.json5
@@ -59,7 +59,7 @@
 		driveFolderBg: ':alpha<0.3<@accent',
 		wallpaperOverlay: 'rgba(255, 255, 255, 0.5)',
 		badge: '#31b1ce',
-		messageBg: '@panel',
+		messageBg: '@bg',
 		success: '#86b300',
 		error: '#ec4137',
 		warn: '#ecb637',
diff --git a/src/client/themes/d-astro.json5 b/src/client/themes/d-astro.json5
index 74b90addd5..08846dec20 100644
--- a/src/client/themes/d-astro.json5
+++ b/src/client/themes/d-astro.json5
@@ -32,7 +32,7 @@
 		cwHoverBg: '#707b97',
 		indicator: '@accent',
 		mentionMe: '#fb5d38',
-		messageBg: ':lighten<5<@bg',
+		messageBg: '@bg',
 		navActive: '@accent',
 		infoWarnBg: '#42321c',
 		infoWarnFg: '#ffbd3e',
diff --git a/src/client/themes/d-black.json5 b/src/client/themes/d-black.json5
index f4b93cdcbc..3c18ebdaf1 100644
--- a/src/client/themes/d-black.json5
+++ b/src/client/themes/d-black.json5
@@ -13,6 +13,5 @@
 		panelHeaderDivider: '@divider',
 		shadow: 'rgba(255, 255, 255, 0.05)',
 		modalBg: 'rgba(255, 255, 255, 0.1)',
-		messageBg: '#1d1d1d',
 	},
 }
diff --git a/src/client/themes/l-light.json5 b/src/client/themes/l-light.json5
index f85bee3b06..79176cdd62 100644
--- a/src/client/themes/l-light.json5
+++ b/src/client/themes/l-light.json5
@@ -15,6 +15,5 @@
 		navBg: '#fff',
 		panel: '#fff',
 		panelHeaderDivider: '@divider',
-		messageBg: '#dedede',
 	},
 }
diff --git a/src/client/themes/l-vivid.json5 b/src/client/themes/l-vivid.json5
index 9fc04cd0d3..32bb9dc26b 100644
--- a/src/client/themes/l-vivid.json5
+++ b/src/client/themes/l-vivid.json5
@@ -35,7 +35,7 @@
 		cwHoverBg: '#bbc4ce',
 		indicator: '@accent',
 		mentionMe: '@mention',
-		messageBg: '@panel',
+		messageBg: '@bg',
 		navActive: '@accent',
 		infoWarnBg: '#fff0db',
 		infoWarnFg: '#573c08',
-- 
GitLab


From 65f1afc4e0c4b8d04d1c39b3a0d11e46ce6cc59e Mon Sep 17 00:00:00 2001
From: syuilo <Syuilotan@yahoo.co.jp>
Date: Sat, 7 Aug 2021 16:54:51 +0900
Subject: [PATCH 49/70] Improve docs

---
 src/docs/ja-JP/features/note.md | 2 ++
 src/docs/ja-JP/general/faq.md   | 4 ++++
 2 files changed, 6 insertions(+)

diff --git a/src/docs/ja-JP/features/note.md b/src/docs/ja-JP/features/note.md
index b32df7b727..c5de5c89a5 100644
--- a/src/docs/ja-JP/features/note.md
+++ b/src/docs/ja-JP/features/note.md
@@ -20,6 +20,8 @@
 同じノートに対して無制限にRenoteを行うことができますが、あまり連続して使用すると迷惑になる場合もあるので、注意しましょう。
 <div class="warn">⚠️ 公開範囲がフォロワーやダイレクトのノートはRenoteできません</div>
 
+Renoteを削除するには、Renoteの時刻表示の隣にある「...」を押し、「Renote解除」を選択します。
+
 ## CW
 Contents Warningの略で、ノートの内容を、閲覧者の操作なしには表示しないようにできる機能です。主に長大な内容を隠すためや、ネタバレ防止などに使うことができます。
 設定するには、フォームの「内容を隠す」ボタン(目のアイコン)を押します。すると新しい入力エリアが表れるので、そこに内容の要約を記入します。
diff --git a/src/docs/ja-JP/general/faq.md b/src/docs/ja-JP/general/faq.md
index 86180e04bc..9187fa3773 100644
--- a/src/docs/ja-JP/general/faq.md
+++ b/src/docs/ja-JP/general/faq.md
@@ -13,6 +13,10 @@ Misskeyのプロジェクト自体についてのよくある質問は[こちら
 ## 他のサーバーのユーザーをフォローするときは?
 メニューから検索を選び、ユーザー名をホスト込みで入力します。例: `@syuilo@misskey.io`
 
+## Renoteを削除するには?
+Renoteの時刻表示の隣にある「...」を押し、「Renote解除」を選択します。
+Renoteについては[こちら](../features/note)をご確認ください。
+
 ## URLのプレビューを表示させたくない
 MFMには、そのURLのプレビューを無効にする構文があります。詳細は[MFMチートシート](/mfm-cheat-sheet)をご確認ください。
 
-- 
GitLab


From 5f869e5d8735f3c058554b59e2c33f40ae7ef959 Mon Sep 17 00:00:00 2001
From: syuilo <Syuilotan@yahoo.co.jp>
Date: Sat, 7 Aug 2021 17:55:16 +0900
Subject: [PATCH 50/70] Improve client

---
 locales/ja-JP.yml                             |  1 +
 src/client/components/ui/button.vue           |  4 +-
 src/client/pages/_error_.vue                  | 26 +++++---
 src/client/pages/my-antennas/create.vue       | 51 ++++++++++++++++
 src/client/pages/my-antennas/edit.vue         | 56 ++++++++++++++++++
 .../{index.antenna.vue => editor.vue}         | 28 +++++----
 src/client/pages/my-antennas/index.vue        | 59 ++++++++-----------
 src/client/style.scss                         |  1 +
 src/client/themes/_light.json5                |  2 +-
 src/client/themes/l-vivid.json5               |  2 +-
 10 files changed, 171 insertions(+), 59 deletions(-)
 create mode 100644 src/client/pages/my-antennas/create.vue
 create mode 100644 src/client/pages/my-antennas/edit.vue
 rename src/client/pages/my-antennas/{index.antenna.vue => editor.vue} (92%)

diff --git a/locales/ja-JP.yml b/locales/ja-JP.yml
index ef6a094fd7..3a00c28ddb 100644
--- a/locales/ja-JP.yml
+++ b/locales/ja-JP.yml
@@ -769,6 +769,7 @@ sent: "送信"
 received: "受信"
 searchResult: "検索結果"
 hashtags: "ハッシュタグ"
+troubleshooting: "トラブルシューティング"
 
 _docs: 
   continueReading: "続きを読む"
diff --git a/src/client/components/ui/button.vue b/src/client/components/ui/button.vue
index c92f30db97..8a83943825 100644
--- a/src/client/components/ui/button.vue
+++ b/src/client/components/ui/button.vue
@@ -1,6 +1,6 @@
 <template>
 <component class="bghgjjyj _button"
-	:is="link ? 'a' : 'button'"
+	:is="link ? 'MkA' : 'button'"
 	:class="{ inline, primary, danger, full }"
 	:type="type"
 	@click="$emit('click', $event)"
@@ -115,6 +115,7 @@ export default defineComponent({
 	z-index: 1; // 他コンポーネントのbox-shadowに隠されないようにするため
 	display: block;
 	min-width: 100px;
+	width: min-content;
 	padding: 8px 14px;
 	text-align: center;
 	font-weight: normal;
@@ -125,6 +126,7 @@ export default defineComponent({
 	background: var(--buttonBg);
 	border-radius: 999px;
 	overflow: hidden;
+	box-sizing: border-box;
 
 	&:not(:disabled):hover {
 		background: var(--buttonHoverBg);
diff --git a/src/client/pages/_error_.vue b/src/client/pages/_error_.vue
index 6caecd6eaf..1d67d9b14d 100644
--- a/src/client/pages/_error_.vue
+++ b/src/client/pages/_error_.vue
@@ -1,11 +1,11 @@
 <template>
 <transition :name="$store.state.animation ? 'zoom' : ''" appear>
-	<div class="_section">
-		<div class="mjndxjch _content">
-			<img src="https://xn--931a.moe/assets/error.jpg" class="_ghost"/>
-			<p><i class="fas fa-exclamation-triangle"></i> {{ $ts.pageLoadError }}</p>
-			<p>{{ $ts.pageLoadErrorDescription }}</p>
-		</div>
+	<div class="mjndxjch">
+		<img src="https://xn--931a.moe/assets/error.jpg" class="_ghost"/>
+		<p><b><i class="fas fa-exclamation-triangle"></i> {{ $ts.pageLoadError }}</b></p>
+		<p>{{ $ts.pageLoadErrorDescription }}</p>
+		<p><MkA to="/docs/general/troubleshooting" class="_link">{{ $ts.troubleshooting }}</MkA></p>
+		<p v-if="error" class="error">ERROR: {{ error }}</p>
 	</div>
 </transition>
 </template>
@@ -19,6 +19,11 @@ export default defineComponent({
 	components: {
 		MkButton,
 	},
+	props: {
+		error: {
+			required: false,
+		}
+	},
 	data() {
 		return {
 			[symbols.PAGE_INFO]: {
@@ -32,10 +37,11 @@ export default defineComponent({
 
 <style lang="scss" scoped>
 .mjndxjch {
+	padding: 32px;
 	text-align: center;
 
 	> p {
-		margin: 0 0 8px 0;
+		margin: 0 0 12px 0;
 	}
 
 	> .button {
@@ -45,8 +51,12 @@ export default defineComponent({
 	> img {
 		vertical-align: bottom;
 		height: 128px;
-		margin-bottom: 16px;
+		margin-bottom: 24px;
 		border-radius: 16px;
 	}
+
+	> .error {
+		opacity: 0.7;
+	}
 }
 </style>
diff --git a/src/client/pages/my-antennas/create.vue b/src/client/pages/my-antennas/create.vue
new file mode 100644
index 0000000000..d4762411e7
--- /dev/null
+++ b/src/client/pages/my-antennas/create.vue
@@ -0,0 +1,51 @@
+<template>
+<div class="geegznzt">
+	<XAntenna :antenna="draft" @created="onAntennaCreated"/>
+</div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+import MkButton from '@client/components/ui/button.vue';
+import XAntenna from './editor.vue';
+import * as symbols from '@client/symbols';
+
+export default defineComponent({
+	components: {
+		MkButton,
+		XAntenna,
+	},
+
+	data() {
+		return {
+			[symbols.PAGE_INFO]: {
+				title: this.$ts.manageAntennas,
+				icon: 'fas fa-satellite',
+			},
+			draft: {
+				name: '',
+				src: 'all',
+				userListId: null,
+				userGroupId: null,
+				users: [],
+				keywords: [],
+				excludeKeywords: [],
+				withReplies: false,
+				caseSensitive: false,
+				withFile: false,
+				notify: false
+			},
+		};
+	},
+
+	methods: {
+		onAntennaCreated() {
+			this.$router.push('/my/antennas');
+		},
+	}
+});
+</script>
+
+<style lang="scss" scoped>
+
+</style>
diff --git a/src/client/pages/my-antennas/edit.vue b/src/client/pages/my-antennas/edit.vue
new file mode 100644
index 0000000000..9deafb4235
--- /dev/null
+++ b/src/client/pages/my-antennas/edit.vue
@@ -0,0 +1,56 @@
+<template>
+<div class="">
+	<XAntenna v-if="antenna" :antenna="antenna" @updated="onAntennaUpdated"/>
+</div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+import MkButton from '@client/components/ui/button.vue';
+import XAntenna from './editor.vue';
+import * as symbols from '@client/symbols';
+import * as os from '@client/os';
+
+export default defineComponent({
+	components: {
+		MkButton,
+		XAntenna,
+	},
+
+	props: {
+		antennaId: {
+			type: String,
+			required: true,
+		}
+	},
+
+	data() {
+		return {
+			[symbols.PAGE_INFO]: {
+				title: this.$ts.manageAntennas,
+				icon: 'fas fa-satellite',
+			},
+			antenna: null,
+		};
+	},
+
+	watch: {
+		antennaId: {
+			async handler() {
+				this.antenna = await os.api('antennas/show', { antennaId: this.antennaId });
+			},
+			immediate: true,
+		}
+	},
+
+	methods: {
+		onAntennaUpdated() {
+			this.$router.push('/my/antennas');
+		},
+	}
+});
+</script>
+
+<style lang="scss" scoped>
+
+</style>
diff --git a/src/client/pages/my-antennas/index.antenna.vue b/src/client/pages/my-antennas/editor.vue
similarity index 92%
rename from src/client/pages/my-antennas/index.antenna.vue
rename to src/client/pages/my-antennas/editor.vue
index 3a74a9d7f1..882d48e643 100644
--- a/src/client/pages/my-antennas/index.antenna.vue
+++ b/src/client/pages/my-antennas/editor.vue
@@ -1,8 +1,7 @@
 <template>
-<div class="shaynizk _card">
-	<div class="_title" v-if="antenna.name">{{ antenna.name }}</div>
-	<div class="_content body">
-		<MkInput v-model="name">
+<div class="shaynizk">
+	<div class="form">
+		<MkInput v-model="name" class="_inputNoTopMargin">
 			<template #label>{{ $ts.name }}</template>
 		</MkInput>
 		<MkSelect v-model="src">
@@ -38,9 +37,9 @@
 		<MkSwitch v-model="withFile">{{ $ts.withFileAntenna }}</MkSwitch>
 		<MkSwitch v-model="notify">{{ $ts.notifyAntenna }}</MkSwitch>
 	</div>
-	<div class="_footer">
+	<div class="actions">
 		<MkButton inline @click="saveAntenna()" primary><i class="fas fa-save"></i> {{ $ts.save }}</MkButton>
-		<MkButton inline @click="deleteAntenna()" v-if="antenna.id != null"><i class="fas fa-trash"></i> {{ $ts.delete }}</MkButton>
+		<MkButton inline @click="deleteAntenna()" v-if="antenna.id != null" danger><i class="fas fa-trash"></i> {{ $ts.delete }}</MkButton>
 	</div>
 </div>
 </template>
@@ -117,7 +116,7 @@ export default defineComponent({
 	methods: {
 		async saveAntenna() {
 			if (this.antenna.id == null) {
-				await os.api('antennas/create', {
+				await os.apiWithDialog('antennas/create', {
 					name: this.name,
 					src: this.src,
 					userListId: this.userListId,
@@ -132,7 +131,7 @@ export default defineComponent({
 				});
 				this.$emit('created');
 			} else {
-				await os.api('antennas/update', {
+				await os.apiWithDialog('antennas/update', {
 					antennaId: this.antenna.id,
 					name: this.name,
 					src: this.src,
@@ -146,9 +145,8 @@ export default defineComponent({
 					keywords: this.keywords.trim().split('\n').map(x => x.trim().split(' ')),
 					excludeKeywords: this.excludeKeywords.trim().split('\n').map(x => x.trim().split(' ')),
 				});
+				this.$emit('updated');
 			}
-
-			os.success();
 		},
 
 		async deleteAntenna() {
@@ -180,9 +178,13 @@ export default defineComponent({
 
 <style lang="scss" scoped>
 .shaynizk {
-	> .body {
-		max-height: 250px;
-		overflow: auto;
+	> .form {
+		padding: 32px;
+	}
+
+	> .actions {
+		padding: 24px 32px;
+		border-top: solid 0.5px var(--divider);
 	}
 }
 </style>
diff --git a/src/client/pages/my-antennas/index.vue b/src/client/pages/my-antennas/index.vue
index 57c55cefdd..c27bb2c15e 100644
--- a/src/client/pages/my-antennas/index.vue
+++ b/src/client/pages/my-antennas/index.vue
@@ -1,12 +1,12 @@
 <template>
 <div class="ieepwinx _section">
-	<MkButton @click="create" primary class="add"><i class="fas fa-plus"></i> {{ $ts.add }}</MkButton>
+	<MkButton :link="true" to="/my/antennas/create" primary class="add"><i class="fas fa-plus"></i> {{ $ts.add }}</MkButton>
 
 	<div class="_content">
-		<XAntenna v-if="draft" :antenna="draft" @created="onAntennaCreated" style="margin-bottom: var(--margin);"/>
-
-		<MkPagination :pagination="pagination" #default="{items}" class="antennas" ref="list">
-			<XAntenna v-for="(antenna, i) in items" :key="antenna.id" :antenna="antenna" @deleted="onAntennaDeleted"/>
+		<MkPagination :pagination="pagination" #default="{items}" ref="list">
+			<MkA class="ljoevbzj" v-for="antenna in items" :key="antenna.id" :to="`/my/antennas/${antenna.id}`">
+				<div class="name">{{ antenna.name }}</div>
+			</MkA>
 		</MkPagination>
 	</div>
 </div>
@@ -16,14 +16,12 @@
 import { defineComponent } from 'vue';
 import MkPagination from '@client/components/ui/pagination.vue';
 import MkButton from '@client/components/ui/button.vue';
-import XAntenna from './index.antenna.vue';
 import * as symbols from '@client/symbols';
 
 export default defineComponent({
 	components: {
 		MkPagination,
 		MkButton,
-		XAntenna,
 	},
 
 	data() {
@@ -40,43 +38,34 @@ export default defineComponent({
 				endpoint: 'antennas/list',
 				limit: 10,
 			},
-			draft: null,
 		};
 	},
-
-	methods: {
-		create() {
-			this.draft = {
-				name: '',
-				src: 'all',
-				userListId: null,
-				userGroupId: null,
-				users: [],
-				keywords: [],
-				excludeKeywords: [],
-				withReplies: false,
-				caseSensitive: false,
-				withFile: false,
-				notify: false
-			};
-		},
-
-		onAntennaCreated() {
-			this.$refs.list.reload();
-			this.draft = null;
-		},
-
-		onAntennaDeleted() {
-			this.$refs.list.reload();
-		},
-	}
 });
 </script>
 
 <style lang="scss" scoped>
 .ieepwinx {
+	padding: 16px;
+
 	> .add {
 		margin: 0 auto 16px auto;
 	}
+
+	.ljoevbzj {
+		display: block;
+		padding: 16px;
+		margin-bottom: 8px;
+		border: solid 1px var(--divider);
+		border-radius: 6px;
+
+		&:hover {
+			border: solid 1px var(--accent);
+			text-decoration: none;
+		}
+
+		> .name {
+			font-weight: bold;
+		}
+	}
 }
 </style>
diff --git a/src/client/style.scss b/src/client/style.scss
index 99c1ced049..9127b6f238 100644
--- a/src/client/style.scss
+++ b/src/client/style.scss
@@ -255,6 +255,7 @@ hr {
 	margin: var(--margin) 0;
 }
 
+// TODO: 廃止
 ._card {
 	@extend ._panel;
 
diff --git a/src/client/themes/_light.json5 b/src/client/themes/_light.json5
index b31e369a37..97f56c75f5 100644
--- a/src/client/themes/_light.json5
+++ b/src/client/themes/_light.json5
@@ -47,7 +47,7 @@
 		infoBg: '#e5f5ff',
 		infoFg: '#72818a',
 		infoWarnBg: '#fff0db',
-		infoWarnFg: '#573c08',
+		infoWarnFg: '#8f6e31',
 		cwBg: '#b1b9c1',
 		cwFg: '#fff',
 		cwHoverBg: '#bbc4ce',
diff --git a/src/client/themes/l-vivid.json5 b/src/client/themes/l-vivid.json5
index 32bb9dc26b..0f4abe0a45 100644
--- a/src/client/themes/l-vivid.json5
+++ b/src/client/themes/l-vivid.json5
@@ -38,7 +38,7 @@
 		messageBg: '@bg',
 		navActive: '@accent',
 		infoWarnBg: '#fff0db',
-		infoWarnFg: '#573c08',
+		infoWarnFg: '#8f6e31',
 		navHoverFg: ':darken<17<@fg',
 		dateLabelFg: '@fg',
 		inputBorder: 'rgba(0, 0, 0, 0.1)',
-- 
GitLab


From c2f4fb7ba7f778bf79fd78d0300149518cae7de7 Mon Sep 17 00:00:00 2001
From: syuilo <Syuilotan@yahoo.co.jp>
Date: Sat, 7 Aug 2021 18:10:33 +0900
Subject: [PATCH 51/70] Update troubleshooting.md

---
 src/docs/ja-JP/general/troubleshooting.md | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/src/docs/ja-JP/general/troubleshooting.md b/src/docs/ja-JP/general/troubleshooting.md
index 6e3db8e469..508e9dd70c 100644
--- a/src/docs/ja-JP/general/troubleshooting.md
+++ b/src/docs/ja-JP/general/troubleshooting.md
@@ -10,6 +10,13 @@
 
 これは稀ですが、それでも起動しない場合は、キャッシュが原因の場合があります。ブラウザのキャッシュをクリアして、再度試してみてください。
 
+## ページが読み込めない
+クライアントが起動するもののページが読み込めないというエラーが出る場合は、ネットワークに問題がないか確認してください。また、サーバーがダウンしていないか確認してください。
+
+これは稀ですが、キャッシュが原因の場合があります。ブラウザのキャッシュをクリアして、再度試してみてください。
+
+まだ問題がある場合は、サーバーの問題と思われるのでサーバーの管理者に連絡してください。
+
 ## クライアントの動作が遅い
 以下を試してみてください:
 
-- 
GitLab


From c03e2febb04c965c40edb463a17b04a2ce47f87d Mon Sep 17 00:00:00 2001
From: syuilo <Syuilotan@yahoo.co.jp>
Date: Sat, 7 Aug 2021 19:09:06 +0900
Subject: [PATCH 52/70] :art:

---
 src/client/components/ui/input.vue    | 10 +++++++++-
 src/client/components/ui/select.vue   | 12 ++++++++++--
 src/client/components/ui/textarea.vue | 10 +++++++++-
 src/client/pages/docs.vue             |  4 ++--
 4 files changed, 30 insertions(+), 6 deletions(-)

diff --git a/src/client/components/ui/input.vue b/src/client/components/ui/input.vue
index 22dd0fe9a5..3e2a5fb0dd 100644
--- a/src/client/components/ui/input.vue
+++ b/src/client/components/ui/input.vue
@@ -206,19 +206,27 @@ export default defineComponent({
 
 <style lang="scss" scoped>
 .matxzzsk {
-	margin: 1em 0;
+	margin: 1.5em 0;
 
 	> .label {
 		font-size: 0.85em;
 		padding: 0 0 6px 6px;
 		font-weight: bold;
 		user-select: none;
+
+		&:empty {
+			display: none;
+		}
 	}
 
 	> .caption {
 		font-size: 0.8em;
 		padding: 6px 0 0 6px;
 		color: var(--fgTransparentWeak);
+
+		&:empty {
+			display: none;
+		}
 	}
 
 	> .input {
diff --git a/src/client/components/ui/select.vue b/src/client/components/ui/select.vue
index c38bd7230f..987d4f194c 100644
--- a/src/client/components/ui/select.vue
+++ b/src/client/components/ui/select.vue
@@ -151,19 +151,27 @@ export default defineComponent({
 
 <style lang="scss" scoped>
 .vblkjoeq {
-	margin: 1em 0;
+	margin: 1.5em 0;
 
 	> .label {
 		font-size: 0.85em;
 		padding: 0 0 6px 6px;
 		font-weight: bold;
 		user-select: none;
+
+		&:empty {
+			display: none;
+		}
 	}
 
 	> .caption {
 		font-size: 0.8em;
 		padding: 6px 0 0 6px;
 		color: var(--fgTransparentWeak);
+
+		&:empty {
+			display: none;
+		}
 	}
 
 	> .input {
@@ -177,7 +185,7 @@ export default defineComponent({
 			height: $height;
 			width: 100%;
 			margin: 0;
-			padding: 0 8px;
+			padding: 0 12px;
 			font: inherit;
 			font-weight: normal;
 			font-size: 1em;
diff --git a/src/client/components/ui/textarea.vue b/src/client/components/ui/textarea.vue
index 592b8b9ca0..a61324f25f 100644
--- a/src/client/components/ui/textarea.vue
+++ b/src/client/components/ui/textarea.vue
@@ -172,19 +172,27 @@ export default defineComponent({
 
 <style lang="scss" scoped>
 .adhpbeos {
-	margin: 1em 0;
+	margin: 1.5em 0;
 
 	> .label {
 		font-size: 0.85em;
 		padding: 0 0 6px 6px;
 		font-weight: bold;
 		user-select: none;
+
+		&:empty {
+			display: none;
+		}
 	}
 
 	> .caption {
 		font-size: 0.8em;
 		padding: 6px 0 0 6px;
 		color: var(--fgTransparentWeak);
+
+		&:empty {
+			display: none;
+		}
 	}
 
 	> .input {
diff --git a/src/client/pages/docs.vue b/src/client/pages/docs.vue
index 48bae6c5c2..6dc5eb1ae8 100644
--- a/src/client/pages/docs.vue
+++ b/src/client/pages/docs.vue
@@ -98,14 +98,14 @@ export default defineComponent({
 	background: var(--panel);
 
 	> .search {
-		padding: 12px;
+		padding: 16px;
 	}
 
 	.docs {
 		display: grid;
 		grid-template-columns: repeat(auto-fill, minmax(270px, 1fr));
 		grid-gap: 12px;
-		margin: var(--margin);
+		margin: 0 16px 16px 16px;
 
 		> .doc {
 			display: inline-block;
-- 
GitLab


From f565c5f730b8d90233e050ff2abf803870e5c4c8 Mon Sep 17 00:00:00 2001
From: syuilo <Syuilotan@yahoo.co.jp>
Date: Sat, 7 Aug 2021 19:19:31 +0900
Subject: [PATCH 53/70] Improve chat UI (wip)

---
 src/client/router.ts                  | 169 +++++++++------
 src/client/ui/chat/index.vue          | 246 +++++-----------------
 src/client/ui/chat/pages/channel.vue  | 259 +++++++++++++++++++++++
 src/client/ui/chat/pages/timeline.vue | 221 +++++++++++++++++++
 src/client/ui/chat/side.vue           |  11 +-
 src/client/ui/chat/timeline.vue       | 292 --------------------------
 6 files changed, 637 insertions(+), 561 deletions(-)
 create mode 100644 src/client/ui/chat/pages/channel.vue
 create mode 100644 src/client/ui/chat/pages/timeline.vue
 delete mode 100644 src/client/ui/chat/timeline.vue

diff --git a/src/client/router.ts b/src/client/router.ts
index 2081c1020c..225ee44e32 100644
--- a/src/client/router.ts
+++ b/src/client/router.ts
@@ -4,85 +4,114 @@ import MkLoading from '@client/pages/_loading_.vue';
 import MkError from '@client/pages/_error_.vue';
 import MkTimeline from '@client/pages/timeline.vue';
 import { $i } from './account';
+import { ui } from '@client/config';
 
-const page = (path: string) => defineAsyncComponent({
-	loader: () => import(`./pages/${path}.vue`),
+const page = (path: string, ui?: string) => defineAsyncComponent({
+	loader: ui ? () => import(`./ui/${ui}/pages/${path}.vue`) : () => import(`./pages/${path}.vue`),
 	loadingComponent: MkLoading,
 	errorComponent: MkError,
 });
 
 let indexScrollPos = 0;
 
+const defaultRoutes = [
+	// NOTE: MkTimelineをdynamic importするとAsyncComponentWrapperが間に入るせいでkeep-aliveのコンポーネント指定が効かなくなる
+	{ path: '/', name: 'index', component: $i ? MkTimeline : page('welcome') },
+	{ path: '/@:acct/:page?', name: 'user', component: page('user/index'), props: route => ({ acct: route.params.acct, page: route.params.page || 'index' }) },
+	{ path: '/@:user/pages/:page', component: page('page'), props: route => ({ pageName: route.params.page, username: route.params.user }) },
+	{ path: '/@:user/pages/:pageName/view-source', component: page('page-editor/page-editor'), props: route => ({ initUser: route.params.user, initPageName: route.params.pageName }) },
+	{ path: '/@:acct/room', props: true, component: page('room/room') },
+	{ path: '/settings/:page(.*)?', name: 'settings', component: page('settings/index'), props: route => ({ initialPage: route.params.page || null }) },
+	{ path: '/reset-password/:token?', component: page('reset-password'), props: route => ({ token: route.params.token }) },
+	{ path: '/announcements', component: page('announcements') },
+	{ path: '/about', component: page('about') },
+	{ path: '/about-misskey', component: page('about-misskey') },
+	{ path: '/featured', component: page('featured') },
+	{ path: '/docs', component: page('docs') },
+	{ path: '/theme-editor', component: page('theme-editor') },
+	{ path: '/advanced-theme-editor', component: page('advanced-theme-editor') },
+	{ path: '/docs/:doc(.*)', component: page('doc'), props: route => ({ doc: route.params.doc }) },
+	{ path: '/explore', component: page('explore') },
+	{ path: '/explore/tags/:tag', props: true, component: page('explore') },
+	{ path: '/federation', component: page('federation') },
+	{ path: '/emojis', component: page('emojis') },
+	{ path: '/search', component: page('search') },
+	{ path: '/pages', name: 'pages', component: page('pages') },
+	{ path: '/pages/new', component: page('page-editor/page-editor') },
+	{ path: '/pages/edit/:pageId', component: page('page-editor/page-editor'), props: route => ({ initPageId: route.params.pageId }) },
+	{ path: '/gallery', component: page('gallery/index') },
+	{ path: '/gallery/new', component: page('gallery/edit') },
+	{ path: '/gallery/:postId/edit', component: page('gallery/edit'), props: route => ({ postId: route.params.postId }) },
+	{ path: '/gallery/:postId', component: page('gallery/post'), props: route => ({ postId: route.params.postId }) },
+	{ path: '/channels', component: page('channels') },
+	{ path: '/channels/new', component: page('channel-editor') },
+	{ path: '/channels/:channelId/edit', component: page('channel-editor'), props: true },
+	{ path: '/channels/:channelId', component: page('channel'), props: route => ({ channelId: route.params.channelId }) },
+	{ path: '/clips/:clipId', component: page('clip'), props: route => ({ clipId: route.params.clipId }) },
+	{ path: '/my/notifications', component: page('notifications') },
+	{ path: '/my/favorites', component: page('favorites') },
+	{ path: '/my/messages', component: page('messages') },
+	{ path: '/my/mentions', component: page('mentions') },
+	{ path: '/my/messaging', name: 'messaging', component: page('messaging/index') },
+	{ path: '/my/messaging/:user', component: page('messaging/messaging-room'), props: route => ({ userAcct: route.params.user }) },
+	{ path: '/my/messaging/group/:group', component: page('messaging/messaging-room'), props: route => ({ groupId: route.params.group }) },
+	{ path: '/my/drive', name: 'drive', component: page('drive') },
+	{ path: '/my/drive/folder/:folder', component: page('drive') },
+	{ path: '/my/follow-requests', component: page('follow-requests') },
+	{ path: '/my/lists', component: page('my-lists/index') },
+	{ path: '/my/lists/:list', component: page('my-lists/list') },
+	{ path: '/my/groups', component: page('my-groups/index') },
+	{ path: '/my/groups/:group', component: page('my-groups/group'), props: route => ({ groupId: route.params.group }) },
+	{ path: '/my/antennas', component: page('my-antennas/index') },
+	{ path: '/my/antennas/create', component: page('my-antennas/create') },
+	{ path: '/my/antennas/:antennaId', component: page('my-antennas/edit'), props: true },
+	{ path: '/my/clips', component: page('my-clips/index') },
+	{ path: '/scratchpad', component: page('scratchpad') },
+	{ path: '/instance/:page(.*)?', component: page('instance/index'), props: route => ({ initialPage: route.params.page || null }) },
+	{ path: '/instance', component: page('instance/index') },
+	{ path: '/notes/:note', name: 'note', component: page('note'), props: route => ({ noteId: route.params.note }) },
+	{ path: '/tags/:tag', component: page('tag'), props: route => ({ tag: route.params.tag }) },
+	{ path: '/user-info/:user', component: page('user-info'), props: route => ({ userId: route.params.user }) },
+	{ path: '/user-ap-info/:user', component: page('user-ap-info'), props: route => ({ userId: route.params.user }) },
+	{ path: '/instance-info/:host', component: page('instance-info'), props: route => ({ host: route.params.host }) },
+	{ path: '/games/reversi', component: page('reversi/index') },
+	{ path: '/games/reversi/:gameId', component: page('reversi/game'), props: route => ({ gameId: route.params.gameId }) },
+	{ path: '/mfm-cheat-sheet', component: page('mfm-cheat-sheet') },
+	{ path: '/api-console', component: page('api-console') },
+	{ path: '/preview', component: page('preview') },
+	{ path: '/test', component: page('test') },
+	{ path: '/auth/:token', component: page('auth') },
+	{ path: '/miauth/:session', component: page('miauth') },
+	{ path: '/authorize-follow', component: page('follow') },
+	{ path: '/share', component: page('share') },
+	{ path: '/:catchAll(.*)', component: page('not-found') }
+];
+
+const chatRoutes = [
+	{ path: '/timeline', component: page('timeline', 'chat'), props: route => ({ src: 'home' }) },
+	{ path: '/timeline/home', component: page('timeline', 'chat'), props: route => ({ src: 'home' }) },
+	{ path: '/timeline/local', component: page('timeline', 'chat'), props: route => ({ src: 'local' }) },
+	{ path: '/timeline/social', component: page('timeline', 'chat'), props: route => ({ src: 'social' }) },
+	{ path: '/timeline/global', component: page('timeline', 'chat'), props: route => ({ src: 'global' }) },
+	{ path: '/channels/:channelId', component: page('channel', 'chat'), props: route => ({ channelId: route.params.channelId }) },
+];
+
+function margeRoutes(routes: any[]) {
+	const result = defaultRoutes;
+	for (const route of routes) {
+		const found = result.findIndex(x => x.path === route.path);
+		if (found > -1) {
+			result[found] = route;
+		} else {
+			result.unshift(route);
+		}
+	}
+	return result;
+}
+
 export const router = createRouter({
 	history: createWebHistory(),
-	routes: [
-		// NOTE: MkTimelineをdynamic importするとAsyncComponentWrapperが間に入るせいでkeep-aliveのコンポーネント指定が効かなくなる
-		{ path: '/', name: 'index', component: $i ? MkTimeline : page('welcome') },
-		{ path: '/@:acct/:page?', name: 'user', component: page('user/index'), props: route => ({ acct: route.params.acct, page: route.params.page || 'index' }) },
-		{ path: '/@:user/pages/:page', component: page('page'), props: route => ({ pageName: route.params.page, username: route.params.user }) },
-		{ path: '/@:user/pages/:pageName/view-source', component: page('page-editor/page-editor'), props: route => ({ initUser: route.params.user, initPageName: route.params.pageName }) },
-		{ path: '/@:acct/room', props: true, component: page('room/room') },
-		{ path: '/settings/:page(.*)?', name: 'settings', component: page('settings/index'), props: route => ({ initialPage: route.params.page || null }) },
-		{ path: '/reset-password/:token?', component: page('reset-password'), props: route => ({ token: route.params.token }) },
-		{ path: '/announcements', component: page('announcements') },
-		{ path: '/about', component: page('about') },
-		{ path: '/about-misskey', component: page('about-misskey') },
-		{ path: '/featured', component: page('featured') },
-		{ path: '/docs', component: page('docs') },
-		{ path: '/theme-editor', component: page('theme-editor') },
-		{ path: '/advanced-theme-editor', component: page('advanced-theme-editor') },
-		{ path: '/docs/:doc(.*)', component: page('doc'), props: route => ({ doc: route.params.doc }) },
-		{ path: '/explore', component: page('explore') },
-		{ path: '/explore/tags/:tag', props: true, component: page('explore') },
-		{ path: '/search', component: page('search') },
-		{ path: '/pages', name: 'pages', component: page('pages') },
-		{ path: '/pages/new', component: page('page-editor/page-editor') },
-		{ path: '/pages/edit/:pageId', component: page('page-editor/page-editor'), props: route => ({ initPageId: route.params.pageId }) },
-		{ path: '/gallery', component: page('gallery/index') },
-		{ path: '/gallery/new', component: page('gallery/edit') },
-		{ path: '/gallery/:postId/edit', component: page('gallery/edit'), props: route => ({ postId: route.params.postId }) },
-		{ path: '/gallery/:postId', component: page('gallery/post'), props: route => ({ postId: route.params.postId }) },
-		{ path: '/channels', component: page('channels') },
-		{ path: '/channels/new', component: page('channel-editor') },
-		{ path: '/channels/:channelId/edit', component: page('channel-editor'), props: true },
-		{ path: '/channels/:channelId', component: page('channel'), props: route => ({ channelId: route.params.channelId }) },
-		{ path: '/clips/:clipId', component: page('clip'), props: route => ({ clipId: route.params.clipId }) },
-		{ path: '/my/notifications', component: page('notifications') },
-		{ path: '/my/favorites', component: page('favorites') },
-		{ path: '/my/messages', component: page('messages') },
-		{ path: '/my/mentions', component: page('mentions') },
-		{ path: '/my/messaging', name: 'messaging', component: page('messaging/index') },
-		{ path: '/my/messaging/:user', component: page('messaging/messaging-room'), props: route => ({ userAcct: route.params.user }) },
-		{ path: '/my/messaging/group/:group', component: page('messaging/messaging-room'), props: route => ({ groupId: route.params.group }) },
-		{ path: '/my/drive', name: 'drive', component: page('drive') },
-		{ path: '/my/drive/folder/:folder', component: page('drive') },
-		{ path: '/my/follow-requests', component: page('follow-requests') },
-		{ path: '/my/lists', component: page('my-lists/index') },
-		{ path: '/my/lists/:list', component: page('my-lists/list') },
-		{ path: '/my/groups', component: page('my-groups/index') },
-		{ path: '/my/groups/:group', component: page('my-groups/group'), props: route => ({ groupId: route.params.group }) },
-		{ path: '/my/antennas', component: page('my-antennas/index') },
-		{ path: '/my/clips', component: page('my-clips/index') },
-		{ path: '/scratchpad', component: page('scratchpad') },
-		{ path: '/instance/:page(.*)?', component: page('instance/index'), props: route => ({ initialPage: route.params.page || null }) },
-		{ path: '/instance', component: page('instance/index') },
-		{ path: '/notes/:note', name: 'note', component: page('note'), props: route => ({ noteId: route.params.note }) },
-		{ path: '/tags/:tag', component: page('tag'), props: route => ({ tag: route.params.tag }) },
-		{ path: '/user-info/:user', component: page('user-info'), props: route => ({ userId: route.params.user }) },
-		{ path: '/user-ap-info/:user', component: page('user-ap-info'), props: route => ({ userId: route.params.user }) },
-		{ path: '/instance-info/:host', component: page('instance-info'), props: route => ({ host: route.params.host }) },
-		{ path: '/games/reversi', component: page('reversi/index') },
-		{ path: '/games/reversi/:gameId', component: page('reversi/game'), props: route => ({ gameId: route.params.gameId }) },
-		{ path: '/mfm-cheat-sheet', component: page('mfm-cheat-sheet') },
-		{ path: '/api-console', component: page('api-console') },
-		{ path: '/preview', component: page('preview') },
-		{ path: '/test', component: page('test') },
-		{ path: '/auth/:token', component: page('auth') },
-		{ path: '/miauth/:session', component: page('miauth') },
-		{ path: '/authorize-follow', component: page('follow') },
-		{ path: '/share', component: page('share') },
-		{ path: '/:catchAll(.*)', component: page('not-found') }
-	],
+	routes: margeRoutes(ui === 'chat' ? chatRoutes : []),
 	// なんかHacky
 	// 通常の使い方をすると scroll メソッドの behavior を設定できないため、自前で window.scroll するようにする
 	scrollBehavior(to) {
diff --git a/src/client/ui/chat/index.vue b/src/client/ui/chat/index.vue
index 6e433de126..db663c4530 100644
--- a/src/client/ui/chat/index.vue
+++ b/src/client/ui/chat/index.vue
@@ -73,54 +73,16 @@
 	</div>
 
 	<main class="main" @contextmenu.stop="onContextmenu">
-		<header class="header" ref="header" @click="onHeaderClick">
-			<div class="left">
-				<template v-if="tl === 'home'">
-					<i class="fas fa-home icon"></i>
-					<div class="title">{{ $ts._timelines.home }}</div>
-				</template>
-				<template v-else-if="tl === 'local'">
-					<i class="fas fa-comments icon"></i>
-					<div class="title">{{ $ts._timelines.local }}</div>
-				</template>
-				<template v-else-if="tl === 'social'">
-					<i class="fas fa-share-alt icon"></i>
-					<div class="title">{{ $ts._timelines.social }}</div>
-				</template>
-				<template v-else-if="tl === 'global'">
-					<i class="fas fa-globe icon"></i>
-					<div class="title">{{ $ts._timelines.global }}</div>
-				</template>
-				<template v-else-if="tl.startsWith('channel:')">
-					<i class="fas fa-satellite-dish icon"></i>
-					<div class="title" v-if="currentChannel">{{ currentChannel.name }}<div class="description">{{ currentChannel.description }}</div></div>
-				</template>
-			</div>
-
-			<div class="right">
-				<div class="instance">{{ instanceName }}</div>
-				<XHeaderClock class="clock"/>
-				<button class="_button button timetravel" @click="timetravel" v-tooltip="$ts.jumpToSpecifiedDate">
-					<i class="fas fa-calendar-alt"></i>
-				</button>
-				<button class="_button button search" v-if="tl.startsWith('channel:') && currentChannel" @click="inChannelSearch" v-tooltip="$ts.inChannelSearch">
-					<i class="fas fa-search"></i>
-				</button>
-				<button class="_button button search" v-else @click="search" v-tooltip="$ts.search">
-					<i class="fas fa-search"></i>
-				</button>
-				<button class="_button button follow" v-if="tl.startsWith('channel:') && currentChannel" :class="{ followed: currentChannel.isFollowing }" @click="toggleChannelFollow" v-tooltip="currentChannel.isFollowing ? $ts.unfollow : $ts.follow">
-					<i v-if="currentChannel.isFollowing" class="fas fa-star"></i>
-					<i v-else class="far fa-star"></i>
-				</button>
-				<button class="_button button menu" v-if="tl.startsWith('channel:') && currentChannel" @click="openChannelMenu">
-					<i class="fas fa-ellipsis-h"></i>
-				</button>
-			</div>
+		<header class="header">
+			<XHeader class="header" :info="pageInfo" :menu="menu" :center="false" :back-button="true" @back="back()" @click="onHeaderClick"/>
 		</header>
-
-		<XTimeline class="body" ref="tl" v-if="tl.startsWith('channel:')" src="channel" :key="tl" :channel="tl.replace('channel:', '')"/>
-		<XTimeline class="body" ref="tl" v-else :src="tl" :key="tl"/>
+		<router-view v-slot="{ Component }">
+			<transition :name="$store.state.animation ? 'page' : ''" mode="out-in" @enter="onTransition">
+				<keep-alive :include="['timeline']">
+					<component :is="Component" :ref="changePage" class="body"/>
+				</keep-alive>
+			</transition>
+		</router-view>
 	</main>
 
 	<XSide class="side" ref="side" @open="sideViewOpening = true" @close="sideViewOpening = false"/>
@@ -139,7 +101,7 @@ import XSidebar from '@client/ui/_common_/sidebar.vue';
 import XWidgets from './widgets.vue';
 import XCommon from '../_common_/common.vue';
 import XSide from './side.vue';
-import XTimeline from './timeline.vue';
+import XHeader from '../_common_/header.vue';
 import XHeaderClock from './header-clock.vue';
 import * as os from '@client/os';
 import { router } from '@client/router';
@@ -147,6 +109,7 @@ import { menuDef } from '@client/menu';
 import { search } from '@client/scripts/search';
 import copyToClipboard from '@client/scripts/copy-to-clipboard';
 import { store } from './store';
+import * as symbols from '@client/symbols';
 
 export default defineComponent({
 	components: {
@@ -154,29 +117,12 @@ export default defineComponent({
 		XSidebar,
 		XWidgets,
 		XSide, // NOTE: dynamic importするとAsyncComponentWrapperが間に入るせいでref取得できなくて面倒になる
-		XTimeline,
+		XHeader,
 		XHeaderClock,
 	},
 
 	provide() {
 		return {
-			navHook: (path) => {
-				switch (path) {
-					case '/timeline/home': this.tl = 'home'; return;
-					case '/timeline/local': this.tl = 'local'; return;
-					case '/timeline/social': this.tl = 'social'; return;
-					case '/timeline/global': this.tl = 'global'; return;
-
-					default:
-						if (path.startsWith('/channels/')) {
-							this.tl = `channel:${ path.replace('/channels/', '') }`;
-							return;
-						}
-						//os.pageWindow(path);
-						this.$refs.side.navigate(path);
-						break;
-				}
-			},
 			sideViewHook: (path) => {
 				this.$refs.side.navigate(path);
 			}
@@ -185,7 +131,7 @@ export default defineComponent({
 
 	data() {
 		return {
-			tl: store.state.tl,
+			pageInfo: null,
 			lists: null,
 			antennas: null,
 			followedChannels: null,
@@ -197,18 +143,30 @@ export default defineComponent({
 		};
 	},
 
+	computed: {
+		menu() {
+			return [{
+				icon: 'fas fa-columns',
+				text: this.$ts.openInSideView,
+				action: () => {
+					this.$refs.side.navigate(this.$route.path);
+				}
+			}, {
+				icon: 'fas fa-window-maximize',
+				text: this.$ts.openInWindow,
+				action: () => {
+					os.pageWindow(this.$route.path);
+				}
+			}];
+		}
+	},
+
 	created() {
 		if (window.innerWidth < 1024) {
 			localStorage.setItem('ui', 'default');
 			location.reload();
 		}
 
-		router.beforeEach((to, from) => {
-			this.$refs.side.navigate(to.fullPath);
-			// search?q=foo のようなクエリを受け取れるようにするため、return falseはできない
-			//return false;
-		});
-
 		os.api('users/lists/list').then(lists => {
 			this.lists = lists;
 		});
@@ -225,18 +183,22 @@ export default defineComponent({
 		os.api('channels/featured', { limit: 20 }).then(channels => {
 			this.featuredChannels = channels;
 		});
-
-		this.$watch('tl', () => {
-			if (this.tl.startsWith('channel:')) {
-				os.api('channels/show', { channelId: this.tl.replace('channel:', '') }).then(channel => {
-					this.currentChannel = channel;
-				});
-			}
-			store.set('tl', this.tl);
-		}, { immediate: true });
 	},
 
 	methods: {
+		changePage(page) {
+			console.log(page);
+			if (page == null) return;
+			if (page[symbols.PAGE_INFO]) {
+				this.pageInfo = page[symbols.PAGE_INFO];
+				document.title = `${this.pageInfo.title} | ${instanceName}`;
+			}
+		},
+
+		onTransition() {
+			if (window._scroll) window._scroll();
+		},
+
 		showMenu() {
 			this.$refs.menu.show();
 		},
@@ -245,59 +207,18 @@ export default defineComponent({
 			os.post();
 		},
 
-		async timetravel() {
-			const { canceled, result: date } = await os.dialog({
-				title: this.$ts.date,
-				input: {
-					type: 'date'
-				}
-			});
-			if (canceled) return;
-
-			this.$refs.tl.timetravel(new Date(date));
-		},
-
 		search() {
 			search();
 		},
 
-		async inChannelSearch() {
-			const { canceled, result: query } = await os.dialog({
-				title: this.$ts.inChannelSearch,
-				input: true
-			});
-			if (canceled || query == null || query === '') return;
-			router.push(`/search?q=${encodeURIComponent(query)}&channel=${this.currentChannel.id}`);
+		back() {
+			history.back();
 		},
 
 		top() {
 			window.scroll({ top: 0, behavior: 'smooth' });
 		},
 
-		async toggleChannelFollow() {
-			if (this.currentChannel.isFollowing) {
-				await os.apiWithDialog('channels/unfollow', {
-					channelId: this.currentChannel.id
-				});
-				this.currentChannel.isFollowing = false;
-			} else {
-				await os.apiWithDialog('channels/follow', {
-					channelId: this.currentChannel.id
-				});
-				this.currentChannel.isFollowing = true;
-			}
-		},
-
-		openChannelMenu(ev) {
-			os.modalMenu([{
-				text: this.$ts.copyUrl,
-				icon: 'fas fa-link',
-				action: () => {
-					copyToClipboard(`${url}/channels/${this.currentChannel.id}`);
-				}
-			}], ev.currentTarget || ev.target);
-		},
-
 		onTransition() {
 			if (window._scroll) window._scroll();
 		},
@@ -516,87 +437,24 @@ export default defineComponent({
 		background: var(--panel);
 
 		> .header {
-			$padding: 8px;
-			display: flex;
 			z-index: 1000;
 			height: $header-height;
-			padding: $padding;
-			box-sizing: border-box;
 			background-color: var(--panel);
 			border-bottom: solid 0.5px var(--divider);
 			user-select: none;
+		}
 
-			> .left {
-				display: flex;
-				align-items: center;
-				flex: 1;
-				min-width: 0;
-
-				> .icon {
-					height: ($header-height - ($padding * 2));
-					width: ($header-height - ($padding * 2));
-					padding: 10px;
-					box-sizing: border-box;
-					margin-right: 4px;
-					opacity: 0.6;
-				}
-
-				> .title {
-					overflow: hidden;
-					text-overflow: ellipsis;
-					white-space: nowrap;
-					min-width: 0;
-					font-weight: bold;
-
-					> .description {
-						opacity: 0.6;
-						font-size: 0.8em;
-						font-weight: normal;
-						white-space: nowrap;
-						overflow: hidden;
-						text-overflow: ellipsis;
-					}
-				}
-			}
-
-			> .right {
-				display: flex;
-				align-items: center;
-				min-width: 0;
-				margin-left: auto;
-				padding-left: 8px;
-
-				> .instance {
-					margin-right: 16px;
-					font-size: 0.9em;
-				}
-
-				> .clock {
-					margin-right: 16px;
-				}
-
-				> .button {
-					height: ($header-height - ($padding * 2));
-					width: ($header-height - ($padding * 2));
-					box-sizing: border-box;
-					position: relative;
-					border-radius: 5px;
-
-					&:hover {
-						background: rgba(0, 0, 0, 0.05);
-					}
-
-					&.follow.followed {
-						color: var(--accent);
-					}
-				}
-			}
+		> .body {
+			width: 100%;
+			box-sizing: border-box;
+			overflow: auto;
 		}
 	}
 
 	> .side {
 		width: 350px;
 		border-left: solid 4px var(--divider);
+		background: var(--panel);
 
 		&.widgets.sideViewOpening {
 			@media (max-width: 1400px) {
diff --git a/src/client/ui/chat/pages/channel.vue b/src/client/ui/chat/pages/channel.vue
new file mode 100644
index 0000000000..76b334487e
--- /dev/null
+++ b/src/client/ui/chat/pages/channel.vue
@@ -0,0 +1,259 @@
+<template>
+<div v-if="channel" class="hhizbblb">
+	<div class="info" v-if="date">
+		<MkInfo>{{ $ts.showingPastTimeline }} <button class="_textButton clear" @click="timetravel()">{{ $ts.clear }}</button></MkInfo>
+	</div>
+	<div class="tl" ref="body">
+		<div class="new" v-if="queue > 0" :style="{ width: width + 'px', bottom: bottom + 'px' }"><button class="_buttonPrimary" @click="goTop()">{{ $ts.newNoteRecived }}</button></div>
+		<XNotes class="tl" ref="tl" :pagination="pagination" @queue="queueUpdated" v-follow="true"/>
+	</div>
+	<div class="bottom">
+		<div class="typers" v-if="typers.length > 0">
+			<I18n :src="$ts.typingUsers" text-tag="span" class="users">
+				<template #users>
+					<b v-for="user in typers" :key="user.id" class="user">{{ user.username }}</b>
+				</template>
+			</I18n>
+			<MkEllipsis/>
+		</div>
+		<XPostForm :channel="channel"/>
+	</div>
+</div>
+</template>
+
+<script lang="ts">
+import { computed, defineComponent, markRaw } from 'vue';
+import * as Misskey from 'misskey-js';
+import XNotes from '../notes.vue';
+import * as os from '@client/os';
+import * as sound from '@client/scripts/sound';
+import { scrollToBottom, getScrollPosition, getScrollContainer } from '@client/scripts/scroll';
+import follow from '@client/directives/follow-append';
+import XPostForm from '../post-form.vue';
+import MkInfo from '@client/components/ui/info.vue';
+import * as symbols from '@client/symbols';
+
+export default defineComponent({
+	components: {
+		XNotes,
+		XPostForm,
+		MkInfo,
+	},
+
+	directives: {
+		follow
+	},
+	
+	provide() {
+		return {
+			inChannel: true
+		};
+	},
+
+	props: {
+		channelId: {
+			type: String,
+			required: true
+		},
+	},
+
+	data() {
+		return {
+			channel: null as Misskey.entities.Channel | null,
+			connection: null,
+			pagination: null,
+			baseQuery: {
+				includeMyRenotes: this.$store.state.showMyRenotes,
+				includeRenotedMyNotes: this.$store.state.showRenotedMyNotes,
+				includeLocalRenotes: this.$store.state.showLocalRenotes
+			},
+			queue: 0,
+			width: 0,
+			top: 0,
+			bottom: 0,
+			typers: [],
+			date: null,
+			[symbols.PAGE_INFO]: computed(() => ({
+				title: this.channel ? this.channel.name : '-',
+				subtitle: this.channel ? this.channel.description : '-',
+				icon: 'fas fa-satellite-dish',
+				actions: [{
+					icon: this.channel?.isFollowing ? 'fas fa-star' : 'far fa-star',
+					text: this.channel?.isFollowing ? this.$ts.unfollow : this.$ts.follow,
+					highlighted: this.channel?.isFollowing,
+					handler: this.toggleChannelFollow
+				}, {
+					icon: 'fas fa-search',
+					text: this.$ts.inChannelSearch,
+					handler: this.inChannelSearch
+				}, {
+					icon: 'fas fa-calendar-alt',
+					text: this.$ts.jumpToSpecifiedDate,
+					handler: this.timetravel
+				}]
+			})),
+		};
+	},
+
+	async created() {
+		this.channel = await os.api('channels/show', { channelId: this.channelId });
+
+		const prepend = note => {
+			(this.$refs.tl as any).prepend(note);
+
+			this.$emit('note');
+
+			sound.play(note.userId === this.$i.id ? 'noteMy' : 'note');
+		};
+
+		this.connection = markRaw(os.stream.useChannel('channel', {
+			channelId: this.channelId
+		}));
+		this.connection.on('note', prepend);
+		this.connection.on('typers', typers => {
+			this.typers = this.$i ? typers.filter(u => u.id !== this.$i.id) : typers;
+		});
+
+		this.pagination = {
+			endpoint: 'channels/timeline',
+			reversed: true,
+			limit: 10,
+			params: init => ({
+				channelId: this.channelId,
+				untilDate: this.date?.getTime(),
+				...this.baseQuery
+			})
+		};
+	},
+
+	mounted() {
+
+	},
+
+	beforeUnmount() {
+		this.connection.dispose();
+	},
+
+	methods: {
+		focus() {
+			this.$refs.body.focus();
+		},
+
+		goTop() {
+			const container = getScrollContainer(this.$refs.body);
+			container.scrollTop = 0;
+		},
+
+		queueUpdated(q) {
+			if (this.$refs.body.offsetWidth !== 0) {
+				const rect = this.$refs.body.getBoundingClientRect();
+				this.width = this.$refs.body.offsetWidth;
+				this.top = rect.top;
+				this.bottom = this.$refs.body.offsetHeight;
+			}
+			this.queue = q;
+		},
+
+		async inChannelSearch() {
+			const { canceled, result: query } = await os.dialog({
+				title: this.$ts.inChannelSearch,
+				input: true
+			});
+			if (canceled || query == null || query === '') return;
+			router.push(`/search?q=${encodeURIComponent(query)}&channel=${this.channelId}`);
+		},
+
+		async toggleChannelFollow() {
+			if (this.channel.isFollowing) {
+				await os.apiWithDialog('channels/unfollow', {
+					channelId: this.channel.id
+				});
+				this.channel.isFollowing = false;
+			} else {
+				await os.apiWithDialog('channels/follow', {
+					channelId: this.channel.id
+				});
+				this.channel.isFollowing = true;
+			}
+		},
+
+		openChannelMenu(ev) {
+			os.modalMenu([{
+				text: this.$ts.copyUrl,
+				icon: 'fas fa-link',
+				action: () => {
+					copyToClipboard(`${url}/channels/${this.currentChannel.id}`);
+				}
+			}], ev.currentTarget || ev.target);
+		},
+
+		timetravel(date?: Date) {
+			this.date = date;
+			this.$refs.tl.reload();
+		}
+	}
+});
+</script>
+
+<style lang="scss" scoped>
+.hhizbblb {
+	display: flex;
+	flex-direction: column;
+	flex: 1;
+	overflow: auto;
+
+	> .info {
+		padding: 16px 16px 0 16px;
+	}
+
+	> .top {
+		padding: 16px 16px 0 16px;
+	}
+
+	> .bottom {
+		padding: 0 16px 16px 16px;
+		position: relative;
+
+		> .typers {
+			position: absolute;
+			bottom: 100%;
+			padding: 0 8px 0 8px;
+			font-size: 0.9em;
+			background: var(--panel);
+			border-radius: 0 8px 0 0;
+			color: var(--fgTransparentWeak);
+
+			> .users {
+				> .user + .user:before {
+					content: ", ";
+					font-weight: normal;
+				}
+
+				> .user:last-of-type:after {
+					content: " ";
+				}
+			}
+		}
+	}
+
+	> .tl {
+		position: relative;
+		padding: 16px 0;
+		flex: 1;
+		min-width: 0;
+		overflow: auto;
+
+		> .new {
+			position: fixed;
+			z-index: 1000;
+
+			> button {
+				display: block;
+				margin: 16px auto;
+				padding: 8px 16px;
+				border-radius: 32px;
+			}
+		}
+	}
+}
+</style>
diff --git a/src/client/ui/chat/pages/timeline.vue b/src/client/ui/chat/pages/timeline.vue
new file mode 100644
index 0000000000..0f9cd7f11e
--- /dev/null
+++ b/src/client/ui/chat/pages/timeline.vue
@@ -0,0 +1,221 @@
+<template>
+<div class="dbiokgaf">
+	<div class="info" v-if="date">
+		<MkInfo>{{ $ts.showingPastTimeline }} <button class="_textButton clear" @click="timetravel()">{{ $ts.clear }}</button></MkInfo>
+	</div>
+	<div class="top">
+		<XPostForm/>
+	</div>
+	<div class="tl" ref="body">
+		<div class="new" v-if="queue > 0" :style="{ width: width + 'px', top: top + 'px' }"><button class="_buttonPrimary" @click="goTop()">{{ $ts.newNoteRecived }}</button></div>
+		<XNotes class="tl" ref="tl" :pagination="pagination" @queue="queueUpdated"/>
+	</div>
+</div>
+</template>
+
+<script lang="ts">
+import { computed, defineComponent, markRaw } from 'vue';
+import XNotes from '../notes.vue';
+import * as os from '@client/os';
+import * as sound from '@client/scripts/sound';
+import { scrollToBottom, getScrollPosition, getScrollContainer } from '@client/scripts/scroll';
+import follow from '@client/directives/follow-append';
+import XPostForm from '../post-form.vue';
+import MkInfo from '@client/components/ui/info.vue';
+import * as symbols from '@client/symbols';
+
+export default defineComponent({
+	components: {
+		XNotes,
+		XPostForm,
+		MkInfo,
+	},
+
+	directives: {
+		follow
+	},
+
+	props: {
+		src: {
+			type: String,
+			required: true
+		},
+	},
+
+	data() {
+		return {
+			connection: null,
+			connection2: null,
+			pagination: null,
+			baseQuery: {
+				includeMyRenotes: this.$store.state.showMyRenotes,
+				includeRenotedMyNotes: this.$store.state.showRenotedMyNotes,
+				includeLocalRenotes: this.$store.state.showLocalRenotes
+			},
+			query: {},
+			queue: 0,
+			width: 0,
+			top: 0,
+			bottom: 0,
+			typers: [],
+			date: null,
+			[symbols.PAGE_INFO]: computed(() => ({
+				title: this.$ts.timeline,
+				icon: 'fas fa-home',
+				actions: [{
+					icon: 'fas fa-calendar-alt',
+					text: this.$ts.jumpToSpecifiedDate,
+					handler: this.timetravel
+				}]
+			})),
+		};
+	},
+
+	created() {
+		const prepend = note => {
+			(this.$refs.tl as any).prepend(note);
+
+			this.$emit('note');
+
+			sound.play(note.userId === this.$i.id ? 'noteMy' : 'note');
+		};
+
+		const onChangeFollowing = () => {
+			if (!this.$refs.tl.backed) {
+				this.$refs.tl.reload();
+			}
+		};
+
+		let endpoint;
+
+		if (this.src == 'home') {
+			endpoint = 'notes/timeline';
+			this.connection = markRaw(os.stream.useChannel('homeTimeline'));
+			this.connection.on('note', prepend);
+
+			this.connection2 = markRaw(os.stream.useChannel('main'));
+			this.connection2.on('follow', onChangeFollowing);
+			this.connection2.on('unfollow', onChangeFollowing);
+		} else if (this.src == 'local') {
+			endpoint = 'notes/local-timeline';
+			this.connection = markRaw(os.stream.useChannel('localTimeline'));
+			this.connection.on('note', prepend);
+		} else if (this.src == 'social') {
+			endpoint = 'notes/hybrid-timeline';
+			this.connection = markRaw(os.stream.useChannel('hybridTimeline'));
+			this.connection.on('note', prepend);
+		} else if (this.src == 'global') {
+			endpoint = 'notes/global-timeline';
+			this.connection = markRaw(os.stream.useChannel('globalTimeline'));
+			this.connection.on('note', prepend);
+		}
+
+		this.pagination = {
+			endpoint: endpoint,
+			limit: 10,
+			params: init => ({
+				untilDate: this.date?.getTime(),
+				...this.baseQuery, ...this.query
+			})
+		};
+	},
+
+	mounted() {
+
+	},
+
+	beforeUnmount() {
+		this.connection.dispose();
+		if (this.connection2) this.connection2.dispose();
+	},
+
+	methods: {
+		focus() {
+			this.$refs.body.focus();
+		},
+
+		goTop() {
+			const container = getScrollContainer(this.$refs.body);
+			container.scrollTop = 0;
+		},
+
+		queueUpdated(q) {
+			if (this.$refs.body.offsetWidth !== 0) {
+				const rect = this.$refs.body.getBoundingClientRect();
+				this.width = this.$refs.body.offsetWidth;
+				this.top = rect.top;
+				this.bottom = this.$refs.body.offsetHeight;
+			}
+			this.queue = q;
+		},
+
+		timetravel(date?: Date) {
+			this.date = date;
+			this.$refs.tl.reload();
+		}
+	}
+});
+</script>
+
+<style lang="scss" scoped>
+.dbiokgaf {
+	display: flex;
+	flex-direction: column;
+	flex: 1;
+	overflow: auto;
+
+	> .info {
+		padding: 16px 16px 0 16px;
+	}
+
+	> .top {
+		padding: 16px 16px 0 16px;
+	}
+
+	> .bottom {
+		padding: 0 16px 16px 16px;
+		position: relative;
+
+		> .typers {
+			position: absolute;
+			bottom: 100%;
+			padding: 0 8px 0 8px;
+			font-size: 0.9em;
+			background: var(--panel);
+			border-radius: 0 8px 0 0;
+			color: var(--fgTransparentWeak);
+
+			> .users {
+				> .user + .user:before {
+					content: ", ";
+					font-weight: normal;
+				}
+
+				> .user:last-of-type:after {
+					content: " ";
+				}
+			}
+		}
+	}
+
+	> .tl {
+		position: relative;
+		padding: 16px 0;
+		flex: 1;
+		min-width: 0;
+		overflow: auto;
+
+		> .new {
+			position: fixed;
+			z-index: 1000;
+
+			> button {
+				display: block;
+				margin: 16px auto;
+				padding: 8px 16px;
+				border-radius: 32px;
+			}
+		}
+	}
+}
+</style>
diff --git a/src/client/ui/chat/side.vue b/src/client/ui/chat/side.vue
index 7ad39c7a19..5ccfad1b75 100644
--- a/src/client/ui/chat/side.vue
+++ b/src/client/ui/chat/side.vue
@@ -1,11 +1,9 @@
 <template>
 <div class="mrajymqm _narrow_" v-if="component">
 	<header class="header" @contextmenu.prevent.stop="onContextmenu">
-		<button class="_button" @click="back()" v-if="history.length > 0"><i class="fas fa-chevron-left"></i></button>
-		<XHeader class="title" :info="pageInfo" :with-back="false" :center="false"/>
-		<button class="_button" @click="close()"><i class="fas fa-times"></i></button>
+		<XHeader class="title" :info="pageInfo" :center="false" :back-button="history.length > 0" @back="back()" :close-button="true" @close="close()"/>
 	</header>
-	<component :is="component" v-bind="props" :ref="changePage" class="_flat_"/>
+	<component :is="component" v-bind="props" :ref="changePage" class="body _flat_"/>
 </div>
 </template>
 
@@ -130,7 +128,6 @@ export default defineComponent({
 		top: 0;
 		height: $header-height;
 		width: 100%;
-		line-height: $header-height;
 		font-weight: bold;
 		//background-color: var(--panel);
 		-webkit-backdrop-filter: blur(32px);
@@ -153,6 +150,10 @@ export default defineComponent({
 			position: relative;
 		}
 	}
+
+	> .body {
+
+	}
 }
 </style>
 
diff --git a/src/client/ui/chat/timeline.vue b/src/client/ui/chat/timeline.vue
deleted file mode 100644
index 0fbcbfb713..0000000000
--- a/src/client/ui/chat/timeline.vue
+++ /dev/null
@@ -1,292 +0,0 @@
-<template>
-<div class="dbiokgaf info" v-if="date">
-	<MkInfo>{{ $ts.showingPastTimeline }} <button class="_textButton clear" @click="timetravel()">{{ $ts.clear }}</button></MkInfo>
-</div>
-<div class="dbiokgaf top" v-if="['home', 'local', 'social', 'global'].includes(src)">
-	<XPostForm/>
-</div>
-<div class="dbiokgaf tl" ref="body">
-	<div class="new" v-if="queue > 0" :style="{ width: width + 'px', [pagination.reversed ? 'bottom' : 'top']: pagination.reversed ? bottom + 'px' : top + 'px' }"><button class="_buttonPrimary" @click="goTop()">{{ $ts.newNoteRecived }}</button></div>
-	<XNotes class="tl" ref="tl" :pagination="pagination" @queue="queueUpdated" v-follow="pagination.reversed"/>
-</div>
-<div class="dbiokgaf bottom" v-if="src === 'channel'">
-	<div class="typers" v-if="typers.length > 0">
-		<I18n :src="$ts.typingUsers" text-tag="span" class="users">
-			<template #users>
-				<b v-for="user in typers" :key="user.id" class="user">{{ user.username }}</b>
-			</template>
-		</I18n>
-		<MkEllipsis/>
-	</div>
-	<XPostForm :channel="channel"/>
-</div>
-</template>
-
-<script lang="ts">
-import { defineComponent, markRaw } from 'vue';
-import XNotes from './notes.vue';
-import * as os from '@client/os';
-import * as sound from '@client/scripts/sound';
-import { scrollToBottom, getScrollPosition, getScrollContainer } from '@client/scripts/scroll';
-import follow from '@client/directives/follow-append';
-import XPostForm from './post-form.vue';
-import MkInfo from '@client/components/ui/info.vue';
-
-export default defineComponent({
-	components: {
-		XNotes,
-		XPostForm,
-		MkInfo,
-	},
-
-	directives: {
-		follow
-	},
-	
-	provide() {
-		return {
-			inChannel: this.src === 'channel'
-		};
-	},
-
-	props: {
-		src: {
-			type: String,
-			required: true
-		},
-		list: {
-			type: String,
-			required: false
-		},
-		antenna: {
-			type: String,
-			required: false
-		},
-		channel: {
-			type: String,
-			required: false
-		},
-	},
-
-	emits: ['note', 'queue', 'before', 'after'],
-
-	data() {
-		return {
-			connection: null,
-			connection2: null,
-			pagination: null,
-			baseQuery: {
-				includeMyRenotes: this.$store.state.showMyRenotes,
-				includeRenotedMyNotes: this.$store.state.showRenotedMyNotes,
-				includeLocalRenotes: this.$store.state.showLocalRenotes
-			},
-			query: {},
-			queue: 0,
-			width: 0,
-			top: 0,
-			bottom: 0,
-			typers: [],
-			date: null
-		};
-	},
-
-	created() {
-		const prepend = note => {
-			(this.$refs.tl as any).prepend(note);
-
-			this.$emit('note');
-
-			sound.play(note.userId === this.$i.id ? 'noteMy' : 'note');
-		};
-
-		const onUserAdded = () => {
-			(this.$refs.tl as any).reload();
-		};
-
-		const onUserRemoved = () => {
-			(this.$refs.tl as any).reload();
-		};
-
-		const onChangeFollowing = () => {
-			if (!this.$refs.tl.backed) {
-				this.$refs.tl.reload();
-			}
-		};
-
-		let endpoint;
-		let reversed = false;
-
-		if (this.src == 'antenna') {
-			endpoint = 'antennas/notes';
-			this.query = {
-				antennaId: this.antenna
-			};
-			this.connection = markRaw(os.stream.useChannel('antenna', {
-				antennaId: this.antenna
-			}));
-			this.connection.on('note', prepend);
-		} else if (this.src == 'home') {
-			endpoint = 'notes/timeline';
-			this.connection = markRaw(os.stream.useChannel('homeTimeline'));
-			this.connection.on('note', prepend);
-
-			this.connection2 = markRaw(os.stream.useChannel('main'));
-			this.connection2.on('follow', onChangeFollowing);
-			this.connection2.on('unfollow', onChangeFollowing);
-		} else if (this.src == 'local') {
-			endpoint = 'notes/local-timeline';
-			this.connection = markRaw(os.stream.useChannel('localTimeline'));
-			this.connection.on('note', prepend);
-		} else if (this.src == 'social') {
-			endpoint = 'notes/hybrid-timeline';
-			this.connection = markRaw(os.stream.useChannel('hybridTimeline'));
-			this.connection.on('note', prepend);
-		} else if (this.src == 'global') {
-			endpoint = 'notes/global-timeline';
-			this.connection = markRaw(os.stream.useChannel('globalTimeline'));
-			this.connection.on('note', prepend);
-		} else if (this.src == 'mentions') {
-			endpoint = 'notes/mentions';
-			this.connection = markRaw(os.stream.useChannel('main'));
-			this.connection.on('mention', prepend);
-		} else if (this.src == 'directs') {
-			endpoint = 'notes/mentions';
-			this.query = {
-				visibility: 'specified'
-			};
-			const onNote = note => {
-				if (note.visibility == 'specified') {
-					prepend(note);
-				}
-			};
-			this.connection = markRaw(os.stream.useChannel('main'));
-			this.connection.on('mention', onNote);
-		} else if (this.src == 'list') {
-			endpoint = 'notes/user-list-timeline';
-			this.query = {
-				listId: this.list
-			};
-			this.connection = markRaw(os.stream.useChannel('userList', {
-				listId: this.list
-			}));
-			this.connection.on('note', prepend);
-			this.connection.on('userAdded', onUserAdded);
-			this.connection.on('userRemoved', onUserRemoved);
-		} else if (this.src == 'channel') {
-			endpoint = 'channels/timeline';
-			reversed = true;
-			this.query = {
-				channelId: this.channel
-			};
-			this.connection = markRaw(os.stream.useChannel('channel', {
-				channelId: this.channel
-			}));
-			this.connection.on('note', prepend);
-			this.connection.on('typers', typers => {
-				this.typers = this.$i ? typers.filter(u => u.id !== this.$i.id) : typers;
-			});
-		}
-
-		this.pagination = {
-			endpoint: endpoint,
-			reversed,
-			limit: 10,
-			params: init => ({
-				untilDate: this.date?.getTime(),
-				...this.baseQuery, ...this.query
-			})
-		};
-	},
-
-	mounted() {
-
-	},
-
-	beforeUnmount() {
-		this.connection.dispose();
-		if (this.connection2) this.connection2.dispose();
-	},
-
-	methods: {
-		focus() {
-			this.$refs.body.focus();
-		},
-
-		goTop() {
-			const container = getScrollContainer(this.$refs.body);
-			container.scrollTop = 0;
-		},
-
-		queueUpdated(q) {
-			if (this.$refs.body.offsetWidth !== 0) {
-				const rect = this.$refs.body.getBoundingClientRect();
-				this.width = this.$refs.body.offsetWidth;
-				this.top = rect.top;
-				this.bottom = this.$refs.body.offsetHeight;
-			}
-			this.queue = q;
-		},
-
-		timetravel(date?: Date) {
-			this.date = date;
-			this.$refs.tl.reload();
-		}
-	}
-});
-</script>
-
-<style lang="scss" scoped>
-.dbiokgaf.info{
-	padding: 16px 16px 0 16px;
-}
-
-.dbiokgaf.top {
-	padding: 16px 16px 0 16px;
-}
-
-.dbiokgaf.bottom {
-	padding: 0 16px 16px 16px;
-	position: relative;
-
-	> .typers {
-		position: absolute;
-		bottom: 100%;
-		padding: 0 8px 0 8px;
-		font-size: 0.9em;
-		background: var(--panel);
-		border-radius: 0 8px 0 0;
-		color: var(--fgTransparentWeak);
-
-		> .users {
-			> .user + .user:before {
-				content: ", ";
-				font-weight: normal;
-			}
-
-			> .user:last-of-type:after {
-				content: " ";
-			}
-		}
-	}
-}
-
-.dbiokgaf.tl {
-	position: relative;
-	padding: 16px 0;
-	flex: 1;
-	min-width: 0;
-	overflow: auto;
-
-	> .new {
-		position: fixed;
-		z-index: 1000;
-
-		> button {
-			display: block;
-			margin: 16px auto;
-			padding: 8px 16px;
-			border-radius: 32px;
-		}
-	}
-}
-</style>
-- 
GitLab


From fe8334931fba6fdd3c4a1dba71533b207ad66e17 Mon Sep 17 00:00:00 2001
From: syuilo <Syuilotan@yahoo.co.jp>
Date: Sat, 7 Aug 2021 19:19:43 +0900
Subject: [PATCH 54/70] user page :art:

---
 src/client/pages/user/index.vue | 14 +++++++-------
 1 file changed, 7 insertions(+), 7 deletions(-)

diff --git a/src/client/pages/user/index.vue b/src/client/pages/user/index.vue
index ab92407a55..dec5ec39e2 100644
--- a/src/client/pages/user/index.vue
+++ b/src/client/pages/user/index.vue
@@ -1,9 +1,9 @@
 <template>
 <transition name="fade" mode="out-in">
 	<div class="ftskorzw wide" v-if="user && narrow === false">
-		<MkRemoteCaution v-if="user.host != null" :href="user.url" class="_gap"/>
+		<MkRemoteCaution v-if="user.host != null" :href="user.url"/>
 
-		<div class="banner-container _gap" :style="style">
+		<div class="banner-container" :style="style">
 			<div class="banner" ref="banner" :style="style"></div>
 		</div>
 		<div class="contents">
@@ -276,6 +276,7 @@ export default defineComponent({
 		return {
 			[symbols.PAGE_INFO]: computed(() => this.user ? {
 				title: this.user.name ? `${this.user.name} (@${this.user.username})` : `@${this.user.username}`,
+				subtitle: `@${getAcct(this.user)}`,
 				userName: this.user,
 				avatar: this.user,
 				path: `/@${this.user.username}`,
@@ -313,7 +314,7 @@ export default defineComponent({
 
 	mounted() {
 		window.requestAnimationFrame(this.parallaxLoop);
-		this.narrow = true; //this.$el.clientWidth < 1000;
+		this.narrow = this.$el.clientWidth < 1000;
 	},
 
 	beforeUnmount() {
@@ -381,13 +382,10 @@ export default defineComponent({
 }
 
 .ftskorzw.wide {
-	max-width: 1150px;
-	margin: 0 auto;
 
 	> .banner-container {
 		position: relative;
-		height: 450px;
-		border-radius: 16px;
+		height: 300px;
 		overflow: hidden;
 		background-size: cover;
 		background-position: center;
@@ -404,6 +402,7 @@ export default defineComponent({
 
 	> .contents {
 		display: flex;
+		padding: 16px;
 
 		> .side {
 			width: 360px;
@@ -561,6 +560,7 @@ export default defineComponent({
 .ftskorzw.narrow {
 	box-sizing: border-box;
 	overflow: clip;
+	background: var(--bg);
 
 	> .punished {
 		font-size: 0.8em;
-- 
GitLab


From 3e45e6c1655cbb88f6c53e938f52ffcd00263050 Mon Sep 17 00:00:00 2001
From: syuilo <Syuilotan@yahoo.co.jp>
Date: Sat, 7 Aug 2021 19:21:17 +0900
Subject: [PATCH 55/70] Clean up

---
 src/remote/activitypub/models/note.ts | 9 ---------
 1 file changed, 9 deletions(-)

diff --git a/src/remote/activitypub/models/note.ts b/src/remote/activitypub/models/note.ts
index 3b7452c3cb..6621ae3492 100644
--- a/src/remote/activitypub/models/note.ts
+++ b/src/remote/activitypub/models/note.ts
@@ -218,15 +218,6 @@ export async function createNote(value: string | IObject, resolver?: Resolver, s
 		if (note.name) {
 			return await tryCreateVote(note.name, poll.choices.findIndex(x => x === note.name));
 		}
-
-		// 後方互換性のため
-		if (text) {
-			const m = text.match(/(\d+)$/);
-
-			if (m) {
-				return await tryCreateVote(m[0], Number(m[1]));
-			}
-		}
 	}
 
 	const emojis = await extractEmojis(note.tag || [], actor.host).catch(e => {
-- 
GitLab


From d2c14b844ed1f4dffa66c4a9d64abdf07ad66301 Mon Sep 17 00:00:00 2001
From: syuilo <Syuilotan@yahoo.co.jp>
Date: Sat, 7 Aug 2021 19:25:54 +0900
Subject: [PATCH 56/70] New Crowdin updates (#7610)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations mute.md (Esperanto)

* New translations stream.md (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (French)

* New translations ja-JP.yml (French)

* New translations ja-JP.yml (French)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (French)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (French)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations keyboard-shortcut.md (Esperanto)

* New translations timelines.md (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations follow.md (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations custom-emoji.md (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (Chinese Simplified)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Arabic)

* New translations ja-JP.yml (French)

* New translations ja-JP.yml (French)

* New translations ja-JP.yml (Italian)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (Chinese Simplified)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (Russian)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (Russian)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Russian)

* New translations ja-JP.yml (Indonesian)

* New translations ja-JP.yml (Chinese Traditional)

* New translations ja-JP.yml (Chinese Simplified)

* New translations ja-JP.yml (Ukrainian)

* New translations ja-JP.yml (French)

* New translations ja-JP.yml (Polish)

* New translations ja-JP.yml (Korean)

* New translations ja-JP.yml (Italian)

* New translations ja-JP.yml (Spanish)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (Japanese, Kansai)

* New translations ja-JP.yml (Chinese Simplified)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Russian)

* New translations ja-JP.yml (Indonesian)

* New translations ja-JP.yml (Chinese Traditional)

* New translations ja-JP.yml (Chinese Simplified)

* New translations ja-JP.yml (Ukrainian)

* New translations ja-JP.yml (French)

* New translations ja-JP.yml (Polish)

* New translations ja-JP.yml (Korean)

* New translations ja-JP.yml (Italian)

* New translations ja-JP.yml (Spanish)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (Japanese, Kansai)

* New translations ja-JP.yml (Russian)

* New translations ja-JP.yml (Indonesian)

* New translations ja-JP.yml (Chinese Traditional)

* New translations ja-JP.yml (Chinese Simplified)

* New translations ja-JP.yml (Ukrainian)

* New translations ja-JP.yml (French)

* New translations ja-JP.yml (Polish)

* New translations ja-JP.yml (Korean)

* New translations ja-JP.yml (Italian)

* New translations ja-JP.yml (Arabic)

* New translations ja-JP.yml (Spanish)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (Japanese, Kansai)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (German)
---
 locales/ar-SA.yml                   |   4 +
 locales/de-DE.yml                   | 517 ++++++++++++------------
 locales/en-US.yml                   | 603 ++++++++++++++--------------
 locales/eo-UY.yml                   | 345 ++++++++++++----
 locales/es-ES.yml                   |   4 +
 locales/fr-FR.yml                   |  15 +
 locales/id-ID.yml                   |  11 +
 locales/it-IT.yml                   |   6 +
 locales/ja-KS.yml                   |   4 +
 locales/ko-KR.yml                   |  11 +
 locales/pl-PL.yml                   |   4 +
 locales/ru-RU.yml                   |  13 +
 locales/uk-UA.yml                   |   4 +
 locales/zh-CN.yml                   |  12 +
 locales/zh-TW.yml                   |   4 +
 src/docs/eo-UY/custom-emoji.md      |   2 +-
 src/docs/eo-UY/follow.md            |   2 +-
 src/docs/eo-UY/keyboard-shortcut.md |   2 +-
 src/docs/eo-UY/mute.md              |   2 +-
 src/docs/eo-UY/stream.md            |   2 +-
 src/docs/eo-UY/timelines.md         |   4 +-
 src/docs/id-ID/create-plugin.md     |   2 +-
 22 files changed, 930 insertions(+), 643 deletions(-)

diff --git a/locales/ar-SA.yml b/locales/ar-SA.yml
index 6b1f53caeb..3de8ac764e 100644
--- a/locales/ar-SA.yml
+++ b/locales/ar-SA.yml
@@ -427,9 +427,13 @@ inUse: "مستخدم"
 info: "عن"
 user: "المستخدمون"
 administration: "إدارة "
+postToGallery: "انشر في المعرض"
+gallery: "المعرض"
 expiration: "ينتهي استطلاع الرأي في"
 middle: "متوسط"
 global: "الشامل"
+_docs:
+  admin: "إدارة "
 _email:
   _follow:
     title: "يتابعك"
diff --git a/locales/de-DE.yml b/locales/de-DE.yml
index 751290441e..c9cff1fec1 100644
--- a/locales/de-DE.yml
+++ b/locales/de-DE.yml
@@ -1,7 +1,7 @@
 ---
 _lang_: "Deutsch"
-headlineMisskey: "Durch Notizen verbundenes Netzwerk"
-introMisskey: "Willkommen! Misskey ist eine dezentralisierte Open-Source Microblogging-Platform.\nVerfasse \"Notizen\" um mitzuteilen, was gerade passiert oder um Ereignisse mit Anderen zu teilen. 📡\nMit \"Reaktionen\" kannst du außerdem schnell deine Gefühle über Notizen anderer Benutzer zum Ausdruck bringen. 👍\nLass uns eine neue Welt erforschen! 🚀"
+headlineMisskey: "Ein durch Notizen verbundenes Netzwerk"
+introMisskey: "Willkommen! Misskey ist eine dezentralisierte Open-Source Microblogging-Platform.\nVerfasse \"Notizen\" um mitzuteilen, was gerade passiert oder um Ereignisse mit Anderen zu teilen. 📡\nMit \"Reaktionen\" kannst du außerdem schnell deine Gefühle über Notizen anderer Benutzer zum Ausdruck bringen. 👍\nErforsche eine neue Welt! 🚀"
 monthAndDay: "{day}/{month}"
 search: "Suchen"
 notifications: "Benachrichtigungen"
@@ -19,16 +19,16 @@ noNotifications: "Keine Benachrichtigungen"
 instance: "Instanz"
 settings: "Einstellungen"
 basicSettings: "Allgemeine Einstellungen"
-otherSettings: "Andere Einstellungen"
+otherSettings: "Weitere Einstellungen"
 openInWindow: "In Fenster öffnen"
 profile: "Profil"
 timeline: "Chronik"
 noAccountDescription: "Dieser Nutzer hat seine Profilbeschreibung noch nicht ausgefüllt."
-login: "Einloggen"
-loggingIn: "Du wirst eingeloggt..."
-logout: "Ausloggen"
+login: "Anmelden"
+loggingIn: "Du wirst angemeldet..."
+logout: "Abmelden"
 signup: "Registrieren"
-uploading: "Upload läuft"
+uploading: "Wird hochgeladen..."
 save: "Speichern"
 users: "Benutzer"
 addUser: "Benutzer hinzufügen"
@@ -47,28 +47,28 @@ deleteAndEdit: "Löschen und Bearbeiten"
 deleteAndEditConfirm: "Möchtest du diese Notiz wirklich löschen und bearbeiten? Alle Reaktionen, Renotes und Antworten dieser Notiz werden verloren gehen."
 addToList: "Zu Liste hinzufügen"
 sendMessage: "Nachricht senden"
-copyUsername: "Benutzernamen kopieren"
-searchUser: "Benutzersuche"
+copyUsername: "Benutzername kopieren"
+searchUser: "Nach einem Benutzer suchen"
 reply: "Antworten"
-loadMore: "Mehr anzeigen"
+loadMore: "Mehr laden"
 showMore: "Mehr anzeigen"
-youGotNewFollower: "Du hast einen neuen Follower"
+youGotNewFollower: "ist dir gefolgt"
 receiveFollowRequest: "Follow-Anfrage erhalten"
 followRequestAccepted: "Follow-Anfrage akzeptiert"
 mention: "Erwähnung"
 mentions: "Erwähnungen"
 directNotes: "Direktnachrichten"
-importAndExport: "Importieren und Exportieren"
-import: "Importieren"
-export: "Exportieren"
+importAndExport: "Import und Export"
+import: "Import"
+export: "Export"
 files: "Dateien"
 download: "Herunterladen"
-driveFileDeleteConfirm: "Möchtest du die Datei \"{name}\" löschen? Die zugehörige Notiz wird ebenso verschwinden."
+driveFileDeleteConfirm: "Möchtest du die Datei \"{name}\" wirklich löschen? Die zugehörige Notiz wird ebenso verschwinden."
 unfollowConfirm: "Möchtest du {name} nicht mehr folgen?"
 exportRequested: "Du hast einen Export angefragt. Dies kann etwas Zeit in Anspruch nehmen. Sobald der Export abgeschlossen ist, wird er deiner Drive hinzugefügt."
 importRequested: "Du hast einen Import angefragt. Dies kann etwas Zeit in Anspruch nehmen."
 lists: "Listen"
-noLists: "Du hast keine Listen"
+noLists: "Keine Listen"
 note: "Notiz"
 notes: "Notizen"
 following: "Folgt"
@@ -80,8 +80,8 @@ error: "Fehler"
 somethingHappened: "Ein Fehler ist aufgetreten"
 retry: "Wiederholen"
 pageLoadError: "Laden der Seite fehlgeschlagen."
-pageLoadErrorDescription: "Dieser Fehler wird meist durch Netzwerkfehler oder den Browser-Cache verursacht. Versuche den Browser-Cache zu leeren und es nach kurzer Zeit noch einmal zu probieren."
-enterListName: "Listennamen eingeben"
+pageLoadErrorDescription: "Dieser Fehler wird meist durch Netzwerkfehler oder den Browser-Cache verursacht. Versuche bitte den Browser-Cache zu leeren und es nach kurzer Zeit noch einmal zu probieren."
+enterListName: "Name der Liste eingeben"
 privacy: "Privatsphäre"
 makeFollowManuallyApprove: "Follow-Anfragen benötigen Bestätigung"
 defaultNoteVisibility: "Standardsichtbarkeit"
@@ -89,7 +89,7 @@ follow: "Folgen"
 followRequest: "Follow-Anfrage"
 followRequests: "Follow-Anfragen"
 unfollow: "Nicht mehr folgen"
-followRequestPending: "Ausstehende Follow-Anfrage"
+followRequestPending: "Follow-Anfrage ausstehend"
 enterEmoji: "Gib ein Emoji ein"
 renote: "Renote"
 unrenote: "Renote zurücknehmen"
@@ -97,19 +97,19 @@ renoted: "Renote getätigt."
 cantRenote: "Renote dieses Beitrags nicht möglich."
 cantReRenote: "Renote einer Renote nicht möglich."
 quote: "Zitieren"
-pinnedNote: "Angepinnte Notiz"
-pinned: "Anheften"
+pinnedNote: "Angeheftete Notiz"
+pinned: "Angeheftet"
 you: "Du"
-clickToShow: "Klicke, um diesen Inhalt anzusehen"
+clickToShow: "Zum Anzeigen anklicken"
 sensitive: "NSFW"
 add: "Hinzufügen"
 reaction: "Reaktionen"
-reactionSettingDescription: "Gib deine Lieblingsreaktionen ein, um sie der Reaktionsauswahl hinzuzufügen."
+reactionSettingDescription: "Wähle die Reaktionen aus, die in der Reaktionsauswahl angezeigt werden sollen."
 reactionSettingDescription2: "Ziehe zum Anordnen, Klicke zum Löschen,  Drücke \"+\" zum Hinzufügen"
 rememberNoteVisibility: "Notizsichtbarkeit merken"
 attachCancel: "Anhang entfernen"
 markAsSensitive: "Als NSFW markieren"
-unmarkAsSensitive: "Markierung als NSFW zurücknehmen"
+unmarkAsSensitive: "NSFW-Markierung entfernen"
 enterFileName: "Dateinamen eingeben"
 mute: "Stummschalten"
 unmute: "Stummschaltung aufheben"
@@ -120,27 +120,27 @@ unsuspend: "Sperrung aufheben"
 blockConfirm: "Möchtest du diesen Benutzer wirklich blockieren?"
 unblockConfirm: "Möchtest du diese Blockierung wirklich aufheben?"
 suspendConfirm: "Möchtest du diesen Benutzer wirklich sperren?"
-unsuspendConfirm: "Möchtest du die Sperrung dieses Benutzers wirklich aufheben?"
-selectList: "Wähle eine Liste aus"
+unsuspendConfirm: "Möchtest du diesen Benutzer wirklich entsperren?"
+selectList: "Liste auswählen"
 selectAntenna: "Antenne auswählen"
 selectWidget: "Widget auswählen"
 editWidgets: "Widgets bearbeiten"
 editWidgetsExit: "Fertig"
 customEmojis: "Benutzerdefinierte Emojis"
-emoji: "Emoji"
+emoji: "Emojis"
 emojiName: "Emojiname"
 emojiUrl: "Emoji-URL"
 addEmoji: "Emoji hinzufügen"
 settingGuide: "Empfohlene Einstellung"
-cacheRemoteFiles: "Dateien von anderen Instanzen im Cache speichern"
-cacheRemoteFilesDescription: "Wenn diese Einstellung deaktiviert ist, werden Dateien anderer Instanzen direkt von dort geladen. Hierdurch wird Speicherplatz gespart, aber mehr Bandbreite verbraucht, da keine Vorschaubilder generiert werden."
+cacheRemoteFiles: "Dateien von fremden Instanzen im Cache speichern"
+cacheRemoteFilesDescription: "Ist diese Einstellung deaktiviert, so werden Dateien fremder Instanzen direkt von dort geladen. Hierdurch wird Speicherplatz auf dem Server gespart, aber durch fehlende Generierung von Vorschaubildern mehr Bandbreite verwendet."
 flagAsBot: "Als Bot markieren"
-flagAsBotDescription: "Wenn dieses Benutzerkonto durch ein Programm gesteuert wird, setze diesen Haken. Falls aktiviert, agiert es als Flag für andere Entwickler um endlose Kettenreaktionen mit anderen Bots zu verhindern und lässt Misskey's interne Systeme dieses Benutzerkonto als Bot behandeln."
+flagAsBotDescription: "Aktiviere diese Option, falls dieses Benutzerkonto durch ein Programm gesteuert wird. Falls aktiviert, agiert es als Flag für andere Entwickler zur Verhinderung von endlosen Kettenreaktionen mit anderen Bots und lässt Misskey's interne Systeme dieses Benutzerkonto als Bot behandeln."
 flagAsCat: "Als Katze markieren"
-flagAsCatDescription: "Setze diese Flag um dieses Benutzerkonto als Katze zu markieren."
-autoAcceptFollowed: "Follow-Anfragen automatisch akzeptieren"
+flagAsCatDescription: "Aktiviere diese Option, um dieses Benutzerkonto als Katze zu markieren."
+autoAcceptFollowed: "Follow-Anfragen von Benutzern, denen du folgst, automatisch akzeptieren"
 addAccount: "Benutzerkonto hinzufügen"
-loginFailed: "Login fehlgeschlagen"
+loginFailed: "Anmeldung fehlgeschlagen"
 showOnRemote: "Auf Ursprungsinstanz ansehen"
 general: "Allgemein"
 wallpaper: "Hintergrund"
@@ -152,16 +152,16 @@ followConfirm: "Möchtest du {name} wirklich folgen?"
 proxyAccount: "Proxy-Benutzerkonto"
 proxyAccountDescription: "Ein Proxy-Benutzerkonto ist ein Benutzerkonto, das sich für Nutzer unter bestimmten Konditionen wie ein Follower aus einer fremden Instanz verhält. Zum Beispiel wird die Aktivität eines Nutzers aus einer fremden Instanz nicht an diese Instanz übermittelt, falls es keinen Benutzer dieser Instanz gibt, der diesem Nutzer aus fremder Instanz folgt. In diesem Fall folgt stattdessen das Proxy-Benutzerkonto."
 host: "Host"
-selectUser: "Benutzer wählen"
+selectUser: "Benutzer auswählen"
 recipient: "Empfänger"
 annotation: "Anmerkung"
 federation: "Föderation"
-instances: "Instanz"
+instances: "Instanzen"
 registeredAt: "Registriert am"
 latestRequestSentAt: "Letzte Anfrage gesendet am"
 latestRequestReceivedAt: "Letzte Anfrage erhalten am"
-latestStatus: "Neuester Status"
-storageUsage: "Speicherplatzverbrauch"
+latestStatus: "Neuster Status"
+storageUsage: "Verbrauchter Speicherplatz"
 charts: "Diagramme"
 perHour: "Pro Stunde"
 perDay: "Pro Tag"
@@ -181,39 +181,39 @@ instanceInfo: "Instanzinformationen"
 statistics: "Statistiken"
 clearQueue: "Warteschlange leeren"
 clearQueueConfirmTitle: "Möchtest du die Warteschlange wirklich leeren?"
-clearQueueConfirmText: "Jegliche Notizen, die sich noch in der Warteschlange befinden, werden hierdurch nicht föderiert. Diese Aktion wird normalerweise NICHT benötigt."
+clearQueueConfirmText: "Hierdurch werden jegliche noch nicht gesendete Notizen nicht förderiert. Normalerweise wird dies nicht benötigt."
 clearCachedFiles: "Cache leeren"
 clearCachedFilesConfirm: "Sollen alle im Cache gespeicherten Dateien von anderen Instanzen wirklich gelöscht werden?"
 blockedInstances: "Blockierte Instanzen"
-blockedInstancesDescription: "Gib den Hostnamen der Instanz an, die blockiert werden soll. Blockierte Instanzen können nicht mehr mit dieser kommunizieren."
-muteAndBlock: "Stummschaltungen / Blockierungen"
+blockedInstancesDescription: "Gib die Hostnamen der Instanzen, welche blockiert werden sollen, durch Zeilenumbrüche getrennt an. Blockierte Instanzen können mit dieser instanz nicht mehr kommunizieren."
+muteAndBlock: "Stummschaltungen und Blockierungen"
 mutedUsers: "Stummgeschaltete Benutzer"
 blockedUsers: "Blockierte Benutzer"
 noUsers: "Keine Benutzer"
 editProfile: "Profil bearbeiten"
 noteDeleteConfirm: "Möchtest du diese Notiz wirklich löschen?"
-pinLimitExceeded: "Du kannst nicht noch mehr Notizen anpinnen."
+pinLimitExceeded: "Es können nicht noch mehr Notizen angeheftet werden"
 intro: "Misskey Installation abgeschlossen! Lass uns nun ein Administratorkonto erstellen."
 done: "Fertig"
-processing: "In Bearbeitung"
+processing: "In Bearbeitung..."
 preview: "Vorschau"
 default: "Standard"
-noCustomEmojis: "Es existieren keine Emojis"
+noCustomEmojis: "Keine benutzerdefinierten Emojis vorhanden"
 noJobs: "Es gibt keine Jobs"
-federating: "Föderiert"
+federating: "Wird föderiert"
 blocked: "Blockiert"
 suspended: "Gesperrt"
 all: "Alles"
-subscribing: "Abonnieren"
-publishing: "Veröffentlichen"
+subscribing: "Wird abonniert"
+publishing: "Wird veröffentlicht"
 notResponding: "Antwortet nicht"
 instanceFollowing: "Gefolgt auf der Instanz"
 instanceFollowers: "Follower der Instanz"
-instanceUsers: "Benutzer dieser Instanz"
+instanceUsers: "Benutzer der Instanz"
 changePassword: "Passwort ändern"
 security: "Sicherheit"
-retypedNotMatch: "Eingaben stimmen nicht überein."
-currentPassword: "Momentanes Passwort"
+retypedNotMatch: "Beide Eingaben stimmen nicht überein."
+currentPassword: "Aktuelles Passwort"
 newPassword: "Neues Passwort"
 newPasswordRetype: "Neues Passwort (wiederholen)"
 attachFile: "Datei anhängen"
@@ -221,12 +221,12 @@ more: "Mehr!"
 featured: "Beliebt"
 usernameOrUserId: "Benutzername oder Benutzer-ID"
 noSuchUser: "Benutzer nicht gefunden"
-lookup: "Abfragen"
+lookup: "Anfragen"
 announcements: "Ankündigungen"
 imageUrl: "Bild-URL"
 remove: "Löschen"
 removed: "Erfolgreich gelöscht"
-removeAreYouSure: "Möchtest du \"{x}\" wirklich löschen?"
+removeAreYouSure: "Möchtest du \"{x}\" wirklich entfernen?"
 deleteAreYouSure: "Möchtest du \"{x}\" wirklich löschen?"
 resetAreYouSure: "Wirklich zurücksetzen?"
 saved: "Gespeichert"
@@ -237,18 +237,18 @@ fromUrl: "Von einer URL"
 uploadFromUrl: "Von einer URL hochladen"
 uploadFromUrlDescription: "URL der hochzuladenden Datei"
 uploadFromUrlRequested: "Upload angefordert"
-uploadFromUrlMayTakeTime: "Es kann eine Weile dauern, bis der Upload abgeschlossen ist."
+uploadFromUrlMayTakeTime: "Es kann eine Weile dauern, bis das Hochladen abgeschlossen ist."
 explore: "Erkunden"
 games: "Misskey Spiele"
 messageRead: "Gelesen"
 noMoreHistory: "Kein weiterer Verlauf vorhanden"
 startMessaging: "Neuen Chat erstellen"
-nUsersRead: "Von {n} gelesen"
+nUsersRead: "Von {n} Benutzern gelesen"
 agreeTo: "Ich stimme {0} zu"
 tos: "Nutzungsbedingungen"
 start: "Anfangen"
 home: "Startseite"
-remoteUserCaution: "Diese Informationen sind möglicherweise veraltet, da der Benutzer von einer anderen Instanz stammt."
+remoteUserCaution: "Diese Informationen sind möglicherweise unvollständig, da der Benutzer von einer fremden Instanz stammt."
 activity: "Aktivität"
 images: "Bilder"
 birthday: "Geburtstag"
@@ -267,16 +267,16 @@ drive: "Drive"
 fileName: "Dateiname"
 selectFile: "Datei auswählen"
 selectFiles: "Dateien auswählen"
-selectFolder: "Wähle einen Ordner"
-selectFolders: "Wähle Ordner"
+selectFolder: "Ordner auswählen"
+selectFolders: "Ordner auswählen"
 renameFile: "Datei umbenennen"
 folderName: "Ordnername"
 createFolder: "Ordner erstellen"
 renameFolder: "Ordner umbenennen"
 deleteFolder: "Ordner löschen"
 addFile: "Datei hinzufügen"
-emptyDrive: "Drive ist leer"
-emptyFolder: "Der Ordner ist leer"
+emptyDrive: "Deine Drive ist leer"
+emptyFolder: "Dieser Ordner ist leer"
 unableToDelete: "Nicht löschbar"
 inputNewFileName: "Gib einen neuen Dateinamen ein"
 inputNewDescription: "Gib eine neue Beschreibung ein"
@@ -300,8 +300,8 @@ reject: "Ablehnen"
 normal: "Normal"
 instanceName: "Name der Instanz"
 instanceDescription: "Beschreibung der Instanz"
-maintainerName: "Administrator"
-maintainerEmail: "Administrator-Email"
+maintainerName: "Betreiber"
+maintainerEmail: "Betreiber-Email"
 tosUrl: "URL der Nutzungsbedingungen"
 thisYear: "Dieses Jahr"
 thisMonth: "Dieser Monat"
@@ -319,21 +319,21 @@ disablingTimelinesInfo: "Administratoren und Moderatoren haben immer Zugriff auf
 registration: "Registrieren"
 enableRegistration: "Registration neuer Benutzer erlauben"
 invite: "Einladen"
-proxyRemoteFiles: "Dateien anderer Instanzen durch Proxy leiten"
-proxyRemoteFilesDescription: "Wenn diese Einstellung aktiviert ist, dann werden Dateien von anderen Instanzen, welche entweder nicht lokal gespeichert sind oder durch Überschreiten des Speicherlimits gelöscht wurden, durch einen Proxy geleitet. Hierbei wird auch ein Vorschaubild generiert. \n Dies hat keinen Effekt auf den Speicherplatz des Servers."
+proxyRemoteFiles: "Dateien fremder Instanzen durch Proxy leiten"
+proxyRemoteFilesDescription: "Wenn diese Einstellung aktiviert ist, dann werden Dateien von fremdem Instanzen, welche entweder nicht lokal gespeichert sind oder durch Überschreiten des Speicherlimits gelöscht wurden, durch einen Proxy geleitet. Hierbei wird auch ein Vorschaubild generiert. \n Dies hat keinen Effekt auf den Speicherplatz des Servers."
 driveCapacityPerLocalAccount: "Drive-Kapazität pro lokales Benutzerkonto"
-driveCapacityPerRemoteAccount: "Drive-Kapazität pro Benutzer anderer Instanzen"
+driveCapacityPerRemoteAccount: "Drive-Kapazität pro Benutzer fremder Instanzen"
 inMb: "In Megabytes"
-iconUrl: "Icon-URL"
+iconUrl: "Icon-URL (favicon etc)"
 bannerUrl: "Banner-URL"
 backgroundImageUrl: "Hintergrundbild-URL"
 basicInfo: "Basisdaten"
-pinnedUsers: "Angepinnte Benutzer"
-pinnedUsersDescription: "Gib einen Benutzernamen pro Zeile ein. Diese werden im \"Erkunden\" Tab angezeigt."
-pinnedPages: "Angepinnte Seiten"
-pinnedPagesDescription: "Gib hier die Pfäde zu den Seiten an, die du an die Spitze dieser Instanz anheften möchtest, getrennt durch neue Zeilen."
+pinnedUsers: "Angeheftete Benutzer"
+pinnedUsersDescription: "Gib durch Leerzeichen getrennte Benutzer an, die an die \"Erkunden\"-Seite angeheftet werden sollen."
+pinnedPages: "Angeheftete Seiten"
+pinnedPagesDescription: "Gib durch Leerzeilen getrennte Pfäde zu Seiten an, die du an die Startseite dieser Instanz anheften möchtest.\n"
 pinnedClipId: "ID des angehefteten Clips"
-pinnedNotes: "Angepinnte Notizen"
+pinnedNotes: "Angeheftete Notizen"
 hcaptcha: "hCaptcha"
 enableHcaptcha: "hCaptcha aktivieren"
 hcaptchaSiteKey: "Site key"
@@ -342,14 +342,14 @@ recaptcha: "reCAPTCHA"
 enableRecaptcha: "reCAPTCHA aktivieren"
 recaptchaSiteKey: "Site key"
 recaptchaSecretKey: "Secret key"
-avoidMultiCaptchaConfirm: "Das Verwenden von mehreren Captcha-Systemen kann zu Störungen führen. Möchtest du die anderen Systeme deaktivieren? Du kannst mehrere aktiviert lassen, in dem du auf Abbrechen drückst."
+avoidMultiCaptchaConfirm: "Das Verwenden von mehreren Captcha-Systemen kann zu Störungen führen. Möchtest du die anderen Systeme deaktivieren? Du kannst mehrere Systeme aktiviert lassen, in dem du auf Abbrechen drückst."
 antennas: "Antennen"
 manageAntennas: "Antennen verwalten"
 name: "Name"
 antennaSource: "Antennenquelle"
-antennaKeywords: "Schlüsselwörter, die beobachtet werden sollen"
-antennaExcludeKeywords: "Schlüsselwörter, die ignoriert werden sollen"
-antennaKeywordsDescription: "Mit Leerzeichen für eine \"UND\"-Verknüpfung trennen, durch Zeilenumbrüche für eine \"ODER\"-Verknüpfung trennen."
+antennaKeywords: "Zu beobachtende Schlüsselwörter"
+antennaExcludeKeywords: "Zu ignorierende Schlüsselwörter"
+antennaKeywordsDescription: "Mit Leerzeichen für eine \"UND\"-Verknüpfung trennen, durch Zeilenumbrüche für eine \"ODER\"-Verknüpfung trennen"
 notifyAntenna: "Ãœber neue Notizen benachrichtigen"
 withFileAntenna: "Nur Notizen mit Dateien"
 enableServiceworker: "ServiceWorker aktivieren"
@@ -394,7 +394,7 @@ uploadFolder: "Standardordner für Uploads"
 cacheClear: "Cache leeren"
 markAsReadAllNotifications: "Alle Benachrichtigungen als gelesen markieren"
 markAsReadAllUnreadNotes: "Alle Notizen als gelesen markieren"
-markAsReadAllTalkMessages: "Alle Nachrichten als gelesen markieren"
+markAsReadAllTalkMessages: "Alle Chats als gelesen markieren"
 help: "Hilfe"
 inputMessageHere: "Hier Nachricht eingeben"
 close: "Schließen"
@@ -428,11 +428,11 @@ invitationCode: "Einladungscode"
 checking: "Wird überprüft..."
 available: "Verfügbar"
 unavailable: "Unverfügbar"
-usernameInvalidFormat: "Buchstaben, Zahlen und Unterstriche sind verwendbar."
+usernameInvalidFormat: "Klein- und Großbuchstaben, Zahlen sowie Unterstriche sind verwendbar."
 tooShort: "Zu kurz"
 tooLong: "Zu lang"
 weakPassword: "Schwaches Passwort"
-normalPassword: "Standardpasswort"
+normalPassword: "Normales Passwort"
 strongPassword: "Starkes Passwort"
 passwordMatched: "Stimmt überein"
 passwordNotMatched: "Stimmt nicht überein"
@@ -450,7 +450,7 @@ joinOrCreateGroup: "Lass dich zu einer Gruppe einladen oder erstelle deine eigen
 noHistory: "Kein Verlauf"
 signinHistory: "Anmeldungsverlauf"
 disableAnimatedMfm: "MFM, die Animationen enthalten, deaktivieren"
-doing: "In Bearbeitung"
+doing: "In Bearbeitung..."
 category: "Kategorie"
 tags: "Schlagwörter"
 docSource: "Quelle dieses Dokuments"
@@ -458,14 +458,14 @@ createAccount: "Benutzerkonto erstellen"
 existingAccount: "Bestehendes Benutzerkonto"
 regenerate: "Regenerieren"
 fontSize: "Schriftgröße"
-noFollowRequests: "Du hast keine Follow-Anfragen"
+noFollowRequests: "Du hast keine ausstehende Follow-Anfragen"
 openImageInNewTab: "Bilder in neuem Tab öffnen"
 dashboard: "Dashboard"
 local: "Lokal"
 remote: "Fremd"
 total: "Gesamt"
-weekOverWeekChanges: "Wöchentlich"
-dayOverDayChanges: "Täglich"
+weekOverWeekChanges: "Veränderung zu letzter Woche"
+dayOverDayChanges: "Veränderung zu Gestern"
 appearance: "Aussehen"
 clientSettings: "Client-Einstellungen"
 accountSettings: "Benutzerkonto-Einstellungen"
@@ -477,19 +477,19 @@ showFeaturedNotesInTimeline: "Beliebte Notizen in Chronik anzeigen"
 objectStorage: "Objektspeicher"
 useObjectStorage: "Objektspeicher verwenden"
 objectStorageBaseUrl: "Basis-URL"
-objectStorageBaseUrlDesc: "URL-Prefix, der zum Konstruieren der Objekt- bzw. Mediareferenz-URL genutzt wird. Falls du ein CDN- oder einen Proxy nutzt, gib dessen URL ein. Ansonsten gib die Adresse, der dir von deinem Anbieter z.B. in dessen Servicehandbuch gegeben wurde, an. Beispielsweise 'https://<bucket>.s3.amazonaws.com' für AWS S3 oder 'https://storage.googleapis.com/<bucket>' für GCS."
+objectStorageBaseUrlDesc: "Als Referenz verwendete URL. Verwendest du einen CDN oder Proxy, gib dessen URL an. S3: 'https://<bucket>.s3.amazonaws.com', GCS: 'https://storage.googleapis.com/<bucket>' etc."
 objectStorageBucket: "Bucket"
 objectStorageBucketDesc: "Bitte gib den Bucket-Namen an, der bei deinem Anbieter verwendet wird."
 objectStoragePrefix: "Prefix"
-objectStoragePrefixDesc: "Dateien werden im Ordner dieses Prefixes gespeichert."
+objectStoragePrefixDesc: "Dateien werden in Ordnern unter diesem Prefix gespeichert."
 objectStorageEndpoint: "Endpoint"
-objectStorageEndpointDesc: "Dieses Feld leerlassen, falls du AWS S3 verwendest. Ansonsten trage den Endpoint im Format \"<host>\" oder \"<host>:<port>\" an, den Angaben deines Anbieters entsprechend."
+objectStorageEndpointDesc: "Im Falle von S3 leerlassen, für andere Anbieter den relevanten Endpoint im Format \"<host>\" oder \"<host>:<port>\" angeben."
 objectStorageRegion: "Region"
-objectStorageRegionDesc: "Gib eine Region (wie z.B. \"xx-east-1\") an. Falls dein Anbieter nicht zwischen Regionen unterscheidet, lass dieses Feld leer oder gib \"us-east-1\" an."
+objectStorageRegionDesc: "Gib eine Region wie z.B. \"xx-east-1\" an. Falls dein Anbieter nicht zwischen Regionen unterscheidet, lass dieses Feld leer oder gib \"us-east-1\" an."
 objectStorageUseSSL: "SSL verwenden"
-objectStorageUseSSLDesc: "Deaktiviere dies falls du für die API-Verbindungen kein HTTPS verwenden wirst"
+objectStorageUseSSLDesc: "Deaktiviere dies, falls du für die API-Verbindungen kein HTTPS verwenden wirst"
 objectStorageUseProxy: "Ãœber Proxy verbinden"
-objectStorageUseProxyDesc: "Deaktiviere dies falls du keinen Proxy für den Objektspeicher verwenden wirst"
+objectStorageUseProxyDesc: "Deaktiviere dies, falls du keinen Proxy für den Objektspeicher verwenden wirst"
 objectStorageSetPublicRead: "Bei Upload auf \"public-read\" stellen"
 serverLogs: "Serverprotokolle"
 deleteAll: "Alle löschen"
@@ -503,29 +503,29 @@ popout: "Pop-Up"
 volume: "Lautstärke"
 masterVolume: "Gesamtlautstärke"
 details: "Details"
-chooseEmoji: "Wähle ein Emoji"
-unableToProcess: "Der Vorgang konnte nicht abgeschlossen werden."
+chooseEmoji: "Emoji auswählen"
+unableToProcess: "Der Vorgang konnte nicht abgeschlossen werden"
 recentUsed: "Vor kurzem verwendet"
 install: "Installieren"
 uninstall: "Uninstallieren"
 installedApps: "Authorisierte Anwendungen"
 nothing: "Hier gibt es nichts zu sehen"
-installedDate: "Authorisiert"
-lastUsedDate: "Zuletzt verwendet"
+installedDate: "Authorisiert am"
+lastUsedDate: "Zuletzt verwendet am"
 state: "Status"
 sort: "Sortieren"
 ascendingOrder: "Aufsteigende Reihenfolge"
 descendingOrder: "Absteigende Reihenfolge"
 scratchpad: "Testumgebung"
-scratchpadDescription: "Die Testumgebung bietet eine experimentale Umgebung für AiScript. Dort kannst du AiScript schreiben, ausführen sowie dessen Auswirkungen auf Misskey überprüfen."
+scratchpadDescription: "Die Testumgebung bietet eine Umgebung für AiScript-Experimente. Dort kannst du AiScript schreiben, ausführen sowie dessen Auswirkungen auf Misskey überprüfen."
 output: "Ausgabe"
 script: "Skript"
 disablePagesScript: "AiScript auf Seiten deaktivieren"
-updateRemoteUser: "Informationen über den Benutzer der fremder Instanz aktualisieren"
+updateRemoteUser: "Informationen über Benutzer fremder Instanzen aktualisieren"
 deleteAllFiles: "Alle Dateien löschen"
 deleteAllFilesConfirm: "Möchtest du wirklich alle Dateien löschen?"
 removeAllFollowing: "Allen gefolgten Benutzern entfolgen"
-removeAllFollowingDescription: "Allen Benutzerkonten von {host} entfolgen. Bitte führe dies durch, falls diese Instanz nicht mehr existiert."
+removeAllFollowingDescription: "Dies entfolgt allen Benutzerkonten von {host}. Bitte führe dies durch, falls diese Instanz z.B. nicht mehr existiert."
 userSuspended: "Dieser Benutzer wurde gesperrt."
 userSilenced: "Dieser Benutzer wurde instanzweit stummgeschaltet."
 menu: "Menü"
@@ -542,7 +542,7 @@ invisibleNote: "Private Notiz"
 enableInfiniteScroll: "Automatisch mehr Notizen laden"
 visibility: "Sichtbarkeit"
 poll: "Umfrage"
-useCw: "Inhalt verdecken"
+useCw: "Inhalt verbergen"
 enablePlayer: "Video-Player öffnen"
 disablePlayer: "Video-Player schließen"
 expandTweet: "Tweet ausklappen"
@@ -557,7 +557,7 @@ plugins: "Plugins"
 deck: "Deck"
 undeck: "Deck verlassen"
 useBlurEffectForModal: "Weichzeichnungseffekt für Modals verwenden"
-useFullReactionPicker: "Vollständige Reaktionsauswahl nutzen"
+useFullReactionPicker: "Vollständige Reaktionsauswahl verwenden"
 width: "Breite"
 height: "Höhe"
 large: "Groß"
@@ -567,14 +567,14 @@ generateAccessToken: "Zugriffstoken generieren"
 permission: "Berechtigungen"
 enableAll: "Alle aktivieren"
 disableAll: "Alle deaktivieren"
-tokenRequested: "Benutzerkontozugriff gewähren"
+tokenRequested: "Zugriff zum Benutzerkonto gewähren"
 pluginTokenRequestedDescription: "Dieses Plugin wird die hier konfigurierten Berechtigungen verwenden können."
-notificationType: "Benachrichtigungsart"
+notificationType: "Art der Benachrichtigung"
 edit: "Bearbeiten"
 useStarForReactionFallback: "Verwende ★ falls das Reaktions-Emoji unbekannt ist"
 emailServer: "Email-Server"
 enableEmail: "Email-Versand aktivieren"
-emailConfigInfo: "Zur Email-Bestätigung bei Registrierung und zum Zurücksetzen des Passworts verwendet"
+emailConfigInfo: "Zur Email-Bestätigung bei Registrierung oder zum Zurücksetzen des Passworts verwendet"
 email: "Email"
 emailAddress: "Email-Adresse"
 smtpConfig: "SMTP-Server Konfiguration"
@@ -587,9 +587,9 @@ smtpSecure: "Für SMTP-Verbindungen implizit SSL/TLS verwenden"
 smtpSecureInfo: "Schalte dies aus, falls du STARTTLS verwendest"
 testEmail: "Email-Versand testen"
 wordMute: "Wort-Stummschaltung"
-userSaysSomething: "{name} hat etwas gesagt."
+userSaysSomething: "{name} hat etwas gesagt"
 makeActive: "Aktivieren"
-display: "Anzeige"
+display: "Anzeigeart"
 copy: "Kopieren"
 metrics: "Metriken"
 overview: "Ãœbersicht"
@@ -601,19 +601,19 @@ create: "Erstellen"
 notificationSetting: "Benachrichtigungseinstellungen"
 notificationSettingDesc: "Wähle die Art der anzuzeigenden Benachrichtigung"
 useGlobalSetting: "Globale Einstellung verwenden"
-useGlobalSettingDesc: "Wenn dies eingeschaltet ist, werden die Benachrichtigungseinstellungen deines Benutzerkontos verwendet. Wenn dies ausgeschaltet ist, können individuelle Einstellungen vorgenommen werden."
+useGlobalSettingDesc: "Ist dies eingeschaltet, so werden die Benachrichtigungseinstellungen deines Benutzerkontos verwendet. Wenn dies ausgeschaltet ist, können individuelle Einstellungen vorgenommen werden."
 other: "Andere"
-regenerateLoginToken: "Login-Token regenerieren"
-regenerateLoginTokenDescription: "Den bei Logins intern verwendeten Token regenerieren. Normalerweise wird dies nicht benötigt. Bei Regeneration werden alle Geräte ausgeloggt."
+regenerateLoginToken: "Anmeldungstoken regenerieren"
+regenerateLoginTokenDescription: "Den zur Anmeldung intern verwendeten Token regenerieren. Normalerweise wird dies nicht benötigt. Bei Regeneration werden alle Geräte ausgeloggt."
 setMultipleBySeparatingWithSpace: "Trenne Elemente durch ein Leerzeichen um mehrere Einstellungen zu kofigurieren."
 fileIdOrUrl: "Datei-ID oder URL"
 chatOpenBehavior: "Verhalten des Chatfensters bei Öffnung"
 behavior: "Verhalten"
 sample: "Beispiel"
-abuseReports: "Melden"
+abuseReports: "Meldungen"
 reportAbuse: "Melden"
 reportAbuseOf: "{name} melden"
-fillAbuseReportDescription: "Bitte gib Details für diese Meldung an. Falls es sich um eine spezielle Notiz handelt, bitte gib dessen URL an."
+fillAbuseReportDescription: "Bitte gib zusätzliche Informationen zu dieser Meldung an. Falls es sich um eine spezielle Notiz handelt, bitte gib dessen URL an."
 abuseReported: "Die Meldung wurde versendet. Vielen Dank."
 send: "Senden"
 abuseMarkAsResolved: "Meldung als gelöst markieren"
@@ -635,34 +635,34 @@ public: "Öffentlich"
 i18nInfo: "Misskey wird durch freiwillige Helfer in viele verschiedene Sprachen übersetzt. Auf {link} kannst du mithelfen."
 manageAccessTokens: "Zugriffstoken verwalten"
 accountInfo: "Benutzerkonto-Informationen"
-notesCount: "Anzahl von Notizen"
+notesCount: "Anzahl der Notizen"
 repliesCount: "Anzahl gesendeter Antworten"
-renotesCount: "Anzahl gesendeter Renotes"
+renotesCount: "Anzahl getätigter Renotes"
 repliedCount: "Anzahl erhaltener Antworten"
 renotedCount: "Anzahl erhaltener Renotes"
 followingCount: "Anzahl gefolgter Benutzer"
 followersCount: "Anzahl an Followern"
 sentReactionsCount: "Anzahl gesendeter Reaktionen"
 receivedReactionsCount: "Anzahl erhaltener Reaktionen"
-pollVotesCount: "Anzahl beantworteter Umfragen"
-pollVotedCount: "Anzahl erhaltener Umfrageantworten"
+pollVotesCount: "Anzahl gesendeter Antworten auf Umfragen"
+pollVotedCount: "Anzahl erhaltener Antworten auf Umfragen"
 yes: "Ja"
 no: "Nein"
-driveFilesCount: "Anzahl von Drive-Dateien"
+driveFilesCount: "Anzahl an Drive-Dateien"
 driveUsage: "Drive-Auslastung"
 noCrawle: "Crawler-Indexierung ablehnen"
 noCrawleDescription: "Suchmaschinen bitten, die eigene Profilseite, Notizen, Seiten usw. nicht zu indexieren"
 lockedAccountInfo: "Auch wenn du Follow-Anfragen auf manuelle Bestätigung setzt, wird jeder deine Notizen öffentlich sehen können, sofern du die Notizsichtbarkeit nicht auf \"Nur Follower\" setzt."
-alwaysMarkSensitive: "Immer als NSFW markieren"
-loadRawImages: "Anstatt Vorschaubild immer volles Bild laden"
+alwaysMarkSensitive: "Medien standardmäßig als NSFW markieren"
+loadRawImages: "Anstatt Vorschaubilder immer Originalbilder anzeigen"
 disableShowingAnimatedImages: "Animierte Bilder nicht abspielen"
 verificationEmailSent: "Eine Verifizierungsnachricht wurde versendet. Besuche den dort enthaltenen Link, um die Verifizierung abzuschließen."
 notSet: "Nicht konfiguriert"
 emailVerified: "Email-Adresse bestätigt"
-noteFavoritesCount: "Anzahl favorisierter Notizen"
-pageLikesCount: "Anzahl der Seiten, die mir gefallen"
+noteFavoritesCount: "Anzahl an als Favorit markierter Notizen"
+pageLikesCount: "Anzahl an als \"Gefällt mir\" markierter Seiten"
 pageLikedCount: "Anzahl erhaltener \"Gefällt mir\" auf Seiten"
-reversiCount: "Anzahl von Reversi-Runden"
+reversiCount: "Anzahl an Reversi-Runden"
 contact: "Kontakt"
 useSystemFont: "Standardschriftart des Systems verwenden"
 clips: "Clips"
@@ -683,11 +683,11 @@ onlineUsersCount: "{n} Benutzer sind online"
 nUsers: "{n} Benutzer"
 nNotes: "{n} Notizen"
 sendErrorReports: "Fehlerberichte senden"
-sendErrorReportsDescription: "Ist diese Option aktiviert, so werden beim Auftreten von Fehlern detaillierte Fehlerinformationen an Misskey weitergegeben, was zur Verbesserung der Qualität von Misskey beiträgt."
+sendErrorReportsDescription: "Ist diese Option aktiviert, so werden beim Auftreten von Fehlern detaillierte Fehlerinformationen an Misskey weitergegeben, was zur Verbesserung der Qualität von Misskey beiträgt.\nEnthalten in diesen Informationen sind u.a. die Version deines Betriebssystems, welchen Browser du verwendest und ein Verlauf deiner Aktivitäten."
 myTheme: "Mein Farbthema"
-backgroundColor: "Hintergrund"
+backgroundColor: "Hintergrundfarbe"
 accentColor: "Akzentfarbe"
-textColor: "Text"
+textColor: "Textfarbe"
 saveAs: "Speichern als…"
 advanced: "Fortgeschritten"
 value: "Wert"
@@ -707,7 +707,7 @@ capacity: "Kapazität"
 inUse: "Verwendet"
 editCode: "Code bearbeiten"
 apply: "Anwenden"
-receiveAnnouncementFromInstance: "E-Mail-Benachrichtigungen von dieser Instanz empfangen"
+receiveAnnouncementFromInstance: "Benachrichtigungen von dieser Instanz empfangen"
 emailNotification: "E-Mail-Benachrichtigungen"
 publish: "Veröffentlichen"
 inChannelSearch: "In Kanal suchen"
@@ -722,7 +722,7 @@ unlikeConfirm: "\"Gefällt mir\" wirklich entfernen?"
 fullView: "Vollansicht"
 quitFullView: "Vollansicht verlassen"
 addDescription: "Beschreibung hinzufügen"
-userPagePinTip: "Um Notizen hier erscheinen zu lassen, drücke \"Anpinnen\" im Menü individueller Notizen"
+userPagePinTip: "Um Notizen hier erscheinen zu lassen, drücke \"Anheften\" im Menü individueller Notizen."
 notSpecifiedMentionWarning: "Diese Notiz enthält Erwähnungen von Nutzern, die nicht als Empfänger ausgewählt sind"
 info: "Ãœber"
 userInfo: "Benutzerinformation"
@@ -744,7 +744,7 @@ user: "Benutzer"
 administration: "Verwaltung"
 accounts: "Benutzerkonten"
 switch: "Wechseln"
-noMaintainerInformationWarning: "Administratorinformationen sind nicht konfiguriert."
+noMaintainerInformationWarning: "Betreiberinformationen sind nicht konfiguriert."
 noBotProtectionWarning: "Bot-Schutz ist nicht konfiguriert."
 configure: "Konfigurieren"
 postToGallery: "Beitrag zu Galerie hinzufügen"
@@ -765,21 +765,32 @@ customCss: "Benutzerdefiniertes CSS"
 customCssWarn: "Verwende diese Einstellung nur, wenn du weißt, was sie tut. Ungültige Eingaben können dazu führen, dass der Client nicht mehr normal funktioniert."
 global: "Global"
 squareAvatars: "Profilbilder quadratisch anzeigen"
+sent: "Gesendet"
+received: "Erhalten"
+searchResult: "Suchergebnisse"
+hashtags: "Hashtags"
+troubleshooting: "Problembehandlung"
+_docs:
+  continueReading: "Mehr lesen"
+  features: "Funktionen"
+  generalTopics: "Allgemeine Themen"
+  advancedTopics: "Erweiterte Themen"
+  admin: "Administration"
 _ad:
   back: "Zurück"
   reduceFrequencyOfThisAd: "Diese Werbung weniger anzeigen"
 _forgotPassword:
   enterEmail: "Gib die Email-Adresse ein, mit der du dich registriert hast. An diese wird ein Link gesendet, mit der du dein Passwort zurücksetzen kannst."
   ifNoEmail: "Solltest du bei der Registrierung keine Email-Adresse angegeben haben, wende dich bitte an den Administrator."
-  contactAdmin: "Diese Instanz unterstützt die Verwendung von Email-Adressen nicht. Wende dich, um dein Passwort zurückzusetzen, an den Administrator."
+  contactAdmin: "Diese Instanz unterstützt die Verwendung von Email-Adressen nicht. Wende dich an den Administrator, um dein Passwort zurückzusetzen."
 _gallery:
   my: "Meine Galerie"
-  liked: "Beiträge, die mir gefallen"
+  liked: "Mit \"Gefällt mir\" markierte Beiträge"
   like: "Gefällt mir"
   unlike: "\"Gefällt mir\" entfernen"
 _email:
   _follow:
-    title: "Du hast einen neuen Follower"
+    title: "ist dir gefolgt"
   _receiveFollowRequest:
     title: "Du hast eine Follow-Anfrage erhalten"
 _plugin:
@@ -802,12 +813,12 @@ _aboutMisskey:
   morePatrons: "Wir schätzen ebenso die Unterstützung vieler anderer hier nicht gelisteter Personen sehr. Danke! 🥰"
   patrons: "UnterstützerInnen"
 _nsfw:
-  respect: "Als NSFW markierte Bilder verdecken"
-  ignore: "Als NSFW markierte Bilder nicht verdecken"
-  force: "Alle Medien verdecken"
+  respect: "Als NSFW markierte Bilder verbergen"
+  ignore: "Als NSFW markierte Bilder nicht verbergen"
+  force: "Alle Medien verbergen"
 _mfm:
   cheatSheet: "MFM Spickzettel"
-  intro: "MFM ist eine an vielen Stellen verwendbare und Misskey-exklusive Markup-Sprache. Hier kannst du eine Liste von verfügbarer MFM-Syntax anschauen."
+  intro: "MFM ist eine Misskey-exklusive Markup-Sprache, die in Misskey an vielen Stellen verwendet werden kann. Hier kannst du eine Liste von verfügbarer MFM-Syntax einsehen."
   dummy: "Misskey erweitert die Welt des Fediverse"
   mention: "Erwähnung"
   mentionDescription: "Mit At-Zeichen und Nutzername kann ein individueller Nutzer angegeben werden."
@@ -816,29 +827,29 @@ _mfm:
   url: "URL"
   urlDescription: "Zeigt URLs an."
   link: "Link"
-  linkDescription: "Ein spezifizierter Textabschnitt kann als URL angezeigt werden."
+  linkDescription: "Spezifische Textabschnitte als URL anzeigen."
   bold: "Fett"
   boldDescription: "Zeichen zur Betonung dicker erscheinen lassen."
   small: "Klein"
   smallDescription: "Inhalt klein und dünn erscheinen lassen."
   center: "Zentrieren"
-  centerDescription: "Inhalt zentriert anzeigen lassen."
+  centerDescription: "Inhalt zentriert anzeigen."
   inlineCode: "Code (Eingebettet)"
-  inlineCodeDescription: "Syntax-Hervorhebung für (Programm-)Code eingebettet anzeigen lassen."
+  inlineCodeDescription: "Syntax-Hervorhebung für (Programm-)Code eingebettet anzeigen."
   blockCode: "Code (Block)"
-  blockCodeDescription: "Syntax-Hervorhebung für mehrzeiligen (Programm-)Code als Block anzeigen lassen."
+  blockCodeDescription: "Syntax-Hervorhebung für mehrzeiligen (Programm-)Code als Block anzeigen."
   inlineMath: "Mathe (Eingebettet)"
   inlineMathDescription: "Mathematische Formeln (KaTeX) eingebettet anzeigen."
   blockMath: "Mathe (Block)"
   blockMathDescription: "Mehrzeilige mathematische Formeln (KaTeX) als Block einbetten."
   quote: "Zitationen"
-  quoteDescription: "Inhalt als Zitat anzeigen lassen."
+  quoteDescription: "Inhalt als Zitat anzeigen."
   emoji: "Benutzerdefinierte Emojis"
-  emojiDescription: "Emoji-Namen mit Doppelpunkten umschließen, um benutzerdefinierte Emojis anzeigen zu lassen."
+  emojiDescription: "Durch das Umschließen von Emoji-Namen durch Doppelpunkte können benutzerdefinierte Emojis angezeigt werden."
   search: "Suche"
-  searchDescription: "Eine vorgefertige Suchanfragebox anzeigen lassen."
+  searchDescription: "Eine vorgefertige Suchanfragebox anzeigen."
   flip: "Spiegelung"
-  flipDescription: "Inhalt horizontal oder vertikal gespiegelt anzeigen lassen."
+  flipDescription: "Inhalt horizontal oder vertikal gespiegelt anzeigen."
   jelly: "Animation (Dehnen)"
   jellyDescription: "Verleiht eine sich dehnende Animation."
   tada: "Animation (Tada)"
@@ -846,7 +857,7 @@ _mfm:
   jump: "Animation (Sprung)"
   jumpDescription: "Verleiht eine springende Animation."
   bounce: "Animation (Federn)"
-  bounceDescription: "Erzeugt eine federnde Animation."
+  bounceDescription: "Verleiht eine federnde Animation."
   shake: "Animation (Zittern)"
   shakeDescription: "Verleiht eine zitternde Animation."
   twitch: "Animation (Zucken)"
@@ -854,15 +865,17 @@ _mfm:
   spin: "Animation (Rotieren)"
   spinDescription: "Verleiht eine rotierende Animation."
   x2: "Groß"
-  x2Description: "Lässt Inhalte größer angezeigt werden."
+  x2Description: "Inhalte größer anzeigen."
   x3: "Sehr groß"
-  x3Description: "Lässt Inhalte noch größer angezeigt werden."
-  x4: "Am größten"
+  x3Description: "Inhalte noch größer anzeigen."
+  x4: "Unglaublich groß"
   x4Description: "Lässt Inhalte noch größer als größer als groß angezeigt werden."
-  blur: "Weichzeichner"
+  blur: "Weichzeichnen"
   blurDescription: "Inhalte durch Weihzeichnung verschwimmen lassen. Durch das Bewegen des Mauszeigers auf den Inhalt wird er klar angezeigt."
   font: "Schriftart"
   fontDescription: "Setzt die Schriftart des Inhaltes fest."
+  rainbow: "Regenbogen"
+  rainbowDescription: "Lässt den Inhalt in Regenbogenfarben erscheinen."
 _reversi:
   reversi: "Reversi"
   gameSettings: "Spieleinstellungen"
@@ -879,12 +892,12 @@ _reversi:
   cancelReady: "Nicht bereit"
   opponentTurn: "Zug deines Gegners"
   myTurn: "Dein Zug"
-  turnOf: "Zug von {name}"
+  turnOf: "{name} ist am Zug"
   pastTurnOf: "Zug von {name}"
   surrender: "Aufgeben"
-  surrendered: "durch Aufgabe"
+  surrendered: "Durch Aufgabe"
   drawn: "Unentschieden"
-  won: "{name} hat gesiegt"
+  won: "{name} gewinnt"
   black: "Schwarz"
   white: "Weiß"
   total: "Gesamt"
@@ -910,21 +923,21 @@ _channel:
   setBanner: "Kanalbanner festlegen"
   removeBanner: "Kanalbanner entfernen"
   featured: "Trends"
-  owned: "Besitzt"
+  owned: "In Besitz"
   following: "Gefolgt"
   usersCount: "{n} Teilnehmer"
   notesCount: "{n} Notizen"
 _menuDisplay:
-  sideFull: "Horizontal"
-  sideIcon: "Horizontal (Icons)"
+  sideFull: "Seitlich"
+  sideIcon: "Seitlich (Icons)"
   top: "Oben"
   hide: "Ausblenden"
 _wordMute:
-  muteWords: "Wort stummschalten"
+  muteWords: "Stummgeschaltete Wörter"
   muteWordsDescription: "Mit Leerzeichen für eine \"UND\"-Verknüpfung trennen, durch Zeilenumbrüche für eine \"ODER\"-Verknüpfung trennen."
   muteWordsDescription2: "Umgib Schlüsselworter mit Schrägstrichen, um Reguläre Ausdrücke zu verwenden."
-  softDescription: "Notizen, die die eingestellten Konditionen erfüllen, in der Chronik ausblenden"
-  hardDescription: "Verhindern, dass Notizen, die die eingestellten Konditionen erfüllen, der Chronik hinzugefügt werden. Zudem werden diese Notizen auch nicht der Chronik hinzugefügt, falls die Konditionen geändert werden."
+  softDescription: "Notizen, die die angegebenen Konditionen erfüllen, in der Chronik ausblenden."
+  hardDescription: "Verhindern, dass Notizen, die die angegebenen Konditionen erfüllen, der Chronik hinzugefügt werden. Zudem werden diese Notizen auch nicht der Chronik hinzugefügt, falls die Konditionen geändert werden."
   soft: "Leicht"
   hard: "Schwer"
   mutedNotes: "Stummgeschaltete Notizen"
@@ -932,15 +945,15 @@ _theme:
   explore: "Themen erforschen"
   install: "Thema installieren"
   manage: "Themaverwaltung"
-  code: "Themen-Code"
+  code: "Themencode"
   description: "Beschreibung"
   installed: "{name} wurde installiert"
   installedThemes: "Installierte Themen"
   builtinThemes: "Eingebaute Themen"
   alreadyInstalled: "Dieses Thema ist bereits installiert"
-  invalid: "Themenformat ist ungültig"
+  invalid: "Der Themencode dieses Themas ist ungültig"
   make: "Farbthema erstellen"
-  base: "Basis"
+  base: "Vorlage"
   addConstant: "Konstante hinzufügen"
   constant: "Konstante"
   defaultValue: "Standardwert"
@@ -956,7 +969,7 @@ _theme:
   darken: "Verdunkeln"
   lighten: "Erhellen"
   inputConstantName: "Name der Konstanten eingeben"
-  importInfo: "Du kannst hier Themen-Code einfügen, um ihn in den Editor zu importieren"
+  importInfo: "Du kannst hier Themencode einfügen, um ihn in den Editor zu importieren"
   deleteConstantConfirm: "Die Konstante {const} wirklich löschen?"
   keys:
     accent: "Akzentfarbe"
@@ -974,10 +987,10 @@ _theme:
     navIndicator: "Indikator der Seitenleiste"
     link: "Link"
     hashtag: "Hashtag"
-    mention: "Erwähnungen"
-    mentionMe: "Erwähnungen (Ich)"
+    mention: "Erwähnung"
+    mentionMe: "Erwähnung (Ich)"
     renote: "Renote"
-    modalBg: "Hintergrund des Modals"
+    modalBg: "Modalhintergrund"
     divider: "Trenner"
     scrollbarHandle: "Griff des Scrollbalkens"
     scrollbarHandleHover: "Griff des Scrollbalkens (Mouseover)"
@@ -985,10 +998,10 @@ _theme:
     infoBg: "Hintergrund von Informationen"
     infoFg: "Text von Informationen"
     infoWarnBg: "Hintergrund von Warnungen"
-    infoWarnFg: "Text von Informationen"
-    cwBg: "Hintergrund von verdeckten Inhalten"
-    cwFg: "Text von verdeckten Inhalten"
-    cwHoverBg: "Hintergrund von verdeckten Inhalten (Mouseover)"
+    infoWarnFg: "Text von Warnungen"
+    cwBg: "Hintergrund von verborgenen Inhalten"
+    cwFg: "Text von verborgenen Inhalten"
+    cwHoverBg: "Hintergrund von verborgenen Inhalten (Mouseover)"
     toastBg: "Hintergrund von Benachrichtigungen"
     toastFg: "Text von Benachrichtigungen"
     buttonBg: "Hintergrund von Schaltflächen"
@@ -1007,7 +1020,7 @@ _sfx:
   noteMy: "Meine Notizen"
   notification: "Benachrichtigungen"
   chat: "Chat"
-  chatBg: "Nachrichten (Hintergrund)"
+  chatBg: "Chat (Hintergrund)"
   antenna: "Antennen"
   channel: "Kanalbenachrichtigung"
   reversiPutBlack: "Reversi: Schwarz macht einen Zug"
@@ -1031,35 +1044,35 @@ _time:
 _tutorial:
   title: "Wie du Misskey verwendest"
   step1_1: "Willkommen!"
-  step1_2: "Diese Seite ist die \"Chronik\". Sie zeigt dir deine geschrieben \"Notizen\" sowie die aller Benutzer, denen du \"folgst\" in chronologischer Reihenfolge."
+  step1_2: "Diese Seite ist die \"Chronik\". Sie zeigt dir deine geschrieben \"Notizen\" sowie die aller Benutzer, denen du \"folgst\", in chronologischer Reihenfolge."
   step1_3: "Deine Chronik sollte momentan leer sein, da du bis jetzt noch keine Notizen geschrieben hast und auch noch keinen Benutzern folgst."
   step2_1: "Lass uns zuerst dein Profil vervollständigen, bevor du Notizen schreibst oder jemandem folgst."
-  step2_2: "Informationen darüber, wer du bist, macht es anderen leichter zu wissen, ob sie deine Notizen sehen wollen und ob sie dir folgen möchten."
+  step2_2: "Informationen darüber, was für eine Person du bist, macht es anderen leichter zu wissen, ob sie deine Notizen sehen wollen und ob sie dir folgen möchten."
   step3_1: "Mit dem Einrichten deines Profils fertig?"
-  step3_2: "Der nächste Schritt ist das Schreiben einer Notiz. Dies kannst du tun, indem du auf das Stift-Icon auf dem Bildschirm drückst."
+  step3_2: "Dann lass uns als nächstes versuchen, eine Notiz zu schreiben. Dies kannst du tun, indem du auf das Stift-Icon oben auf dem Bildschirm drückst."
   step3_3: "Fülle das Fenster aus und drücke auf den Knopf oben rechts zum Senden."
-  step3_4: "Gibt es nichts, das du momentan sagen möchtest? Versuch's mit \"Hallo Misskey!\""
+  step3_4: "Fällt dir nichts ein, das du schreiben möchtest? Versuch's mit \"Hallo Misskey!\""
   step4_1: "Fertig mit dem Senden deiner ersten Notiz?"
   step4_2: "Falls deine Notiz nun auf deiner Chronik auftaucht, hast du alles richtig gemacht."
   step5_1: "Lass uns nun deiner Chronik etwas mehr Leben einhauchen, indem du einigen anderen Benutzern folgst."
   step5_2: "{featured} zeigt dir beliebte Notizen dieser Instanz. In {explore} kannst du beliebte Benutzer finden. Schau dort, ob du Benutzer findest, die dich interessieren."
-  step5_3: "Um anderen Benutzern zu folgen, klicke auf ihr Profilbild und klicke dann auf den \"Folgen\" Knopf in ihrem Profil."
-  step5_4: "Wenn der Benutzer neben seinem Namen ein Schloss hat, dann muss er deine Follow-Anfrage manuell bestätigen."
-  step6_1: "Wenn du nun auch die Notizen anderer Benutzer auf deiner Chronik siehst, hast du alles richtig gemacht."
-  step6_2: "Du kannst ebenso \"Reaktionen\" verwenden, um schnell auf Notizen anderer Benutzer zu antworten."
-  step6_3: "Um eine \"Reaktion\" anzufügen, klicke auf das \"+\"-Symbol in der Notiz eines anderen Benutzers und wähle ein Emoji, mit dem du reagieren möchtest."
-  step7_1: "Glückwunsch! Du hast die Misskey-Einführung abgeschlossen."
+  step5_3: "Klicke zum Anzeigen des Profils eines Benutzers auf dessen Profilbild und dann auf den \"Folgen\"-Knopf, um diesem zu folgen."
+  step5_4: "Je nach Benutzer kann es etwas Zeit in Anspruch nehmen, bis dieser deine Follow-Anfrage bestätigt."
+  step6_1: "Wenn du nun auch die Notizen anderer Benutzer in deiner Chronik siehst, hast du auch diesmal alles richtig gemacht."
+  step6_2: "Du kannst ebenso \"Reaktionen\" verwenden, um schnell auf Notizen anderer Benutzer zu reagieren."
+  step6_3: "Um eine Reaktion anzufügen, klicke auf das \"+\"-Symbol in der Notiz und wähle ein Emoji aus, mit dem du reagieren möchtest."
+  step7_1: "Glückwunsch! Du hast die Einführung in die Verwendung von Misskey abgeschlossen."
   step7_2: "Wenn du mehr über Misskey lernen möchtest, schau dich im {help}-Bereich um."
   step7_3: "Und nun, viel Spaß mit Misskey! 🚀"
 _2fa:
-  alreadyRegistered: "Du hast bereits ein Gerät für Zwei-Faktor-Authentifizierung registriert"
+  alreadyRegistered: "Du hast bereits ein Gerät für Zwei-Faktor-Authentifizierung registriert."
   registerDevice: "Neues Gerät registrieren"
   registerKey: "Neuen Sicherheitsschlüssel registrieren"
-  step1: "Als Erstes, installiere eine Authentifizierungsapp (z.B. {a} oder {b}) auf deinem Gerät."
+  step1: "Installiere zuerst eine Authentifizierungsapp (z.B. {a} oder {b}) auf deinem Gerät."
   step2: "Dann, scanne den angezeigten QR-Code mit deinem Gerät."
-  step3: "Um die Einrichtung abzuschließen, gib den Token ein, der von deiner Authentifizierungsapp angezeigt wird."
-  step4: "Ab jetzt benötigen alle Loginversuche auch einen Login-Token."
-  securityKeyInfo: "Du kannst neben Fingerabdruck- oder PIN-Authentifizierung auf deinem Gerät auch Authentifizierung mit FIDO2-kompatiblen Hardware-Sicherheitsschlüsseln einrichten."
+  step3: "Gib zum Abschluss den Token ein, der von deiner App angezeigt wird."
+  step4: "Alle folgenden Anmeldungsversuche werden ab sofort die Eingabe eines solchen Tokens benötigen."
+  securityKeyInfo: "Du kannst neben Fingerabdruck- oder PIN-Authentifizierung auf deinem Gerät auch Anmeldung mit Hilfe eines FIDO2-kompatiblen Hardware-Sicherheitsschlüssels einrichten."
 _permissions:
   "read:account": "Deine Benutzerkontoinformationen lesen"
   "write:account": "Deine Benutzerkontoinformationen bearbeiten"
@@ -1069,18 +1082,18 @@ _permissions:
   "write:drive": "Deine Drive-Dateien und Ordner bearbeiten oder löschen"
   "read:favorites": "Deine Favoriten-Liste lesen"
   "write:favorites": "Deine Favoriten-Liste bearbeiten"
-  "read:following": "Deine Follower-Liste lesen"
+  "read:following": "Die Liste der Benutzer, denen du folgst, lesen"
   "write:following": "Anderen Benutzern folgen oder entfolgen"
   "read:messaging": "Chats lesen"
-  "write:messaging": "Chatnachrichten schicken oder löschen"
+  "write:messaging": "Chats bedienen"
   "read:mutes": "Stummschaltungen lesen"
   "write:mutes": "Stummschaltungen bearbeiten"
   "write:notes": "Notizen schreiben oder löschen"
   "read:notifications": "Benachrichtigungen lesen"
-  "write:notifications": "Benachrichtigungen bearbeiten"
+  "write:notifications": "Benachrichtigungen bedienen"
   "read:reactions": "Reaktionen lesen"
-  "write:reactions": "Reaktionen hinzufügen und ändern"
-  "write:votes": "In Umfragen abstimmen"
+  "write:reactions": "Reaktionen bedienen"
+  "write:votes": "Umfragen bedienen"
   "read:pages": "Deine Seiten lesen"
   "write:pages": "Deine Seiten bearbeiten oder löschen"
   "read:page-likes": "Liste der Seiten, die mir gefallen, lesen"
@@ -1088,20 +1101,20 @@ _permissions:
   "read:user-groups": "Benutzergruppen lesen"
   "write:user-groups": "Benutzergruppen bearbeiten oder löschen"
   "read:channels": "Kanäle lesen"
-  "write:channels": "Kanäle bearbeiten"
+  "write:channels": "Kanäle bedienen"
 _auth:
   shareAccess: "Möchtest du \"{name}\" authorisieren, auf dieses Benuzerkonto zugreifen zu können?"
   shareAccessAsk: "Bist du dir sicher, dass du diese Anwendung authorisieren möchtest, auf dein Benutzerkonto zugreifen zu können?"
-  permissionAsk: "Diese Anwendung erfordert folgende Berechtigungen:"
-  pleaseGoBack: "Bitte gehe zurück zur Anwendung"
-  callback: "Rückkehr zur Anwendung"
+  permissionAsk: "Diese Anwendung fordert folgende Berechtigungen"
+  pleaseGoBack: "Bitte kehre zur Anwendung zurück"
+  callback: "Es wird zur Anwendung zurückgekehrt"
   denied: "Zugriff verweigert"
 _antennaSources:
   all: "Alle Notizen"
   homeTimeline: "Notizen von Benutzern, denen gefolgt wird"
-  users: "Notizen von konkreten Benutzern"
-  userList: "Notizen von allen Benutzern aus einer Liste"
-  userGroup: "Notizen von allen Benutzern aus einer Gruppe"
+  users: "Notizen von einem oder mehreren angegebenen Benutzern"
+  userList: "Notizen von allen Benutzern einer Liste"
+  userGroup: "Notizen von allen Benutzern einer Gruppe"
 _weekday:
   sunday: "Sonntag"
   monday: "Montag"
@@ -1122,7 +1135,7 @@ _widgets:
   photos: "Fotos"
   digitalClock: "Digitaluhr"
   federation: "Föderation"
-  postForm: "Neue Notiz anfertigen"
+  postForm: "Notizfenster"
   slideshow: "Diashow"
   button: "Knopf"
   onlineUsers: "Benutzer Online"
@@ -1130,37 +1143,37 @@ _widgets:
   serverMetric: "Servermetriken"
   aiscript: "AiScript-Konsole"
 _cw:
-  hide: "Ausblenden"
-  show: "Mehr anzeigen"
+  hide: "Verbergen"
+  show: "Inhalt anzeigen"
   chars: "{count} Zeichen"
-  files: "{count} Dateien"
+  files: "{count} Datei(en)"
 _poll:
-  noOnlyOneChoice: "Mindestens zwei Antwortmöglichkeiten werden benötigt."
+  noOnlyOneChoice: "Es müssen mindestens zwei Antwortmöglichkeiten vorhanden sein"
   choiceN: "Auswahl {n}"
   noMore: "Du kannst keine weiteren Auswahlmöglichkeiten hinzufügen"
-  canMultipleVote: "Mehrfachantworten erlauben"
-  expiration: "Abstimmung endet am"
+  canMultipleVote: "Auswahl mehrerer Antworten erlauben"
+  expiration: "Abstimmung beenden"
   infinite: "Nie"
   at: "Beenden am..."
   after: "Beenden nach..."
-  deadlineDate: "Abstimmungsende"
+  deadlineDate: "Enddatum"
   deadlineTime: "Zeit"
-  duration: "Laufzeit"
+  duration: "Dauer"
   votesCount: "{n} Stimmen"
   totalVotes: "Insgesamt {n} Stimmen"
   vote: "Abstimmen"
   showResult: "Ergebnis anzeigen"
   voted: "Abgestimmt"
   closed: "Beendet"
-  remainingDays: "{d} Tage {h} Stunden verbleibend"
-  remainingHours: "{h} Stunden {m} Minuten verbleibend"
-  remainingMinutes: "{m} Minuten {s} Sekunden verbleibend"
-  remainingSeconds: "{s} Sekunden verbleibend"
+  remainingDays: "{d} Tag(e) {h} Stunde(n) verbleibend"
+  remainingHours: "{h} Stunde(n) {m} Minute(n) verbleibend"
+  remainingMinutes: "{m} Minute(n) {s} Sekunde(n) verbleibend"
+  remainingSeconds: "{s} Sekunde(n) verbleibend"
 _visibility:
   public: "Öffentlich"
-  publicDescription: "Deine Notiz wird global sichtbar sein"
+  publicDescription: "Deine Notiz wird global für alle Benutzer sichtbar sein"
   home: "Startseite"
-  homeDescription: "Deine Notiz wird nur in der Chronik deiner Instanz angezeigt."
+  homeDescription: "Notiz nur in die Startseiten-Chronik schicken"
   followers: "Follower"
   followersDescription: "Nur für Follower sichtbar"
   specified: "Direkt"
@@ -1186,7 +1199,7 @@ _profile:
   metadata: "Zusätzliche Informationen"
   metadataEdit: "Zusätzliche Informationen bearbeiten"
   metadataDescription: "Du kannst auf deinem Profil vier zusätzliche Informationsblöcke anzeigen lassen."
-  metadataLabel: "Name"
+  metadataLabel: "Beschriftung"
   metadataContent: "Inhalt"
   changeAvatar: "Profilbild ändern"
   changeBanner: "Banner ändern"
@@ -1204,10 +1217,10 @@ _charts:
   activeUsers: "Aktive Benutzer"
   notesIncDec: "Unterschied in der Anzahl von Notizen"
   localNotesIncDec: "Unterschied in der Anzahl von lokalen Notizen"
-  remoteNotesIncDec: "Unterschied in Anzahl der Notizen von anderen Instanzen"
+  remoteNotesIncDec: "Unterschied in Anzahl der Notizen von fremden Instanzen"
   notesTotal: "Anzahl aller Notizen"
-  filesIncDec: "Unterschied in der Anzahl von Dateien"
-  filesTotal: "Anzahl aller Dateien"
+  filesIncDec: "Unterschied an Dateien"
+  filesTotal: "Summe der Dateien"
   storageUsageIncDec: "Unterschied in der Höhe der Speichernutzung"
   storageUsageTotal: "Gesamte Speichernutzung"
 _instanceCharts:
@@ -1216,8 +1229,8 @@ _instanceCharts:
   usersTotal: "Gesamtanzahl an Benutzern"
   notes: "Unterschied in der Anzahl von Notizen"
   notesTotal: "Gesamtanzahl an Notizen"
-  ff: "Unterschied in der Anzahl von Followern"
-  ffTotal: "Gesamtanzahl an Followern"
+  ff: "Unterschied in der Anzahl von gefolgten Benutzern und Followern"
+  ffTotal: "Gesamtanzahl an gefolgten Benutzern und Followern"
   cacheSize: "Unterschied in der Größe des Caches"
   cacheSizeTotal: "Gesamtgröße des Caches"
   files: "Unterschied in der Anzahl der Dateien"
@@ -1291,7 +1304,7 @@ _rooms:
     banknote: "Geldscheine"
 _pages:
   newPage: "Seite erstellen"
-  editPage: "Diese Seite bearbeiten"
+  editPage: "Seite bearbeiten"
   readPage: "Quelltext-Ansicht"
   created: "Seite erfolgreich erstellt"
   updated: "Seite erfolgreich aktualisiert"
@@ -1309,22 +1322,22 @@ _pages:
   liked: "Seiten, die mir gefallen"
   featured: "Beliebt"
   inspector: "Inspektor"
-  contents: "Inhalt"
-  content: "Inhalt"
+  contents: "Inhalte"
+  content: "Seitenblock"
   variables: "Variablen"
   title: "Titel"
   url: "Seiten-URL"
   summary: "Zusammenfassung"
-  alignCenter: "Bestandteile zentrieren"
-  hideTitleWhenPinned: "Seitentitel ausblenden, wenn an dein Profil angepinnt "
+  alignCenter: "Zentrieren"
+  hideTitleWhenPinned: "Seitentitel ausblenden, wenn angeheftet"
   font: "Schriftart"
   fontSerif: "Serif"
   fontSansSerif: "Sans Serif"
   eyeCatchingImageSet: "Vorschaubild festlegen"
   eyeCatchingImageRemove: "Vorschaubild entfernen"
   chooseBlock: "Block hinzufügen"
-  selectType: "Wähle einen Typ"
-  enterVariableName: "Gib einen Namen für deine Variable ein"
+  selectType: "Typ auswählen"
+  enterVariableName: "Gib einen Variablennamen ein"
   variableNameIsAlreadyUsed: "Dieser Name wird bereits von einer anderen Variable verwendet"
   contentBlocks: "Inhalt"
   inputBlocks: "Eingabe"
@@ -1338,10 +1351,10 @@ _pages:
     if: "Falls"
     _if:
       variable: "Variable"
-    post: "Neue Notiz anfertigen"
+    post: "Notizfenster"
     _post:
       text: "Inhalt"
-      attachCanvasImage: "Leinwand als Bild anfügen"
+      attachCanvasImage: "Leinwandbild anfügen"
       canvasId: "Leinwand-ID"
     textInput: "Texteingabe"
     _textInput:
@@ -1365,7 +1378,7 @@ _pages:
       height: "Höhe"
     note: "Eingebettete Notiz"
     _note:
-      id: "Notiz ID"
+      id: "Notiz-ID"
       idDescription: "Du kannst alternativ auch die Notiz-URL angeben."
       detailed: "Detailierte Ansicht"
     switch: "Fallunterscheidung"
@@ -1381,16 +1394,16 @@ _pages:
     _button:
       text: "Titel"
       colored: "Farbig"
-      action: "Aktion, die beim Knopfdruck ausgeführt werden soll"
+      action: "Aktion, die bei Knopfdruck ausgeführt wird"
       _action:
-        dialog: "Zeige ein Dialogfenster"
+        dialog: "Dialogfenster anzeigen"
         _dialog:
           content: "Inhalt"
-        resetRandom: "Setze den Zufallswert zurück"
-        pushEvent: "Sende ein Event"
+        resetRandom: "Zufallswert zurücksetzen"
+        pushEvent: "Ein Event senden"
         _pushEvent:
           event: "Eventname"
-          message: "Nachricht, die bei Aktivierung gezeigt werden soll"
+          message: "Nachricht, die bei Auslösung des Events angezeigt werden soll"
           variable: "Variable, die gesendet werden soll"
           no-variable: "Keine"
         callAiScript: "AiScript ausführen"
@@ -1400,7 +1413,7 @@ _pages:
     _radioButton:
       name: "Variablenname"
       title: "Titel"
-      values: "Auswahlmöglichkeiten (getrennt durch Zeilenumbrüche)"
+      values: "Durch Zeilenümbrüche getrennte Auswahlmöglichkeiten"
       default: "Standardwert"
   script:
     categories:
@@ -1412,7 +1425,7 @@ _pages:
       value: "Werte"
       fn: "Funktionen"
       text: "Textoperationen"
-      convert: "Konvertierung"
+      convert: "Konvertierungen"
       list: "Listen"
     blocks:
       text: "Text"
@@ -1459,7 +1472,7 @@ _pages:
       _mod:
         arg1: "A"
         arg2: "B"
-      round: "Runden"
+      round: "Rundung von Dezimalstellen"
       _round:
         arg1: "Nummer"
       eq: "A und B sind gleich"
@@ -1511,17 +1524,17 @@ _pages:
         arg2: "Maximum"
       randomPick: "Zufallswahl aus Liste"
       _randomPick:
-        arg1: "Listen"
-      dailyRandom: "Zufallswahl (Läuft für einen Tag)"
+        arg1: "Liste"
+      dailyRandom: "Zufällig (Pro Nutzer jeden Tag verschieden)"
       _dailyRandom:
         arg1: "Warscheinlichkeit"
-      dailyRannum: "Zufallsnummer (Läuft für einen Tag)"
+      dailyRannum: "Zufallsnummer (Pro Nutzer jeden Tag verschieden)"
       _dailyRannum:
         arg1: "Minimum"
         arg2: "Maximum"
-      dailyRandomPick: "Zufallswahl aus Liste (Läuft für einen Tag)"
+      dailyRandomPick: "Zufallsauswahl aus einer Liste (Pro Nutzer jeden Tag verschieden)"
       _dailyRandomPick:
-        arg1: "Listen"
+        arg1: "Liste"
       seedRandom: "Zufällig (mit Startwert / Seed)"
       _seedRandom:
         arg1: "Startwert / Seed"
@@ -1531,20 +1544,20 @@ _pages:
         arg1: "Startwert / Seed"
         arg2: "Minimum"
         arg3: "Maximum"
-      seedRandomPick: "Zufallswahl aus Liste (mit Startwert / Seed)"
+      seedRandomPick: "Zufallsauswahl aus Liste (mit Startwert / Seed)"
       _seedRandomPick:
         arg1: "Startwert / Seed"
-        arg2: "Listen"
-      DRPWPM: "Zufallswahl aus gewichteter Liste (Läuft für einen Tag)"
+        arg2: "Liste"
+      DRPWPM: "Zufallsauswahl aus gewichteter Liste (Pro Nutzer jeden Tag verschieden)"
       _DRPWPM:
         arg1: "Textliste"
       pick: "Aus einer Liste wählen"
       _pick:
-        arg1: "Listen"
+        arg1: "Liste"
         arg2: "Position"
       listLen: "Listenlänge abrufen"
       _listLen:
-        arg1: "Listen"
+        arg1: "Liste"
       number: "Nummer"
       stringToNumber: "Text zu Nummer"
       _stringToNumber:
@@ -1555,29 +1568,29 @@ _pages:
       splitStrByLine: "Text nach Zeilenumbrüchen aufteilen"
       _splitStrByLine:
         arg1: "Text"
-      ref: "Variablen"
-      aiScriptVar: "AiScript Variablen"
-      fn: "Funktionen"
+      ref: "Variable"
+      aiScriptVar: "AiScript Variable"
+      fn: "Funktion"
       _fn:
         slots: "Slots"
         slots-info: "Trenne jeden Slot mit einem Zeilenumbruch"
         arg1: "Ausgabe"
-      for: "Wiederholen"
+      for: "for-Schleife"
       _for:
-        arg1: "Anzahl der Wiederholungen"
+        arg1: "Anzahl der Schleifendurchläufe"
         arg2: "Aktion"
     typeError: "Slot {slot} akzeptiert Werte vom Typ \"{expect}\", aber es wurde ein \"{actual}\" Wert angegeben!"
     thereIsEmptySlot: "Slot {slot} ist leer!"
     types:
       string: "Text"
       number: "Nummer"
-      boolean: "Flag"
-      array: "Listen"
+      boolean: "Wahrheitswert"
+      array: "Liste"
       stringArray: "Textliste"
     emptySlot: "Leerer Slot"
     enviromentVariables: "Umgebungsvariable"
-    pageVariables: "Seitenelement"
-    argVariables: "Eingabe-Slot"
+    pageVariables: "Seitenelemente"
+    argVariables: "Eingabe-Slots"
 _relayStatus:
   requesting: "Ausstehend"
   accepted: "Akzeptiert"
@@ -1588,7 +1601,7 @@ _notification:
   youGotReply: "{name} hat dir geantwortet"
   youGotQuote: "{name} hat dich zitiert"
   youRenoted: "Renote deiner Notiz von {name}"
-  youGotPoll: "{name} hat auf deiner Umfrage abgestimmt"
+  youGotPoll: "{name} hat in deiner Umfrage abgestimmt"
   youGotMessagingMessageFromUser: "{name} hat dir eine Chatnachricht gesendet"
   youGotMessagingMessageFromGroup: "In die Gruppe {name} wurde eine Chatnachricht gesendet"
   youWereFollowed: "ist dir gefolgt"
@@ -1604,13 +1617,13 @@ _notification:
     quote: "Zitationen"
     reaction: "Reaktionen"
     pollVote: "Antworten auf Umfragen"
-    receiveFollowRequest: "Follow-Anfrage erhalten"
-    followRequestAccepted: "Follow-Anfrage akzeptiert"
-    groupInvited: "Gruppeneinladung erhalten"
+    receiveFollowRequest: "Erhaltene Follow-Anfragen"
+    followRequestAccepted: "Akzeptierte Follow-Anfragen"
+    groupInvited: "Erhaltene Gruppeneinladungen"
     app: "Benachrichtigungen von Apps"
 _deck:
   alwaysShowMainColumn: "Hauptspalte immer zeigen"
-  columnAlign: "Spalten ausrichten"
+  columnAlign: "Spaltenausrichtung"
   columnMargin: "Spaltenabstand"
   columnHeaderHeight: "Spaltenkopfhöhe"
   addColumn: "Spalte hinzufügen"
diff --git a/locales/en-US.yml b/locales/en-US.yml
index f9d6047964..7b02532331 100644
--- a/locales/en-US.yml
+++ b/locales/en-US.yml
@@ -1,6 +1,6 @@
 ---
 _lang_: "English"
-headlineMisskey: "Network connected by notes"
+headlineMisskey: "A network connected by notes"
 introMisskey: "Welcome! Misskey is an open source, decentralized microblogging service.\nCreate \"notes\" to share what is happening now, or to share it with everyone around you. 📡\nWith \"reactions\", you can also quickly express your feelings about everyone's notes. 👍\nLet's explore a new world! 🚀"
 monthAndDay: "{month}/{day}"
 search: "Search"
@@ -28,7 +28,7 @@ login: "Sign In"
 loggingIn: "Signing In"
 logout: "Sign Out"
 signup: "Sign Up"
-uploading: "Uploading"
+uploading: "Uploading..."
 save: "Save"
 users: "Users"
 addUser: "Add a user"
@@ -48,11 +48,11 @@ deleteAndEditConfirm: "Are you sure you want to delete this note and edit it? Yo
 addToList: "Add to list"
 sendMessage: "Send a message"
 copyUsername: "Copy username"
-searchUser: "User search"
+searchUser: "Search for a user"
 reply: "Reply"
 loadMore: "Load more"
-showMore: "Load more"
-youGotNewFollower: "Followed you"
+showMore: "Show more"
+youGotNewFollower: "followed you"
 receiveFollowRequest: "Follow request received"
 followRequestAccepted: "Follow request accepted"
 mention: "Mention"
@@ -65,8 +65,8 @@ files: "Files"
 download: "Download"
 driveFileDeleteConfirm: "Are you sure you want to delete the file \"{name}\"? Notes with this file attached will also be deleted."
 unfollowConfirm: "Are you sure that you want to unfollow {name}?"
-exportRequested: "You have requested an export. This may take a while. After the export is complete, the resulting file will be added to the drive."
-importRequested: "You requested an import. This may take a while."
+exportRequested: "You've requested an export. This may take a while. It will be added to your Drive once completed."
+importRequested: "You've requested an import. This may take a while."
 lists: "Lists"
 noLists: "You don't have any lists"
 note: "Note"
@@ -79,9 +79,9 @@ manageLists: "Manage lists"
 error: "Error"
 somethingHappened: "An error occurred"
 retry: "Retry"
-pageLoadError: "Failed to load page"
+pageLoadError: "Failed to load page."
 pageLoadErrorDescription: "This is normally caused by network errors or the browser's cache. Try clearing the cache and then try again after waiting a little while."
-enterListName: "List name"
+enterListName: "Enter a list name"
 privacy: "Privacy"
 makeFollowManuallyApprove: "Follow requests require approval"
 defaultNoteVisibility: "Default visibility"
@@ -92,7 +92,7 @@ unfollow: "Unfollow"
 followRequestPending: "Pending follow request"
 enterEmoji: "Enter an emoji"
 renote: "Renote"
-unrenote: "Unrenote"
+unrenote: "Take back Renote"
 renoted: "Renoted."
 cantRenote: "This post can't be renoted."
 cantReRenote: "A renote can't be renoted."
@@ -103,8 +103,8 @@ you: "You"
 clickToShow: "Click to show"
 sensitive: "NSFW"
 add: "Add"
-reaction: "Reaction"
-reactionSettingDescription: "Assign your favorite reactions which want to pin in reaction picker."
+reaction: "Reactions"
+reactionSettingDescription: "Configure which reactions you want to display in the reaction picker."
 reactionSettingDescription2: "Drag to reorder, Click to delete, Press \"+\" to add"
 rememberNoteVisibility: "Remember note visibility settings"
 attachCancel: "Remove attachment"
@@ -120,9 +120,9 @@ unsuspend: "Unsuspend"
 blockConfirm: "Are you sure that you want to block this account?"
 unblockConfirm: "Are you sure that you want to unblock this account?"
 suspendConfirm: "Are you sure that you want to suspend this account?"
-unsuspendConfirm: "Are you sure you that want to unsuspend this account?"
+unsuspendConfirm: "Are you sure that you want to unsuspend this account?"
 selectList: "Select a list"
-selectAntenna: "Select an Antenna"
+selectAntenna: "Select an antenna"
 selectWidget: "Select a widget"
 editWidgets: "Edit widgets"
 editWidgetsExit: "Done"
@@ -131,13 +131,13 @@ emoji: "Emoji"
 emojiName: "Emoji name"
 emojiUrl: "Emoji URL"
 addEmoji: "Add an emoji"
-settingGuide: "Suggested Configuration"
+settingGuide: "Recommended settings"
 cacheRemoteFiles: "Cache remote files"
-cacheRemoteFilesDescription: "When this setting is disabled, remote files are loaded directly from the remote instance. Disabling this will decrease storage usage, but will increase traffic, because thumbnails will not be generated."
-flagAsBot: "This account is a bot"
-flagAsBotDescription: "If this account is controlled by a program, set this option. If enabled, it will act as flag for other developers to prevent endless interaction chains with other bots and adjust Misskey's internal systems to treat this account as a bot."
-flagAsCat: "This account is a cat"
-flagAsCatDescription: "Toggle this flag on for this account to be marked as a cat."
+cacheRemoteFilesDescription: "When this setting is disabled, remote files are loaded directly from the remote instance. Disabling this will decrease storage usage, but increase traffic, as thumbnails will not be generated."
+flagAsBot: "Mark this account as as bot"
+flagAsBotDescription: "Enable this option if this account is controlled by a program. If enabled, it will act as flag for other developers to prevent endless interaction chains with other bots and adjust Misskey's internal systems to treat this account as a bot."
+flagAsCat: "Mark this account as a cat"
+flagAsCatDescription: "Enable this option to mark this account as a cat."
 autoAcceptFollowed: "Automatically approve follow requests from users you're following"
 addAccount: "Add account"
 loginFailed: "Failed to sign in"
@@ -152,11 +152,11 @@ followConfirm: "Are you sure that you want to follow {name}?"
 proxyAccount: "Proxy account"
 proxyAccountDescription: "A proxy account is an account that acts as a remote follower for users under certain conditions. For example, when a user adds a remote user to the list, the remote user's activity will not be delivered to the instance if no local user is following that user, so the proxy account will follow instead."
 host: "Host"
-selectUser: "Select user"
+selectUser: "Select a user"
 recipient: "Recipient"
 annotation: "Comments"
 federation: "Federation"
-instances: "Instance"
+instances: "Instances"
 registeredAt: "Registered at"
 latestRequestSentAt: "Last request sent at"
 latestRequestReceivedAt: "Last request received at"
@@ -181,21 +181,21 @@ instanceInfo: "Instance Information"
 statistics: "Statistics"
 clearQueue: "Clear queue"
 clearQueueConfirmTitle: "Are you sure that you want to clear the queue?"
-clearQueueConfirmText: "Any undelivered notes remaining in the queue will not be federated. Usually this operation is NOT needed."
+clearQueueConfirmText: "Any undelivered notes remaining in the queue will not be federated. Usually this operation is not needed."
 clearCachedFiles: "Clear cache"
-clearCachedFilesConfirm: "Are you sure that you want to delete all the cached remote files?"
+clearCachedFilesConfirm: "Are you sure that you want to delete all cached remote files?"
 blockedInstances: "Blocked Instances"
-blockedInstancesDescription: "List the hostname of the instances that need to be blocked. Listed instances will no longer be able to communicate with this instance."
-muteAndBlock: "Mute / Block"
+blockedInstancesDescription: "List the hosts of the instances to be blocked separated by line breaks. Blocked instances will no longer be able to communicate with this instance."
+muteAndBlock: "Mutes and Blocks"
 mutedUsers: "Muted users"
 blockedUsers: "Blocked users"
 noUsers: "There are no users"
 editProfile: "Edit profile"
 noteDeleteConfirm: "Are you sure you want to delete this note?"
-pinLimitExceeded: "You cannot pin any more notes."
+pinLimitExceeded: "You cannot pin any more notes"
 intro: "Installation of Misskey has been finished! Please create an admin user."
 done: "Done"
-processing: "Processing"
+processing: "Processing..."
 preview: "Preview"
 default: "Default"
 noCustomEmojis: "There are no emojis"
@@ -212,7 +212,7 @@ instanceFollowers: "Followers of instance"
 instanceUsers: "Users of this instance"
 changePassword: "Change password"
 security: "Security"
-retypedNotMatch: "The input does not match."
+retypedNotMatch: "The inputs does not match."
 currentPassword: "Current password"
 newPassword: "New password"
 newPasswordRetype: "Retype new password"
@@ -226,11 +226,11 @@ announcements: "Announcements"
 imageUrl: "Image URL"
 remove: "Delete"
 removed: "Successfully deleted"
-removeAreYouSure: "Are you sure that you want to delete \"{x}\"?"
+removeAreYouSure: "Are you sure that you want to remove \"{x}\"?"
 deleteAreYouSure: "Are you sure that you want to delete \"{x}\"?"
 resetAreYouSure: "Really reset?"
 saved: "Saved"
-messaging: "Messaging"
+messaging: "Chat"
 upload: "Upload"
 fromDrive: "From Drive"
 fromUrl: "From URL"
@@ -242,13 +242,13 @@ explore: "Explore"
 games: "Misskey Games"
 messageRead: "Read"
 noMoreHistory: "There is no further history"
-startMessaging: "Start messaging"
+startMessaging: "Start a new chat"
 nUsersRead: "read by {n}"
 agreeTo: "I agree to {0}"
 tos: "Terms of Service"
 start: "Begin"
 home: "Home"
-remoteUserCaution: "This information may not be up-to-date, because the user is from a remote instance."
+remoteUserCaution: "As this user is from a renote instance, the shown information may be incomplete."
 activity: "Activity"
 images: "Images"
 birthday: "Birthday"
@@ -260,8 +260,8 @@ themeForLightMode: "Theme to use in Light Mode"
 themeForDarkMode: "Theme to use in Dark Mode"
 light: "Light"
 dark: "Dark"
-lightThemes: "Light theme"
-darkThemes: "Dark theme"
+lightThemes: "Light themes"
+darkThemes: "Dark themes"
 syncDeviceDarkMode: "Sync Dark Mode with your device settings"
 drive: "Drive"
 fileName: "Filename"
@@ -275,7 +275,7 @@ createFolder: "Create a folder"
 renameFolder: "Rename this folder"
 deleteFolder: "Delete this folder"
 addFile: "Add a file"
-emptyDrive: "The drive is empty"
+emptyDrive: "Your Drive is empty"
 emptyFolder: "This folder is empty"
 unableToDelete: "Unable to delete"
 inputNewFileName: "Enter a new filename"
@@ -289,12 +289,12 @@ avatar: "Avatar"
 banner: "Banner"
 nsfw: "NSFW"
 whenServerDisconnected: "When losing connection to the server"
-disconnectedFromServer: "Connection to the server was interrupted."
+disconnectedFromServer: "Connection to server has been lost"
 reload: "Refresh"
 doNothing: "Ignore"
-reloadConfirm: "Would you like to refresh timeline?"
+reloadConfirm: "Would you like to refresh the timeline?"
 watch: "Watch"
-unwatch: "Undo Watch"
+unwatch: "Stop watching"
 accept: "Accept"
 reject: "Reject"
 normal: "Normal"
@@ -308,19 +308,19 @@ thisMonth: "Month"
 today: "Today"
 dayX: "{day}"
 monthX: "{month}"
-yearX: "{year} /"
+yearX: "{year}"
 pages: "Pages"
 integration: "Integration"
 connectService: "Connect"
 disconnectService: "Disconnect"
 enableLocalTimeline: "Enable local timeline"
 enableGlobalTimeline: "Enable global timeline"
-disablingTimelinesInfo: "Admins and Mods will always have access to all timelines, even if they are not enabled."
+disablingTimelinesInfo: "Adminstrators and Moderators will always have access to all timelines, even if they are not enabled."
 registration: "Register"
 enableRegistration: "Enable new user registration"
 invite: "Invite"
 proxyRemoteFiles: "Proxy remote files"
-proxyRemoteFilesDescription: "If enabled, remote files that (1) are not stored locally or (2) got deleted from exceeding storage limit will be locally proxied (with thumbnails). This does not affect the server's storage."
+proxyRemoteFilesDescription: "If enabled, remote files that are either not stored locally or were deleted due to exceeding the storage limit will be proxied, including generation of thumbnails. This does not affect the server's storage."
 driveCapacityPerLocalAccount: "Drive capacity per local user"
 driveCapacityPerRemoteAccount: "Drive capacity per remote user"
 inMb: "In megabytes"
@@ -328,10 +328,10 @@ iconUrl: "Icon URL"
 bannerUrl: "Banner image URL"
 backgroundImageUrl: "Background image URL"
 basicInfo: "Basic info"
-pinnedUsers: "Pinned user"
-pinnedUsersDescription: "List one username per line. Users listed here will be pinned under \"Explore\" tab."
+pinnedUsers: "Pinned users"
+pinnedUsersDescription: "List usernames separated by line breaks to be pinned in the \"Explore\" tab."
 pinnedPages: "Pinned pages"
-pinnedPagesDescription: "Enter the paths of the pages you want to pin to the top page of this instance, separated by new lines."
+pinnedPagesDescription: "Enter the paths of the pages you want to pin to the top page of this instance, separated by line breaks."
 pinnedClipId: "ID of the pinned clip"
 pinnedNotes: "Pinned notes"
 hcaptcha: "hCaptcha"
@@ -342,41 +342,41 @@ recaptcha: "reCAPTCHA"
 enableRecaptcha: "Enable reCAPTCHA"
 recaptchaSiteKey: "Site key"
 recaptchaSecretKey: "Secret key"
-avoidMultiCaptchaConfirm: "Using multiple Captchas may cause interferences. Would you like to disable the other Captcha? You can leave multiple Captchas enabled by pressing cancel."
+avoidMultiCaptchaConfirm: "Using multiple Captcha systems may cause interferences. Would you like to disable the other Captcha systems? You can leave multiple enabled by pressing cancel."
 antennas: "Antennas"
 manageAntennas: "Manage Antennas"
 name: "Name"
 antennaSource: "Antenna source"
-antennaKeywords: "Keywords to receive"
+antennaKeywords: "Keywords to listen to"
 antennaExcludeKeywords: "Keywords to exclude"
-antennaKeywordsDescription: "Separate with spaces for AND condition. Separate with line breaks for OR."
-notifyAntenna: "Notify for new notes"
-withFileAntenna: "Filter only notes with file(s) attached"
+antennaKeywordsDescription: "Separate with spaces for an AND condition or with line breaks for an OR condition."
+notifyAntenna: "Notify about new notes"
+withFileAntenna: "Only notes with files"
 enableServiceworker: "Enable ServiceWorker"
 antennaUsersDescription: "List one username per line"
 caseSensitive: "Case sensitive"
 withReplies: "Include replies"
 connectedTo: "Following account(s) are connected"
 notesAndReplies: "Notes and replies"
-withFiles: "Media"
+withFiles: "Including files"
 silence: "Silence"
 silenceConfirm: "Are you sure that you want to silence this user?"
-unsilence: "Unsilence"
-unsilenceConfirm: "Are you sure that you want to undo silence of this user?"
+unsilence: "Undo silencing"
+unsilenceConfirm: "Are you sure that you want to undo the silencing of this user?"
 popularUsers: "Trending users"
 recentlyUpdatedUsers: "Users with recent activity"
 recentlyRegisteredUsers: "Newly joined users"
 recentlyDiscoveredUsers: "Newly discovered users"
 exploreUsersCount: "There are {count} users"
-exploreFediverse: "Explore Fediverse"
+exploreFediverse: "Explore the Fediverse"
 popularTags: "Trending Tags"
 userList: "Lists"
 about: "About"
 aboutMisskey: "About Misskey"
-administrator: "Admin"
+administrator: "Administrator"
 token: "Token"
 twoStepAuthentication: "Two-factor authentication"
-moderator: "Mod"
+moderator: "Moderator"
 nUsersMentioned: "{n} users mentioned"
 securityKey: "Security key"
 securityKeyName: "Key name"
@@ -386,11 +386,11 @@ unregister: "Unregister"
 passwordLessLogin: "Set up password-less login"
 resetPassword: "Reset password"
 newPasswordIs: "The new password is \"{password}\""
-reduceUiAnimation: "Reduce UI animation"
+reduceUiAnimation: "Reduce UI animations"
 share: "Share"
 notFound: "Not found"
-notFoundDescription: "There was no page corresponding to the specified URL."
-uploadFolder: "Default Upload location"
+notFoundDescription: "No page corresponding to this URL could be found."
+uploadFolder: "Default folder for uploads"
 cacheClear: "Clear cache"
 markAsReadAllNotifications: "Mark all notifications as read"
 markAsReadAllUnreadNotes: "Mark all notes as read"
@@ -398,59 +398,59 @@ markAsReadAllTalkMessages: "Mark all messages as read"
 help: "Help"
 inputMessageHere: "Enter message here"
 close: "Close"
-group: "Groups"
+group: "Group"
 groups: "Groups"
 createGroup: "Create a group"
 ownedGroups: "Owned Groups"
-joinedGroups: "Membership in groups"
-invites: "Invite"
+joinedGroups: "Joined groups"
+invites: "Invites"
 groupName: "Group name"
 members: "Members"
 transfer: "Transfer"
-messagingWithUser: "Messaging with other user"
-messagingWithGroup: "Messaging within group"
+messagingWithUser: "Private chat"
+messagingWithGroup: "Group chat"
 title: "Title"
 text: "Text"
 enable: "Enable"
 next: "Next"
 retype: "Enter again"
-noteOf: "{user}'s notes"
+noteOf: "Note by {user}"
 inviteToGroup: "Invite to group"
-maxNoteTextLength: "Character limit of notes"
+maxNoteTextLength: "Character limit for notes"
 quoteAttached: "Quoted"
-quoteQuestion: "Do you want to append a quote?"
+quoteQuestion: "Append as quote?"
 noMessagesYet: "No messages yet"
 newMessageExists: "You've got a new message"
 onlyOneFileCanBeAttached: "You can only attach one file to a message"
 signinRequired: "Please sign in"
-invitations: "Invitations"
+invitations: "Invites"
 invitationCode: "Invitation code"
-checking: "Checking"
+checking: "Checking..."
 available: "Available"
 unavailable: "Not available"
-usernameInvalidFormat: "letters, numbers and _ are acceptable."
+usernameInvalidFormat: "You can use upper- and lowercase letters, numbers as well as underscores."
 tooShort: "Too short"
 tooLong: "Too long"
 weakPassword: "Weak password"
-normalPassword: "Good password"
+normalPassword: "Normal password"
 strongPassword: "Strong password"
-passwordMatched: "Matched"
-passwordNotMatched: "Doesn't match"
+passwordMatched: "Matches"
+passwordNotMatched: "Does not match"
 signinWith: "Sign in with {x}"
-signinFailed: "Unable to sign in. The username or password you entered is incorrect."
+signinFailed: "Unable to sign in. The entered username or password is incorrect."
 tapSecurityKey: "Tap your security key"
 or: "Or"
 language: "Language"
-uiLanguage: "UI display language"
-groupInvited: "Invited to group"
+uiLanguage: "User interface language"
+groupInvited: "You've been invited to a group"
 aboutX: "About {x}"
 useOsNativeEmojis: "Use OS native Emojis"
 youHaveNoGroups: "You have no groups"
-joinOrCreateGroup: "Get invited to join the groups or you can create your own group."
-noHistory: "No history items"
+joinOrCreateGroup: "Get invited to a group or create your own."
+noHistory: "No history available"
 signinHistory: "Login history"
 disableAnimatedMfm: "Disable MFM with animation"
-doing: "On my way"
+doing: "Processing..."
 category: "Category"
 tags: "Tags"
 docSource: "Source of this document"
@@ -464,37 +464,37 @@ dashboard: "Dashboard"
 local: "Local"
 remote: "Remote"
 total: "Total"
-weekOverWeekChanges: "Weekly"
-dayOverDayChanges: "Daily"
+weekOverWeekChanges: "Changes to last week"
+dayOverDayChanges: "Changes to yesterday"
 appearance: "Appearance"
 clientSettings: "Client settings"
 accountSettings: "Account Settings"
 promotion: "Promoted"
 promote: "Promote"
-numberOfDays: "Amount of days"
+numberOfDays: "Number of days"
 hideThisNote: "Hide this note"
-showFeaturedNotesInTimeline: "Show Featured notes in Timeline"
+showFeaturedNotesInTimeline: "Show Featured notes in Timelines"
 objectStorage: "Object Storage"
 useObjectStorage: "Use object storage"
 objectStorageBaseUrl: "Base URL"
-objectStorageBaseUrlDesc: "URL prefix used for construct URL to object (media) referencing. Specify its URL if you are using a CDN or Proxy, otherwise specify the address that publicly accessible according to the guide of service that you're going to use. i.g 'https://<bucket>.s3.amazonaws.com' for AWS S3, and 'https://storage.googleapis.com/<bucket>' for GCS."
+objectStorageBaseUrlDesc: "URL used as reference. Specify the URL of your CDN or Proxy if you are using either. S3: 'https://<bucket>.s3.amazonaws.com', GCS: 'https://storage.googleapis.com/<bucket>' etc."
 objectStorageBucket: "Bucket"
-objectStorageBucketDesc: "Please specify the bucket name used on configured service."
+objectStorageBucketDesc: "Please specify the bucket name used at your provider."
 objectStoragePrefix: "Prefix"
-objectStoragePrefixDesc: "Files will stored under the directory of this prefix."
+objectStoragePrefixDesc: "Files will stored under directories with this prefix."
 objectStorageEndpoint: "Endpoint"
-objectStorageEndpointDesc: "Leave this empty if you are using AWS S3, otherwise specify the endpoint as '<host>' or '<host>:<port>' according to the guide of service that you're going to use."
+objectStorageEndpointDesc: "Leave this empty if you are using AWS S3, otherwise specify the endpoint as '<host>' or '<host>:<port>', depending on the service you are using."
 objectStorageRegion: "Region"
-objectStorageRegionDesc: "Specify a region like 'xx-east-1'. If your service does not have distinction about regions, leave it blank or fill with 'us-east-1'."
+objectStorageRegionDesc: "Specify a region like 'xx-east-1'. If your service does not distinct between regions, leave this blank or enter 'us-east-1'."
 objectStorageUseSSL: "Use SSL"
-objectStorageUseSSLDesc: "Turn off this if you are not going to use HTTPS for API connection"
+objectStorageUseSSLDesc: "Turn this off if you are not going to use HTTPS for API connections"
 objectStorageUseProxy: "Connect over Proxy"
-objectStorageUseProxyDesc: "Turn off this if you are not going to use Proxy for ObjectStorage connection"
+objectStorageUseProxyDesc: "Turn this off if you are not going to use a Proxy for API connections"
 objectStorageSetPublicRead: "Set \"public-read\" on upload"
 serverLogs: "Server logs"
 deleteAll: "Delete all"
 showFixedPostForm: "Display the posting form at the top of the timeline"
-newNoteRecived: "You've got a new note"
+newNoteRecived: "There are new notes"
 sounds: "Sounds"
 listen: "Listen"
 none: "None"
@@ -503,29 +503,29 @@ popout: "Pop-out"
 volume: "Volume"
 masterVolume: "Master volume"
 details: "Details"
-chooseEmoji: "Choose an emoji"
-unableToProcess: "The operation could not be completed."
+chooseEmoji: "Select an emoji"
+unableToProcess: "The operation could not be completed"
 recentUsed: "Recently used"
 install: "Install"
 uninstall: "Uninstall"
 installedApps: "Authorized Applications"
 nothing: "There's nothing to see here"
-installedDate: "Authorized"
-lastUsedDate: "Last used"
+installedDate: "Authorized at"
+lastUsedDate: "Last used at"
 state: "State"
 sort: "Sort"
 ascendingOrder: "Ascending"
 descendingOrder: "Descending"
-scratchpad: "Scratch pad"
-scratchpadDescription: "Scratchpad provides experimental environment for AiScript. You can write, execute, and check the results that interact with Misskey."
+scratchpad: "Scratchpad"
+scratchpadDescription: "The Scratchpad provides an environment for AiScript experiments. You can write, execute, and check the results of it interacting with Misskey."
 output: "Output"
 script: "Script"
 disablePagesScript: "Disable AiScript on Pages"
 updateRemoteUser: "Update remote user information"
 deleteAllFiles: "Delete All Files"
 deleteAllFilesConfirm: "Are you sure that you want to delete all files?"
-removeAllFollowing: "Withhold All Followings"
-removeAllFollowingDescription: "Unfollow all accounts from {host}. Please run this if the instance no longer exists."
+removeAllFollowing: "Unfollow all followed users"
+removeAllFollowingDescription: "Executing this unfollows all accounts from {host}. Please run this if the instance e.g. no longer exists."
 userSuspended: "This user has been suspended."
 userSilenced: "This user has been silenced."
 menu: "Menu"
@@ -574,7 +574,7 @@ edit: "Edit"
 useStarForReactionFallback: "Use ★ as fallback if the reaction emoji is unknown"
 emailServer: "Email server"
 enableEmail: "Enable email distribution"
-emailConfigInfo: "Used to confirm your email during sign-up and if you forget your password"
+emailConfigInfo: "Used to confirm your email during sign-up or if you forget your password"
 email: "Email"
 emailAddress: "Email address"
 smtpConfig: "SMTP Server configuration"
@@ -613,7 +613,7 @@ sample: "Sample"
 abuseReports: "Reports"
 reportAbuse: "Report"
 reportAbuseOf: "Report {name}"
-fillAbuseReportDescription: "Please fill in the report details. If it is about a specific note, please include its URL."
+fillAbuseReportDescription: "Please fill in details regarding this report. If it is about a specific note, please include its URL."
 abuseReported: "Your report has been sent. Thank you very much."
 send: "Send"
 abuseMarkAsResolved: "Mark report as resolved"
@@ -635,33 +635,33 @@ public: "Public"
 i18nInfo: "Misskey is being translated into various languages by volunteers. You can help at {link}."
 manageAccessTokens: "Manage access tokens"
 accountInfo: "Account Info"
-notesCount: "Amount of notes"
-repliesCount: "Amount of replies sent"
-renotesCount: "Amount of renotes sent"
-repliedCount: "Amount of replies received"
-renotedCount: "Amount of renotes received"
-followingCount: "Amount of followed accounts"
-followersCount: "Amount of followers"
-sentReactionsCount: "Amount of sent reactions"
-receivedReactionsCount: "Amount of received reactions"
-pollVotesCount: "Amount of sent poll votes"
-pollVotedCount: "Amount of received poll votes"
+notesCount: "Number of notes"
+repliesCount: "Number of replies sent"
+renotesCount: "Number of renotes sent"
+repliedCount: "Number of replies received"
+renotedCount: "Number of renotes received"
+followingCount: "Number of followed accounts"
+followersCount: "Number of followers"
+sentReactionsCount: "Number of sent reactions"
+receivedReactionsCount: "Number of received reactions"
+pollVotesCount: "Number of sent poll votes"
+pollVotedCount: "Number of received poll votes"
 yes: "Yes"
 no: "No"
-driveFilesCount: "Amount of drive files"
+driveFilesCount: "Number of drive files"
 driveUsage: "Drive space usage"
 noCrawle: "Reject crawler indexing"
-noCrawleDescription: "Ask search engines not to index your profile page, notes, Pages, etc."
-lockedAccountInfo: "Unless you set your note visiblity to \"Followers only\", your notes are visible to anyone, even if you require followers to be manually approved."
-alwaysMarkSensitive: "Mark NSFW by default"
-loadRawImages: "Display image attachments fully instead of thumbnails"
+noCrawleDescription: "Ask search engines to not index your profile page, notes, Pages, etc."
+lockedAccountInfo: "Unless you set your note visiblity to \"Followers only\", your notes will be visible to anyone, even if you require followers to be manually approved."
+alwaysMarkSensitive: "Mark as NSFW by default"
+loadRawImages: "Load original images instead of showing thumbnails"
 disableShowingAnimatedImages: "Don't play animated images"
 verificationEmailSent: "A verification email has been sent. Please access the included link to complete verification."
 notSet: "Not set"
 emailVerified: "Email has been verified"
-noteFavoritesCount: "Amount of favorite notes"
-pageLikesCount: "Amount of received Page likes"
-pageLikedCount: "Amount of liked Pages"
+noteFavoritesCount: "Number of favorite notes"
+pageLikesCount: "Number of liked Pages"
+pageLikedCount: "Number of received Page likes"
 reversiCount: "Number of Reversi matches"
 contact: "Contact"
 useSystemFont: "Use the system's default font"
@@ -676,22 +676,22 @@ left: "Left"
 center: "Center"
 wide: "Wide"
 narrow: "Narrow"
-reloadToApplySetting: "This setting will be applied upon page reload. Reload now?"
+reloadToApplySetting: "This setting will only apply after a page reload. Reload now?"
 showTitlebar: "Show title bar"
 clearCache: "Clear cache"
-onlineUsersCount: "{n} people are online"
+onlineUsersCount: "{n} users are online"
 nUsers: "{n} Users"
 nNotes: "{n} Notes"
 sendErrorReports: "Send error reports"
-sendErrorReportsDescription: "When turned on, detailed error information will be shared with Misskey when a problem occurs, helping to improve the quality of Misskey.\nThis may include informations such as your OS and its version, the kind of browser you're using, your activity history, etc."
+sendErrorReportsDescription: "When turned on, detailed error information will be shared with Misskey when a problem occurs, helping to improve the quality of Misskey.\nThis will include information such the version of your OS, what browser you're using, your activity history, etc."
 myTheme: "My theme"
-backgroundColor: "Background"
-accentColor: "Accent"
-textColor: "Text"
+backgroundColor: "Background color"
+accentColor: "Accent color"
+textColor: "Textfarbe"
 saveAs: "Save as..."
 advanced: "Advanced"
 value: "Value"
-createdAt: "Created on"
+createdAt: "Created at"
 updatedAt: "Updated at"
 saveConfirm: "Save changes?"
 deleteConfirm: "Really delete?"
@@ -707,7 +707,7 @@ capacity: "Capacity"
 inUse: "Used"
 editCode: "Edit code"
 apply: "Apply"
-receiveAnnouncementFromInstance: "Receive Email notifications from this instance"
+receiveAnnouncementFromInstance: "Receive notifications from this instance"
 emailNotification: "Email notifications"
 publish: "Publish"
 inChannelSearch: "Search in channel"
@@ -722,14 +722,14 @@ unlikeConfirm: "Really remove your like?"
 fullView: "Full view"
 quitFullView: "Exit full view"
 addDescription: "Add description"
-userPagePinTip: "You can make notes be displayed here by selecting \"Pin to profile\" from the menu of individual notes"
+userPagePinTip: "You can display notes here by selecting \"Pin to profile\" from the menu of individual notes."
 notSpecifiedMentionWarning: "This note contains mentions of users not included as recipient"
 info: "About"
 userInfo: "User information"
 unknown: "Unknown"
 onlineStatus: "Online status"
 hideOnlineStatus: "Hide online status"
-hideOnlineStatusDescription: "Hiding your online status reduces the convenience of some functions such as search"
+hideOnlineStatusDescription: "Hiding your online status reduces the convenience of some functions such as the search."
 online: "Online"
 active: "Active"
 offline: "Offline"
@@ -739,8 +739,8 @@ instanceBlocking: "Blocked Instances"
 selectAccount: "Select account"
 enabled: "Enabled"
 disabled: "Disabled"
-quickAction: "Quick action"
-user: "Users"
+quickAction: "Quick actions"
+user: "User"
 administration: "Management"
 accounts: "Accounts"
 switch: "Switch"
@@ -759,12 +759,23 @@ priority: "Priority"
 high: "High"
 middle: "Medium"
 low: "Low"
-emailNotConfiguredWarning: "Email address not set"
+emailNotConfiguredWarning: "Email address not set."
 ratio: "Ratio"
 customCss: "Custom CSS"
 customCssWarn: "This setting should only be used if you know what it does. Entering improper values may cause the client to stop functioning normally."
 global: "Global"
 squareAvatars: "Display squared avatars"
+sent: "Sent"
+received: "Received"
+searchResult: "Search results"
+hashtags: "Hashtags"
+troubleshooting: "Troubleshooting"
+_docs:
+  continueReading: "Read more"
+  features: "Features"
+  generalTopics: "General topics"
+  advancedTopics: "Advanced Topics"
+  admin: "Administration"
 _ad:
   back: "Back"
   reduceFrequencyOfThisAd: "Show this ad less"
@@ -799,8 +810,8 @@ _aboutMisskey:
   source: "Source code"
   translation: "Translate Misskey"
   donate: "Donate to Misskey"
-  morePatrons: "We really appreciate the support of many other helpers not listed here. Thank you! 🥰"
-  patrons: "Backers"
+  morePatrons: "We also appreciate the support of many other helpers not listed here. Thank you! 🥰"
+  patrons: "Patrons"
 _nsfw:
   respect: "Hide NSFW media"
   ignore: "Don't hide NSFW media"
@@ -810,23 +821,23 @@ _mfm:
   intro: "MFM is a Misskey-exclusive markup language that can be used in many places. Here you can view a list of all available MFM syntax."
   dummy: "Misskey expands the world of the Fediverse"
   mention: "Mention"
-  mentionDescription: "Using an At-Symbol and a username, you can specify a specific user."
+  mentionDescription: "You can specify a user by using an At-Symbol and a username."
   hashtag: "Hashtag"
-  hashtagDescription: "Using a number sign and text, you can specify a hashtag."
+  hashtagDescription: "You can specify a hashtag using a number sign and text."
   url: "URL"
   urlDescription: "URLs can be displayed."
   link: "Link"
-  linkDescription: "Specific parts of text can be displayed as URL."
+  linkDescription: "Specific parts of text can be displayed as an URL."
   bold: "Bold"
   boldDescription: "Highlights letters by making them thicker."
   small: "Small"
-  smallDescription: "Displays contents small and thinn."
+  smallDescription: "Displays contents small and thin."
   center: "Center"
   centerDescription: "Displays content centered."
-  inlineCode: "Code (Inline)"
-  inlineCodeDescription: "Displays inline syntax highlighting for (program-)code."
+  inlineCode: "Code (In-line)"
+  inlineCodeDescription: "Displays inline syntax highlighting for (program) code."
   blockCode: "Code (Block)"
-  blockCodeDescription: "Displays syntax highlighting for multi-line (program-)code in a block."
+  blockCodeDescription: "Displays syntax highlighting for multi-line (program) code in a block."
   inlineMath: "Math (In-line)"
   inlineMathDescription: "Display math formulas (KaTeX) in-line"
   blockMath: "Math (Block)"
@@ -840,29 +851,31 @@ _mfm:
   flip: "Flip"
   flipDescription: "Flips content horizontally or vertically."
   jelly: "Animation (Jelly)"
-  jellyDescription: "Infuses a jelly-like animation."
+  jellyDescription: "Gives content a jelly-like animation."
   tada: "Animation (Tada)"
-  tadaDescription: "Infuses a \"Tada!\"-like animation."
+  tadaDescription: "Gives content a \"Tada!\"-like animation."
   jump: "Animation (Jump)"
-  jumpDescription: "Infuses a jumping animation."
+  jumpDescription: "Gives content a jumping animation."
   bounce: "Animation (Bounce)"
-  bounceDescription: "Causes a bouncy animation."
+  bounceDescription: "Gives content a bouncy animation."
   shake: "Animation (Shake)"
-  shakeDescription: "Infuses a shaking animation."
+  shakeDescription: "Gives content a shaking animation."
   twitch: "Animation (Twitch)"
-  twitchDescription: "Infuses a strongly twitching animation."
+  twitchDescription: "Gives content a strongly twitching animation."
   spin: "Animation (Spin)"
-  spinDescription: "Infuses a spinning animation."
+  spinDescription: "Gives content a spinning animation."
   x2: "Big"
   x2Description: "Displays content bigger."
   x3: "Very big"
   x3Description: "Displays content even bigger."
-  x4: "Extremely big"
+  x4: "Unbelievably big"
   x4Description: "Displays content even bigger than bigger than big."
   blur: "Blur"
-  blurDescription: "Content can be blurred via this effect. It will be clearly displayed by hovering your cursor above it."
+  blurDescription: "Content can be blurred via this effect. It will be displayed clearly when hovered over."
   font: "Font"
   fontDescription: "Sets the font to display contents in."
+  rainbow: "Rainbow"
+  rainbowDescription: "Makes the content appear in rainbow colors."
 _reversi:
   reversi: "Reversi"
   gameSettings: "Game settings"
@@ -879,12 +892,12 @@ _reversi:
   cancelReady: "Cancel ready"
   opponentTurn: "Opponent's turn"
   myTurn: "Your turn"
-  turnOf: "{name}'s turn"
+  turnOf: "It's {name}'s turn"
   pastTurnOf: "{name}'s turn"
   surrender: "Surrender"
   surrendered: "By surrender"
   drawn: "Draw"
-  won: "{name}'s win"
+  won: "{name} wins"
   black: "Black"
   white: "White"
   total: "Total"
@@ -894,7 +907,7 @@ _reversi:
   ended: "Ended"
   playing: "Currently playing"
   isLlotheo: "The one with fewer stones wins (Llotheo)"
-  loopedMap: "Looped map"
+  loopedMap: "Looping map"
   canPutEverywhere: "Tiles are placeable everywhere"
 _instanceTicker:
   none: "Never show"
@@ -915,30 +928,30 @@ _channel:
   usersCount: "{n} Participants"
   notesCount: "{n} Notes"
 _menuDisplay:
-  sideFull: "Horizontal"
-  sideIcon: "Horizontal (Icons)"
+  sideFull: "Side"
+  sideIcon: "Side (Icons)"
   top: "Top"
   hide: "Hide"
 _wordMute:
-  muteWords: "Word to mute"
-  muteWordsDescription: "Separate with spaces for AND condition. Separate with line breaks for OR."
+  muteWords: "Muted words"
+  muteWordsDescription: "Separate with spaces for an AND condition or with line breaks for an OR condition."
   muteWordsDescription2: "Surround keywords by slashes to use regular expressions."
-  softDescription: "Hide notes fulfilling the set conditions from the timeline."
-  hardDescription: "Prevent notes fulfilling the set conditions from being added to the timeline. In addition, these notes will not be added to the timeline even if the conditions are changed."
+  softDescription: "Hides notes fulfilling the set conditions from the timeline."
+  hardDescription: "Prevents notes fulfilling the set conditions from being added to the timeline. In addition, these notes will not be added to the timeline even if the conditions are changed."
   soft: "Soft"
   hard: "Hard"
   mutedNotes: "Muted notes"
 _theme:
   explore: "Explore Themes"
-  install: "Install theme"
-  manage: "Themes manager"
+  install: "Install a theme"
+  manage: "Manage themes"
   code: "Theme code"
   description: "Description"
   installed: "{name} has been installed"
   installedThemes: "Installed themes"
   builtinThemes: "Built-in themes"
-  alreadyInstalled: "The theme is already installed"
-  invalid: "Theme format is invalid"
+  alreadyInstalled: "This theme is already installed"
+  invalid: "The format of this theme is invalid"
   make: "Make a theme"
   base: "Base"
   addConstant: "Add constant"
@@ -955,7 +968,7 @@ _theme:
   alpha: "Opacity"
   darken: "Darken"
   lighten: "Lighten"
-  inputConstantName: "Enter a name for the constant"
+  inputConstantName: "Enter a name for this constant"
   importInfo: "If you enter theme code here, you can import it to the theme editor"
   deleteConstantConfirm: "Do you really want to delete the constant {const}?"
   keys:
@@ -986,9 +999,9 @@ _theme:
     infoFg: "Information text"
     infoWarnBg: "Warning background"
     infoWarnFg: "Warning text"
-    cwBg: "CW background"
-    cwFg: "CW text"
-    cwHoverBg: "CW background (Hover)"
+    cwBg: "CW button background"
+    cwFg: "CW button text"
+    cwHoverBg: "CW button background (Hover)"
     toastBg: "Notification background"
     toastFg: "Notification text"
     buttonBg: "Button background"
@@ -1004,11 +1017,11 @@ _theme:
     fgHighlighted: "Highlighted Text"
 _sfx:
   note: "New note"
-  noteMy: "My note"
+  noteMy: "Own note"
   notification: "Notifications"
-  chat: "Messaging"
-  chatBg: "Messaging (Background)"
-  antenna: "Antenna Reception"
+  chat: "Chat"
+  chatBg: "Chat (Background)"
+  antenna: "Antennas"
   channel: "Channel notifications"
   reversiPutBlack: "Reversi: Black makes a move"
   reversiPutWhite: "Reversi: White makes a move"
@@ -1016,92 +1029,92 @@ _ago:
   unknown: "Unknown"
   future: "Future"
   justNow: "Just now"
-  secondsAgo: "{n}s ago"
-  minutesAgo: "{n}m ago"
-  hoursAgo: "{n}h ago"
-  daysAgo: "{n}d ago"
-  weeksAgo: "{n}week(s) ago"
-  monthsAgo: "{n}month(s) ago"
-  yearsAgo: "{n}year(s) ago"
+  secondsAgo: "{n} seconds ago"
+  minutesAgo: "{n} minutes ago"
+  hoursAgo: "{n} hours ago"
+  daysAgo: "{n} days ago"
+  weeksAgo: "{n} week(s) ago"
+  monthsAgo: "{n} month(s) ago"
+  yearsAgo: "{n} year(s) ago"
 _time:
-  second: "s"
-  minute: "m"
-  hour: "h"
-  day: "d"
+  second: "Second(s)"
+  minute: "Minute(s)"
+  hour: "Hour(s)"
+  day: "Day(s)"
 _tutorial:
   title: "How to use Misskey"
   step1_1: "Welcome!"
-  step1_2: "This page is called \"timeline\". It shows chronologically ordered \"notes\" of people who you \"follow\"."
+  step1_2: "This page is called the \"timeline\". It shows chronologically ordered \"notes\" of people who you \"follow\"."
   step1_3: "Your timeline is currently empty, since you have not posted any notes or followed anyone yet."
   step2_1: "Let's finish setting up your profile before writing a note or following anyone."
-  step2_2: "Providing some information about who you are will make it easier for others to follow you back."
+  step2_2: "Providing some information about who you are will make it easier for others to tell if they want to see your notes or follow you."
   step3_1: "Finished setting up your profile?"
-  step3_2: "The next step is to post a note. You can do this by pressing the pencil icon on the screen."
+  step3_2: "Then let's try posting a note next. You can do this by pressing the pencil icon on the top of the screen."
   step3_3: "Fill in the modal and press the button on the top right to post."
   step3_4: "Have nothing to say? Try \"just setting up my msky\"!"
   step4_1: "Finished posting your first note?"
-  step4_2: "Hurray! Now your first note is displayed on your timeline."
+  step4_2: "Hurray! Now your first note should be displayed on your timeline."
   step5_1: "Now, let's try making your timeline more lively by following other people."
-  step5_2: "{featured} will show you trending notes in this instance. {explore} will let you find trending users. Try following people you like!"
-  step5_3: "To follow other users, click on their icon and press \"follow\" button on their profile."
-  step5_4: "If the other user has a lock icon next to their name, that user will have to manually approve your follow request."
-  step6_1: "Now you will be able to see other users' notes on your timeline."
+  step5_2: "{featured} will show you trending notes in this instance. {explore} will let you find trending users. Try finding people you'd like to follow there!"
+  step5_3: "To follow other users, click on their icon and press the \"Follow\" button on their profile."
+  step5_4: "If the other user has a lock icon next to their name, it may take some time for that user to manually approve your follow request."
+  step6_1: "You should be able to see other users' notes on your timeline now."
   step6_2: "You can also put \"reactions\" on other people's notes to quickly respond."
   step6_3: "To attach a \"reaction\", press the \"+\" mark on another user's note and choose an emoji you'd like to react with."
   step7_1: "Congratulations! You have now finished Misskey's basic tutorial."
   step7_2: "If you would like to learn more about Misskey, try the {help} section."
-  step7_3: "Good luck and have fun! 🚀"
+  step7_3: "Now then, good luck and have fun with Misskey! 🚀"
 _2fa:
-  alreadyRegistered: "You have already registered 2-factor authentication device."
+  alreadyRegistered: "You have already registered a 2-factor authentication device."
   registerDevice: "Register a new device"
   registerKey: "Register a new Security Key"
   step1: "First, install an authentication app (such as {a} or {b}) on your device."
-  step2: "Then, scan the QR code on the screen."
+  step2: "Then, scan the QR code displayed on this screen."
   step3: "Enter the token provided by your app to finish setup."
-  step4: "From now, any login attempt will ask for your login token."
-  securityKeyInfo: "You can setup WebAuthN authentication to further secure the log-in process with not only hardware security key which supports FIDO2, but also fingerprint or PIN authentication on your device."
+  step4: "From now, any future login attempts will ask for such a login token."
+  securityKeyInfo: "Besides fingerprint or PIN authentication, you can also setup authentication via hardware security keys that support FIDO2 to further secure your login process."
 _permissions:
   "read:account": "View your account information"
   "write:account": "Edit your account information"
-  "read:blocks": "View the list of people you blocked"
-  "write:blocks": "Edit the list of people you blocked"
+  "read:blocks": "View your list of blocked users"
+  "write:blocks": "Edit your list of blocked users"
   "read:drive": "Access your drive files and folders"
   "write:drive": "Edit or delete your drive files and folders"
-  "read:favorites": "View your favorites list"
-  "write:favorites": "Edit your favorites list"
-  "read:following": "View your following information"
+  "read:favorites": "View your list of favorites"
+  "write:favorites": "Edit your list of favorites"
+  "read:following": "View information on who you follow"
   "write:following": "Follow or unfollow other accounts"
-  "read:messaging": "View your messages"
-  "write:messaging": "Compose or Delete messages"
-  "read:mutes": "View the list of people you muted"
-  "write:mutes": "Edit the list of people you muted"
-  "write:notes": "Compose or Delete notes"
-  "read:notifications": "View notifications"
-  "write:notifications": "Work with notifications"
-  "read:reactions": "View reactions"
-  "write:reactions": "Edit reactions"
+  "read:messaging": "View your chats"
+  "write:messaging": "Compose or delete chat messages"
+  "read:mutes": "View your list of muted users"
+  "write:mutes": "Edit your list of muted users"
+  "write:notes": "Compose or delete notes"
+  "read:notifications": "View your notifications"
+  "write:notifications": "Work with your notifications"
+  "read:reactions": "View your reactions"
+  "write:reactions": "Edit your reactions"
   "write:votes": "Vote on a poll"
   "read:pages": "View your pages"
   "write:pages": "Edit or delete your pages"
-  "read:page-likes": "View likes on pages"
-  "write:page-likes": "Edit likes on pages"
-  "read:user-groups": "View user groups"
-  "write:user-groups": "Edit or delete user groups"
-  "read:channels": "Read channels"
-  "write:channels": "Modify channels"
+  "read:page-likes": "View your likes on pages"
+  "write:page-likes": "Edit your likes on pages"
+  "read:user-groups": "View your user groups"
+  "write:user-groups": "Edit or delete your user groups"
+  "read:channels": "Read your channels"
+  "write:channels": "Modify your channels"
 _auth:
   shareAccess: "Would you like to authorize \"{name}\" to access this account?"
   shareAccessAsk: "Are you sure you want to authorize this application to access your account?"
-  permissionAsk: "This application requires following permissions:"
+  permissionAsk: "This application requests the following permissions"
   pleaseGoBack: "Please go back to the application"
   callback: "Returning back to the application"
   denied: "Access denied"
 _antennaSources:
   all: "All notes"
-  homeTimeline: "Notes from following users"
+  homeTimeline: "Notes from followed users"
   users: "Notes from specific users"
-  userList: "Notes from specific list"
-  userGroup: "Notes from users in the specified group"
+  userList: "Notes from a specified list of users"
+  userGroup: "Notes from users in a specified group"
 _weekday:
   sunday: "Sunday"
   monday: "Monday"
@@ -1131,24 +1144,24 @@ _widgets:
   aiscript: "AiScript console"
 _cw:
   hide: "Hide"
-  show: "Load more"
+  show: "Show content"
   chars: "{count} characters"
   files: "{count} file(s)"
 _poll:
   noOnlyOneChoice: "At least two choices are needed"
   choiceN: "Choice {n}"
   noMore: "You cannot add more choices"
-  canMultipleVote: "Allow multiple replies"
-  expiration: "Poll ends on"
+  canMultipleVote: "Allow selecting multiple choices"
+  expiration: "End poll"
   infinite: "Never"
   at: "End at..."
   after: "End after..."
   deadlineDate: "End date"
-  deadlineTime: "h"
+  deadlineTime: "Time"
   duration: "Duration"
   votesCount: "{n} votes"
-  totalVotes: "Total {n} votes"
-  vote: "Vote on a poll"
+  totalVotes: "{n} votes in total"
+  vote: "Vote"
   showResult: "View results"
   voted: "Voted"
   closed: "Ended"
@@ -1158,19 +1171,19 @@ _poll:
   remainingSeconds: "{s} seconds remaining"
 _visibility:
   public: "Public"
-  publicDescription: "Your note will appear on global timeline"
+  publicDescription: "Your note will be visible for all users"
   home: "Home"
   homeDescription: "Post to home timeline only"
   followers: "Followers"
-  followersDescription: "Post to followers only"
+  followersDescription: "Make visible to your followers only"
   specified: "Direct"
-  specifiedDescription: "Post to specified users only"
+  specifiedDescription: "Make visible for specified users only"
   localOnly: "Local only"
   localOnlyDescription: "Not visible to remote users"
 _postForm:
   replyPlaceholder: "Reply to this note..."
   quotePlaceholder: "Quote this note..."
-  channelPlaceholder: "Post to channel"
+  channelPlaceholder: "Post to a channel..."
   _placeholders:
     a: "What are you up to?"
     b: "What's happening around you?"
@@ -1185,17 +1198,17 @@ _profile:
   youCanIncludeHashtags: "You can also include hashtags in your bio."
   metadata: "Additional Information"
   metadataEdit: "Edit additional Information"
-  metadataDescription: "You can display up to four additional information sections in your profile."
+  metadataDescription: "You can display up to four additional information fields in your profile."
   metadataLabel: "Label"
   metadataContent: "Content"
   changeAvatar: "Change avatar"
   changeBanner: "Change banner"
 _exportOrImport:
   allNotes: "All notes"
-  followingList: "Following"
-  muteList: "Mute"
-  blockingList: "Block"
-  userLists: "Lists"
+  followingList: "Followed users"
+  muteList: "Muted users"
+  blockingList: "Blocked users"
+  userLists: "User lists"
 _charts:
   federationInstancesIncDec: "Difference in # of federating instances"
   federationInstancesTotal: "Total # of federating instances"
@@ -1208,7 +1221,7 @@ _charts:
   notesTotal: "Total # of notes"
   filesIncDec: "Difference in # of files"
   filesTotal: "Total # of files"
-  storageUsageIncDec: "Difference in storage use"
+  storageUsageIncDec: "Difference in storage usage"
   storageUsageTotal: "Total storage usage"
 _instanceCharts:
   requests: "Requests"
@@ -1216,8 +1229,8 @@ _instanceCharts:
   usersTotal: "Cumulative total # of users"
   notes: "Difference in # of notes"
   notesTotal: "Cumulative total # of notes"
-  ff: "Difference in # of followers"
-  ffTotal: "Cumulative total # of followers"
+  ff: "Difference in # of followed users / followers "
+  ffTotal: "Cumulative total # of followed users / followers"
   cacheSize: "Difference in cache size"
   cacheSizeTotal: "Cumulative total cache size"
   files: "Difference in # of files"
@@ -1235,11 +1248,11 @@ _rooms:
   exit: "Back"
   remove: "Remove"
   clear: "Remove All"
-  clearConfirm: "Are you sure to remove all furnitures in your room?"
+  clearConfirm: "Do you really want to remove all furniture from your room?"
   leaveConfirm: "There are unsaved changes. Do you really want to leave?"
   chooseImage: "Select an image"
   roomType: "Room type"
-  carpetColor: "Color of carpet"
+  carpetColor: "Carpet color"
   _roomType:
     default: "Default"
     washitsu: "Japanese-style"
@@ -1263,14 +1276,14 @@ _rooms:
     book: "Book"
     book2: "Book 2"
     piano: "Piano"
-    facial-tissue: "Facial tissue"
-    server: "Servers"
+    facial-tissue: "Tissues"
+    server: "Server"
     moon: "Moon"
     corkboard: "Cork board"
     mousepad: "Mousepad"
     monitor: "Monitor"
     keyboard: "Keyboard"
-    carpet-stripe: "Carpet (stripe)"
+    carpet-stripe: "Carpet (striped)"
     mat: "Mat"
     color-box: "Bookshelf"
     wall-clock: "Wall clock"
@@ -1278,13 +1291,13 @@ _rooms:
     cube: "Cube"
     tv: "TV"
     pinguin: "Penguin"
-    rubik-cube: "Rubik's Cube"
+    rubik-cube: "Puzzle Cube"
     poster-h: "Poster (Horizontal)"
     poster-v: "Poster (Vertical)"
     sofa: "Sofa"
     spiral: "Spiral Staircase"
-    bin: "Waste bin"
-    cup-noodle: "Cup noodle"
+    bin: "Garbage can"
+    cup-noodle: "Cup noodles"
     holo-display: "Holographic display"
     energy-drink: "Energy drink"
     doll-ai: "Ai doll"
@@ -1293,13 +1306,13 @@ _pages:
   newPage: "Create a page"
   editPage: "Edit this page"
   readPage: "Source view activated"
-  created: "Successfully created a page!"
-  updated: "Successfully updated the page!"
-  deleted: "The page has been deleted"
+  created: "Page successfully created"
+  updated: "Page successfully edited"
+  deleted: "Page successfully deleted"
   pageSetting: "Page settings"
   nameAlreadyExists: "The specified page URL already exists"
   invalidNameTitle: "The specified page URL is invalid"
-  invalidNameText: "Check whether that is not a blank"
+  invalidNameText: "Make sure the page title is not empty"
   editThisPage: "Edit this page"
   viewSource: "View source"
   viewPage: "View your pages"
@@ -1309,7 +1322,7 @@ _pages:
   liked: "Liked pages"
   featured: "Featured"
   inspector: "Inspector"
-  contents: "Content"
+  contents: "Contents"
   content: "Page block"
   variables: "Variables"
   title: "Title"
@@ -1320,12 +1333,12 @@ _pages:
   font: "Font"
   fontSerif: "Serif"
   fontSansSerif: "Sans serif"
-  eyeCatchingImageSet: "Set the eye-catching image"
-  eyeCatchingImageRemove: "Delete the eye-catching image"
+  eyeCatchingImageSet: "Set thumbnail"
+  eyeCatchingImageRemove: "Delete thumbnail"
   chooseBlock: "Add a block"
   selectType: "Select a type"
-  enterVariableName: "Please enter a name for your variable"
-  variableNameIsAlreadyUsed: "This name is already being used by other variable"
+  enterVariableName: "Enter a variable name"
+  variableNameIsAlreadyUsed: "This variable name is already in use"
   contentBlocks: "Content"
   inputBlocks: "Input"
   specialBlocks: "Special"
@@ -1341,7 +1354,7 @@ _pages:
     post: "Compose a note"
     _post:
       text: "Content"
-      attachCanvasImage: "Post with Canvas as Image"
+      attachCanvasImage: "Post with canvas image"
       canvasId: "Canvas ID"
     textInput: "Text input"
     _textInput:
@@ -1366,7 +1379,7 @@ _pages:
     note: "Embedded note"
     _note:
       id: "Note ID"
-      idDescription: "You can also paste the Note's URL to set it instead."
+      idDescription: "You can alternatively paste the note URL here."
       detailed: "Detailed view"
     switch: "Switch"
     _switch:
@@ -1400,7 +1413,7 @@ _pages:
     _radioButton:
       name: "Variable name"
       title: "Title"
-      values: "List of choices (separated by line breaks)"
+      values: "List of choices separated by line breaks"
       default: "Default value"
   script:
     categories:
@@ -1412,7 +1425,7 @@ _pages:
       value: "Values"
       fn: "Functions"
       text: "Text operations"
-      convert: "Transformation"
+      convert: "Transformations"
       list: "Lists"
     blocks:
       text: "Text"
@@ -1420,7 +1433,7 @@ _pages:
       textList: "Text list"
       _textList:
         info: "Separate each entry with a line break"
-      strLen: "Length of the text"
+      strLen: "Text length"
       _strLen:
         arg1: "Text"
       strPick: "Extract character"
@@ -1431,7 +1444,7 @@ _pages:
       _strReplace:
         arg1: "Text"
         arg2: "Text to be replaced"
-        arg3: "Replaced with"
+        arg3: "Replace with"
       strReverse: "Flip text"
       _strReverse:
         arg1: "Text"
@@ -1443,7 +1456,7 @@ _pages:
       _add:
         arg1: "A"
         arg2: "B"
-      subtract: "Substract"
+      subtract: "Subtract"
       _subtract:
         arg1: "A"
         arg2: "B"
@@ -1459,7 +1472,7 @@ _pages:
       _mod:
         arg1: "A"
         arg2: "B"
-      round: "Round decimal"
+      round: "Decimal rounding"
       _round:
         arg1: "Number"
       eq: "A and B are equal"
@@ -1490,15 +1503,15 @@ _pages:
       _ltEq:
         arg1: "A"
         arg2: "B"
-      gtEq: ">= A is more than or equal to B"
+      gtEq: ">= A is greater than or equal to B"
       _gtEq:
         arg1: "A"
         arg2: "B"
       if: "Branch"
       _if:
         arg1: "If"
-        arg2: "If true"
-        arg3: "If false"
+        arg2: "Then"
+        arg3: "Else"
       not: "NOT"
       _not:
         arg1: "NOT"
@@ -1511,15 +1524,15 @@ _pages:
         arg2: "Maximum value"
       randomPick: "Randomly choose from list"
       _randomPick:
-        arg1: "Lists"
-      dailyRandom: "Random (lasts for a day)"
+        arg1: "List"
+      dailyRandom: "Random (Changes once a day for each user)"
       _dailyRandom:
         arg1: "Probability"
-      dailyRannum: "Random number (lasts for a day)"
+      dailyRannum: "Random number (Changes once a day for each user)"
       _dailyRannum:
         arg1: "Minimum value"
         arg2: "Maximum value"
-      dailyRandomPick: "Randomly choose from list (lasts for a day)"
+      dailyRandomPick: "Randomly choose from a list (Changes once a day for each user)"
       _dailyRandomPick:
         arg1: "Lists"
       seedRandom: "Random (with seed)"
@@ -1534,17 +1547,17 @@ _pages:
       seedRandomPick: "Randomly choose from list (with seed)"
       _seedRandomPick:
         arg1: "Seed"
-        arg2: "Lists"
-      DRPWPM: "Randomly choose from weighted list (lasts for a day)"
+        arg2: "Liste"
+      DRPWPM: "Randomly choose from weighted list (Changes once a day for each user)"
       _DRPWPM:
         arg1: "Text list"
       pick: "Select from list"
       _pick:
-        arg1: "Lists"
+        arg1: "List"
         arg2: "Position"
       listLen: "Get length of list"
       _listLen:
-        arg1: "Lists"
+        arg1: "List"
       number: "Number"
       stringToNumber: "Text to number"
       _stringToNumber:
@@ -1555,29 +1568,29 @@ _pages:
       splitStrByLine: "Split text by line breaks"
       _splitStrByLine:
         arg1: "Text"
-      ref: "Variables"
-      aiScriptVar: "Variable of AiScript"
-      fn: "Functions"
+      ref: "Variable"
+      aiScriptVar: "AiScript Variable"
+      fn: "Function"
       _fn:
         slots: "Slots"
-        slots-info: "Separate each slots with a line break"
+        slots-info: "Separate each slot with a line break"
         arg1: "Output"
-      for: "Repeat"
+      for: "for-Loop"
       _for:
         arg1: "Number of times to repeat"
         arg2: "Action"
-    typeError: "Slot {slot} accepts \"{expect}\" type, but the provided value is \"{actual}\"!"
+    typeError: "Slot {slot} accepts values of type \"{expect}\", but the provided value is of type \"{actual}\"!"
     thereIsEmptySlot: "Slot {slot} is empty!"
     types:
       string: "Text"
       number: "Number"
       boolean: "Flag"
-      array: "Lists"
+      array: "List"
       stringArray: "Text list"
     emptySlot: "Empty slot"
-    enviromentVariables: "Environment variable"
-    pageVariables: "Page element"
-    argVariables: "Input slot"
+    enviromentVariables: "Environment variables"
+    pageVariables: "Page variables"
+    argVariables: "Input slots"
 _relayStatus:
   requesting: "Pending"
   accepted: "Accepted"
@@ -1587,32 +1600,32 @@ _notification:
   youGotMention: "{name} mentioned you"
   youGotReply: "{name} replied to you"
   youGotQuote: "{name} quoted you"
-  youRenoted: "{name} renoted you"
+  youRenoted: "Renote from {name}"
   youGotPoll: "{name} voted on your poll"
-  youGotMessagingMessageFromUser: "{name} sent you a message"
-  youGotMessagingMessageFromGroup: "A message was sent to the {name} group"
-  youWereFollowed: "Followed you"
+  youGotMessagingMessageFromUser: "{name} sent you a chat message"
+  youGotMessagingMessageFromGroup: "A chat message was sent to the {name} group"
+  youWereFollowed: "followed you"
   youReceivedFollowRequest: "You've received a follow request"
   yourFollowRequestAccepted: "Your follow request was accepted"
-  youWereInvitedToGroup: "Invited to group"
+  youWereInvitedToGroup: "You've been invited to a group"
   _types:
     all: "All"
-    follow: "Follows"
+    follow: "New followers"
     mention: "Mentions"
     reply: "Replies"
     renote: "Renotes"
     quote: "Quotes"
     reaction: "Reactions"
     pollVote: "Votes on polls"
-    receiveFollowRequest: "Follow request received"
-    followRequestAccepted: "Follow request accepted"
-    groupInvited: "Invited to groups"
+    receiveFollowRequest: "Received follow requests"
+    followRequestAccepted: "Accepted follow requests"
+    groupInvited: "Group invitations"
     app: "Notifications from apps"
 _deck:
   alwaysShowMainColumn: "Always show main column"
   columnAlign: "Align columns"
   columnMargin: "Margin between columns"
-  columnHeaderHeight: " Column header height"
+  columnHeaderHeight: "Column header height"
   addColumn: "Add column"
   swapLeft: "Swap to left"
   swapRight: "Swap to right"
@@ -1627,6 +1640,6 @@ _deck:
     notifications: "Notifications"
     tl: "Timeline"
     antenna: "Antennas"
-    list: "Lists"
+    list: "List"
     mentions: "Mentions"
     direct: "Direct"
diff --git a/locales/eo-UY.yml b/locales/eo-UY.yml
index e87afb4b2b..99d2a93c9b 100644
--- a/locales/eo-UY.yml
+++ b/locales/eo-UY.yml
@@ -1,19 +1,19 @@
 ---
 _lang_: "Esperanto"
-headlineMisskey: "Reto ligiĝas per notoj"
-introMisskey: "Bonvenon! Miskejo estas malferma kodaの分散型マイクロブログサービスです。\nBonvolu Krei「noto」、いま起こっていることを共有したり、あなたについて皆に発信しよう📡\n「 reaktigoj 」機能で、皆のnotojに素早く反応を追加することもできます👍\n新しい世界を探検しよう🚀"
+headlineMisskey: "Reto ligiĝanta per notoj"
+introMisskey: "Bonvenon! Misskey (Ĉi-sekve Miskejo) estas malfermitkoda malcentriza mikrobloga servo.\nKreu \"noto\"n por ke kunhavu tion kio nun okazas aŭ ke eksendu tion kio pri vi📡\nFunkcion \"reago\" vi povas uzi kaj aldoni vian reagon pri ciu noto de ĉiu homo👍\nVolu esplori nova mondo🚀"
 monthAndDay: "{day}-a/{month}"
 search: "Serĉi"
 notifications: "Sciigoj"
-username: "Uzantonomo"
+username: "Uzantnomo"
 password: "Pasvorto"
 forgotPassword: "Ĉu vi forgesis pasvorton?"
-fetchingAsApObject: "Informpetado de fediverso..."
-ok: "Okej"
+fetchingAsApObject: "Informpetado de Fediverso..."
+ok: "Akcepteble"
 gotIt: "Mi konprenas!"
 cancel: "Nuligi"
-enterUsername: "Entajpu uzantonomon"
-renotedBy: "Renotigojn faras {user}"
+enterUsername: "Entajpu uzantnomon"
+renotedBy: "Renoton faras {user}"
 noNotes: "Neniu noto!"
 noNotifications: "Vi ne havas sciigojn."
 instance: "Ekzemplo"
@@ -22,7 +22,8 @@ basicSettings: "Äœeneralaj agordoj"
 otherSettings: "Aliaj agordoj"
 openInWindow: "Malfermi en nova fenestro"
 profile: "Profilo"
-timeline: "Tempolinio"
+timeline: "Templinio"
+noAccountDescription: "Tiu uzanto ne enhavas biografion je la profilo."
 login: "Ensaluti"
 loggingIn: "Ensalutado..."
 logout: "Elsaluti"
@@ -42,33 +43,34 @@ unpin: "Depingli"
 copyContent: "Kopii enhavon"
 copyLink: "Kopii ligilon"
 delete: "Forviŝi"
-deleteAndEdit: "Forviŝi kaj redakti"
-deleteAndEditConfirm: "Ĉu vi certas, ke vi volas forviŝi la noton? La reaktigoj, renotigoj, kaj respondoj ankaŭ forigiĝos."
-addToList: "Aldoni al listo"
+deleteAndEdit: "Foriginte redakti"
+deleteAndEditConfirm: "Ĉu vi certas, ke vi volas forigi la noton kaj redakti ĝin? Ĉiuj reagoj, renotoj, kaj respondoj ankaŭ foriĝos."
+addToList: "Aldoni al la listo"
 sendMessage: "Sendi mesaĝon"
-copyUsername: "Kopii uzantonomon"
+copyUsername: "Kopii uzantnomon"
 searchUser: "Serĉi uzanton"
 reply: "Respondi"
-loadMore: "Vidu plu"
-showMore: "Vidi plu"
-youGotNewFollower: "Vi estas eksekvita."
+loadMore: "Vidu pli"
+showMore: "Vidi pli"
+youGotNewFollower: "Vin eksekvis"
+receiveFollowRequest: "Eksekvopeton riceviĝis."
+followRequestAccepted: "La eksekvopeto akceptiĝis."
 mention: "Mencioj"
-mentions: "Mencioj"
-directNotes: "Senperaj notoj"
+mentions: "Al vi"
 importAndExport: "Importaĵo / Eksportaĵo"
 import: "Importi"
 export: "Eksporti"
 files: "Dosieroj"
 download: "Elŝuti"
-driveFileDeleteConfirm: "Ĉu vi certas ke vi volas forviŝi la dosieron \"{name}\"? La notoj kun la aldonaĵo ankaŭ forviŝiĝos."
-unfollowConfirm: "Ĉu vi certas, ke vi volas ne plu sekvi {name}?"
+driveFileDeleteConfirm: "Ĉu vi certas ke vi volas forviŝi la dosierujon {name}? Noto aldonita ĝin ankaŭ foriĝos."
+unfollowConfirm: "Ĉu vi certas, ke vi volas ne plu sekvi {name}'(o)n?"
 lists: "Listoj"
 noLists: "Neniu listo"
 note: "Elsendi noto"
 notes: "Notoj"
-following: "Sekvi"
+following: "Sekvatoj"
 followers: "Sekvantoj"
-followsYou: "Sekvas vin"
+followsYou: "Vin sekvas "
 createList: "Kreii liston"
 error: "Eraro"
 somethingHappened: "Problemo okazis."
@@ -76,13 +78,15 @@ retry: "Reprovi"
 enterListName: "Entajpu nomon de la listo"
 privacy: "Privateco"
 follow: "Sekvi"
-followRequest: "Peti eksekvi"
+followRequest: "Peti akcepti de vi eksekvi"
 followRequests: "Eksekvopetoj"
 unfollow: "Ne plu sekvi"
-renote: "Renotici"
-unrenote: "Forigi renotici"
-cantRenote: "Tiu noto estas renototebla."
-cantReRenote: "Renotigo ne estas renotigebla."
+enterEmoji: "Entajpu emoĵion"
+renote: "Fari renoton"
+unrenote: "Malfari renoton"
+renoted: "Renoton fariĝis."
+cantRenote: "Tiu noto ne estas renototebla."
+cantReRenote: "Oni ne povas fari renoton kiu enhavas renoto."
 quote: "Citi"
 pinnedNote: "Pinglita noto"
 pinned: "Alpingli sur la profilo"
@@ -103,22 +107,37 @@ unblockConfirm: "Ĉu vi certas ke vi volas malbloki la uzanton?"
 suspendConfirm: "Ĉu vi certas ke vi volas frostigi la uzanton?"
 unsuspendConfirm: "Ĉu vi certas ke vi volas fandi la uzanton?"
 selectList: "Elekti liston"
-emojiUrl: "Retadreso de la emoĵio"
+selectAntenna: "Elekti antenon"
+selectWidget: "Elekti enestraĵon"
+editWidgets: "Redakti fenestraĵon"
+editWidgetsExit: "Fini la redaktadon"
+customEmojis: "Personecigitaj emoĵioj"
+emoji: "Emoĵio"
+emojiName: "Nomo de emoĵio"
+emojiUrl: "URL de la bildo de emoĵio"
+addEmoji: "Aldoni emoĵion"
+cacheRemoteFiles: "Havi staplon por foraj dosieroj"
 flagAsBot: "Tiu uzanto estas roboto"
 flagAsCat: "Tiu uzanto estas kato"
 addAccount: "Aldoni konton"
-showOnRemote: "Vidi sur la transa ekzemplo"
+showOnRemote: "Vidi sur la fora ekzemplo"
 general: "Äœenerala"
 searchWith: "Serĉi: {q}"
 youHaveNoLists: "Vi ne havas listojn."
-followConfirm: "Ĉu vi certas, ke vi volas sekvi {name}'n?"
+followConfirm: "Ĉu vi certas ke vi volas sekvi {name}'(o)n?"
 selectUser: "Elekti uzanton"
 annotation: "Komentarioj"
 federation: "Fediverso"
 instances: "Ekzemplo"
+perHour: "Po horo"
+perDay: "Po tago"
 blockThisInstance: "Bloki tiu ekzemplo"
+withNFiles: "{n} dosiero(j)"
 disk: "Diskilo"
-blockedInstances: "Blokitaj ekzemploj"
+instanceInfo: "Informo pri la ekzemplo"
+clearCachedFiles: "Forviŝi datumon en staplo"
+clearCachedFilesConfirm: "Ĉu vi certas, ke vi volas forviŝi ĉiujn transajn dosierojn en la staplo?"
+blockedInstances: "Blokataj ekzemploj"
 muteAndBlock: "Silentitaj / Blokitaj"
 mutedUsers: "Silentigitaj uzantoj"
 blockedUsers: "Blokitaj uzantoj"
@@ -131,8 +150,8 @@ federating: "Konfederado"
 blocked: "Blokita"
 subscribing: "Abonita"
 notResponding: "Alvokato ne disponeblas"
-instanceFollowing: "Sekvi ekzemplon"
-instanceFollowers: "Sekvantoj de la ekzemplo"
+instanceFollowing: "Sekvatoj sur la ekzemplo"
+instanceFollowers: "Sekvantoj el la ekzemplo"
 instanceUsers: "Uzantoj de la ekzemplo"
 changePassword: "Ŝanĝi pasvorton"
 currentPassword: "Aktuala pasvorto"
@@ -140,164 +159,309 @@ newPassword: "Nova pasvorto"
 newPasswordRetype: "Reentajpu la novan pasvorton"
 attachFile: "Aldoni dosieron"
 more: "Plu!"
-usernameOrUserId: "Uzantonomo aÅ­ ID de uzanto"
+usernameOrUserId: "Uzantnomo aÅ­ identigilo de uzanto"
 noSuchUser: "Neniuj uzantoj trovitaj."
-remove: "Forviŝi"
+imageUrl: "URL de bildo"
+remove: "Forigi"
 removed: "Forviŝis"
-removeAreYouSure: "Ĉu vi certas ke vi volas forigi \"{x}\"?"
-deleteAreYouSure: "Ĉu vi certas ke vi volas forigi \"{x}\"?"
-messaging: "Babilejoj"
+removeAreYouSure: "Ĉu vi certas ke vi volas forigi \"{x}\"'(o)n?"
+deleteAreYouSure: "Ĉu vi certas ke vi volas forviŝi \"{x}\"'(o)n?"
+messaging: "Retbabili"
 upload: "Alŝuti"
-fromDrive: "De la diskilo"
-fromUrl: "De retadreso"
-uploadFromUrl: "Aldoni de retadreso"
-uploadFromUrlDescription: "Retadreso de la dosiero kiun vi volu alŝuti"
+fromDrive: "De la diskingo en Miskejo"
+fromUrl: "De URL"
+uploadFromUrl: "Alŝuti de URL"
+uploadFromUrlDescription: "URL de la dosiero kiun vi volu alŝuti"
 games: "Ludoj sur Miskejo"
 messageRead: "Legita"
 startMessaging: "Komenci babiladon"
 tos: "Kondiĉoj de Uzado"
 start: "Komenciĝi"
-home: "Ĉefpaĝo"
-drive: "Diskilo"
+home: "Hejmo"
+remoteUserCaution: "Ĉi tiu Infomoj estas ne tute ekzakta pro distanca uzanto."
+images: "Bildoj"
+birthday: "Naskiĝtago"
+registeredDate: "Registriĝdato"
+drive: "Diskingo"
 fileName: "Dosiernomo"
 selectFile: "Elekti dosieron"
 selectFiles: "Elekti dosieron"
-renameFile: "Renomigi dosieron"
+renameFile: "Alinomi la dosieron"
+folderName: "Nomo de la dosierujo"
+renameFolder: "Alinomi la dosierujon"
 deleteFolder: "Forviŝi dosierujon"
 addFile: "Aldoni dosieron"
-emptyDrive: "La diskilo enhavas neniun."
+emptyDrive: "La diskingo enhavas neniun."
 unableToDelete: "Ne forigebla"
 inputNewFileName: "Entajpu nova dosiernomon"
-hasChildFilesOrFolders: "La dosierujo estas neforviŝebla pro tio, ke ĝi enhavas dosieron."
-copyUrl: "Kopii retadreson"
+inputNewFolderName: "Entajpu nova nomon de la dosierujo"
+hasChildFilesOrFolders: "La dosierujo enhavas dosieron kaj ne estas forigebla."
+copyUrl: "Kopii URL"
+rename: "Alinomi"
+avatar: "Ikono"
 nsfw: "Enhavo ne estas deca por laborejo (NSFW)"
 instanceName: "Nomo de la ekzemplo"
+maintainerName: "Nomo de la administranto"
+maintainerEmail: "Retpoŝto de la administranto"
+tosUrl: "URL de kondiĉoj de uzado"
+thisYear: "Ĉi-jare"
+thisMonth: "Ĉi-monate"
+today: "HodiaÅ­"
+dayX: "{day}-a"
+monthX: "{month}"
+yearX: "La jaro {year}"
 connectService: "Konekti"
 disconnectService: "Farkonektiĝi"
-driveCapacityPerLocalAccount: "Volumo po unu loka-uzanto"
-driveCapacityPerRemoteAccount: "Volumo po unu transa uzanto"
+driveCapacityPerLocalAccount: "Volumo de miskej-diskingo po unu loka uzanto"
+driveCapacityPerRemoteAccount: "Volumo de miskej-diskingo po unu transa uzanto"
+iconUrl: "URL de la ikono (retpaĝsimbolo, ktp.)"
 pinnedUsers: "Alpinglita uzanto"
 pinnedNotes: "Pinglita noto"
+name: "Nomo"
 withFileAntenna: "Nur kun aldonaĵo"
 notesAndReplies: "Kun respondoj"
 withFiles: "Kun aldonaĵo"
 silenceConfirm: "Ĉu vi certas ke vi volas silentigi la uzanton?"
-unsilenceConfirm: "Ĉu vi certas ke vi volas malsilentigi la uzanton?"
+unsilenceConfirm: "Ĉu vi certas, ke vi ne plu volas ke la uzanto silentas?"
+popularTags: "Popularaj kradvortoj"
 userList: "Listoj"
 aboutMisskey: "Pri Miskejo"
+securityKeyName: "Nomo de la ŝlosilo"
 passwordLessLogin: "Ensaluti sen pasvorto"
 resetPassword: "Restarigi pasvorton"
 newPasswordIs: "La nova pasvorto estas {password}."
+cacheClear: "Forviŝi datumon en stalo"
+help: "Manlibro de uzado"
 inputMessageHere: "Entajpu masaĝo tie ĉi"
+groupName: "Grupa nomo"
+messagingWithUser: "Mesaĝado kun uzanto"
+messagingWithGroup: "Mesaĝi kun grupo"
 noteOf: "Noto de {user}"
+noMessagesYet: "Neniu mesaĝo"
 newMessageExists: "Vi ricevis novan mesaĝon."
 onlyOneFileCanBeAttached: "Vi povas aldoni nur unu dosieron po unu mesaĝo."
 uiLanguage: "Lingvo de la interfaco"
+tags: "Etikedoj"
+createAccount: "Krei konton"
+existingAccount: "Ekzista konto"
 noFollowRequests: "Vi ne havas eksekvopetojn."
+openImageInNewTab: "Fermi la bildo sur nova tablo"
 local: "Loka"
 remote: "Transa"
+accountSettings: "Agordoj de Konto"
+numberOfDays: "Nombro de tagoj"
 hideThisNote: "Kaŝi tiun noton"
-deleteAllFiles: "Forvisi ĉiujn dosierojn"
+objectStorageBaseUrl: "Baza URL"
+deleteAll: "Forviŝi ĉiujn"
+showInPage: "Vidi en paĝo"
+deleteAllFiles: "Forviŝi ĉiujn dosierojn"
 deleteAllFilesConfirm: "Ĉu vi certas, ke vi volas forviŝi ĉiujn viajn dosierojn?"
+deletedNote: "Forviŝita noto"
 invisibleNote: "Malpublika noto"
+poll: "Balotujo"
 emailServer: "Retpoŝta servilo"
 email: "Retpoŝto"
-emailAddress: "Retpoŝtadreso"
-smtpUser: "Uzantonomo"
+emailAddress: "Retpoŝta adreso"
+smtpUser: "Uzantnomo"
 smtpPass: "Pasvorto"
 userSaysSomething: "{name} parolis ion"
+display: "Vidi"
 database: "Datumbazo"
 channel: "Kanalo"
-fileIdOrUrl: "Dosirero ID aÅ­ retadreso"
+fileIdOrUrl: "Dosiera identigilo aÅ­ URL"
+abuseReports: "Signali"
+reportAbuse: "Signali"
+reportAbuseOf: "Signali {name}'(o)n"
 send: "Sendi"
-i18nInfo: "Tradukojn de Misskey en diversaj lingvoj faras volontuloj. Vi povus kunlabori en tradukado sur {link}, se vi volus."
-driveFilesCount: "Numero de dosieroj en la diskilo"
-onlineUsersCount: "{n} uzanto(j) estas surkonektita"
+i18nInfo: "Misskey estas tradukata en diversaj lingvoj far volontuloj. Oni povas kontribui por la tradukado sur {link}."
+followingCount: "Numero de sekvatoj"
+followersCount: "Numero de sekvantoj"
+yes: "Jes"
+no: "Ne"
+driveFilesCount: "Numero de dosieroj en la diskingo"
+noteFavoritesCount: "Numero de la preferataj notoj"
+makeExplorable: "Igi videbla konto sur la paĝo \"Esplorado\""
+showTitlebar: "Montri titolobredon"
+clearCache: "Forviŝi datumon en staplo"
+onlineUsersCount: "{n} uzanto(j) estas surlinea"
 nUsers: "{n} uzanto(j)"
+saveAs: "Konservi kiel…"
+createdAt: "Kreita je"
+updatedAt: "Laste ĝisdatigita"
+deleteConfirm: "Ĉu certas forviŝi?"
+closeAccount: "Forigi konton"
 emailNotification: "Sciigoj per retpoŝto"
 publish: "Publikigi"
 inChannelSearch: "Serĉi en kanalo"
 typingUsers: "{users} estas entajpanta(j)..."
 online: "Surkonektita"
 offline: "Forkonektita"
-instanceBlocking: "Ekzempla blokado"
+instanceBlocking: "Blokado de ekzemplo"
+selectAccount: "Elekti konton"
 user: "Uzanto"
+accounts: "Kontoj"
+global: "Konfederacia"
+sent: "Sendi"
+hashtags: "Kradvorto"
 _gallery:
   liked: "Åœatitaj notoj"
 _email:
   _follow:
-    title: "Vi estas eksekvita."
+    title: "Vin eksekvis"
   _receiveFollowRequest:
     title: "Vi ricevis eksekvopeton."
 _aboutMisskey:
-  about: "Misskey estas malferma koda programo evoluigata far syuilo ekde la 2014."
+  about: "Misskey estas malfermitkoda programo evoluigata de syuilo ekde la 2014."
+  contributors: "Precipaj kontribuantoj"
+  allContributors: "Ĉiuj kontribuintoj"
   source: "Fontkodo"
-  translation: "Traduki Misskey'on"
+  translation: "Traduki Miskejon"
+  patrons: "Mecenatoj"
 _mfm:
   mention: "Mencioj"
-  url: "Retadreso"
+  hashtag: "Kradvorto"
+  url: "URL"
   blockCode: "Kodo (Ujo)"
   blockMath: "Formulo (Ujo)"
   quote: "Citi"
+  emoji: "Personecigitaj emoĵioj"
   search: "Serĉi"
 _instanceTicker:
   none: "Ne montri"
   remote: "Montri al transaj uzantoj"
+  always: "Ĉiam montri"
 _channel:
   create: "Krei kanalon"
   edit: "Redakti kanalon"
-  following: "Sekvaton"
+  following: "Sekvata"
+_menuDisplay:
+  hide: "Kaŝi"
+_wordMute:
+  muteWords: "Silentanta vorto"
+  mutedNotes: "Silentigataj notoj"
 _theme:
   keys:
+    hashtag: "Kradvorto"
     mention: "Mencioj"
-    renote: "Renotici"
+    renote: "Fari renoton"
 _sfx:
   note: "Nova noto"
+  noteMy: "Mia noto"
   notification: "Sciigoj"
-  chat: "Babilejoj"
-  channel: "Kanala sciigoj"
+  chat: "Retbabilejo"
+  chatBg: "Retbabilejo (BG)"
+  antenna: "Ricevo de anteno"
+  channel: "Sciigoj de kanalo"
+_ago:
+  secondsAgo: "AntaÅ­ {n} sekundoj"
+  minutesAgo: "AntaÅ­ {n} minutoj"
+  hoursAgo: "AntaÅ­ {n} horoj"
+  daysAgo: "AntaÅ­ {n} tagoj"
+  weeksAgo: "AntaÅ­ {n} semajnoj"
+  monthsAgo: "AntaÅ­ {n} monatoj"
+  yearsAgo: "AntaÅ­ {n} jaroj"
+_time:
+  second: "sek"
+  minute: "min"
+  hour: "hor"
+  day: "Tago"
 _tutorial:
-  title: "Uzado de Miskejo"
+  title: "Uzado de Misskey (Ĉi-sekve Miskejo)"
+  step1_1: "Bonvenon."
+  step7_2: "Se vi volus scii pli pri Miskejon, volu rigardi la fako {help}."
 _permissions:
   "read:blocks": "Vidi la listo de la uzantoj kiun vi blokis."
-  "read:drive": "Vidi dosierojn en la diskilo"
-  "read:channels": "Legi kanalon"
+  "write:blocks": "Redakti la liston de la uzantoj kiun vi blokis."
+  "read:drive": "Ĉia operacio por legi la informon de dosiero en via diskingo de Miskejo"
+  "write:drive": "Ĉia operacio por skribi, forviŝi, aŭ alimaniere ŝanĝi la informon de dosiero en via diskingo de Miskejo"
+  "read:favorites": "Vidi la listo de la preferoj"
+  "read:following": "Vidi tion kion vi sekvas"
+  "write:following": "Sekvi kaj/aÅ­ malsekvi alian uzanton"
+  "read:messaging": "Vidi via retbabilado"
+  "write:notes": "Krei / Forviŝi noton"
+  "read:notifications": "Vidi sciigojn"
+  "read:reactions": "Vidi reagojn"
+  "read:pages": "Vidi via paĝojn"
+  "read:page-likes": "Vidi ŝatojn de paĝo"
+  "read:channels": "Vidi kanalojn"
+_antennaSources:
+  homeTimeline: "Notoj far uzantoj sekvataj de vi"
+_weekday:
+  sunday: "dimanĉo"
+  monday: "lundo"
+  tuesday: "mardo"
+  wednesday: "merkredo"
+  thursday: "ĵaŭdo"
+  friday: "vendredo"
+  saturday: "sabato"
 _widgets:
   notifications: "Sciigoj"
-  timeline: "Tempolinio"
+  timeline: "Templinio"
+  clock: "Horloĝo"
   federation: "Fediverso"
   onlineUsers: "Surkonektita uzanto"
 _cw:
-  show: "Vidu plu"
+  show: "Vidu pli"
   files: "{count} dosiero(j)"
+_poll:
+  choiceN: "Balotilo {n}"
+  noMore: "Oni ne plu povas aldoni."
+  infinite: "Neniam"
+  deadlineTime: "hor"
+  votesCount: "{n} balotiloj"
+  vote: "Baloti"
+  closed: "Oni jam balotis ĝin"
 _visibility:
-  publicDescription: "Via noto aperiĝos sur konfederacia tempolinio"
-  home: "Ĉefpaĝo"
-  homeDescription: "Elsendi nur sur hejma tempolinio"
+  publicDescription: "Via noto aperiĝos sur la konfederacia templinio"
+  home: "Hejmo"
+  homeDescription: "Elsendi nur sur la hejmtemplinio"
   followers: "Sekvantoj"
-  followersDescription: "Elsendi nur al sekvantoj de mi"
+  followersDescription: "Elsendi nur al sekvantoj al mi"
   localOnly: "Nur loka"
-  localOnlyDescription: "Nelegabla al transaj uzantoj"
+  localOnlyDescription: "Ne montri al transaj uzantoj"
 _postForm:
-  channelPlaceholder: "Elsendi sur la kanalo"
+  replyPlaceholder: "Respondado al tiu noto..."
+  quotePlaceholder: "Citado tiun noton..."
+  channelPlaceholder: "Sendi sur la kanalo"
 _profile:
-  username: "Uzantonomo"
+  name: "Nomo"
+  username: "Uzantnomo"
+  changeAvatar: "Ŝanĝi profilbildon"
 _exportOrImport:
-  followingList: "Sekvi"
-  muteList: "Silentigi"
+  followingList: "Sekvataj"
+  muteList: "Silentigado"
   blockingList: "Blokado"
   userLists: "Listoj"
 _timelines:
   home: "Hejmo"
   local: "Loka"
-  social: "Hejmo kaj loka"
+  social: "Transa"
+  global: "Konfederacia"
 _rooms:
+  translate: "Movi"
+  chooseImage: "Elekti bildon"
   _furnitures:
     server: "Servilo"
+    moon: "La luno"
 _pages:
+  deleted: "La paĝo estas forigita."
+  viewPage: "Vidi via paĝojn"
+  my: "Miaj paĝoj"
   content: "Blokado de paĝo"
-  url: "Retadreso de la paĝo"
-  chooseBlock: "Aldoni blokado"
+  url: "URL de paĝo"
+  chooseBlock: "Aldoni ujon"
+  blocks:
+    image: "Bildoj"
+    _post:
+      canvasId: "Kanvasa identigilo"
+    _canvas:
+      id: "Kanvasa identigilo"
+    _note:
+      id: "Identigilo de noto"
+    _button:
+      _action:
+        _pushEvent:
+          event: "Nomo de la evento"
   script:
     categories:
       list: "Listoj"
@@ -317,21 +481,26 @@ _pages:
         arg1: "Listoj"
     types:
       array: "Listoj"
+      stringArray: "List de teksto"
 _notification:
   fileUploaded: "La dosiero sukcese alŝutiĝis."
-  youWereFollowed: "Vi estas eksekvita."
+  youGotPoll: "{name} balotis"
+  youGotMessagingMessageFromUser: "{name} sentis mesaĝon al vi."
+  youWereFollowed: "Vin eksekvis"
   youReceivedFollowRequest: "Vi ricevis eksekvopeton."
   yourFollowRequestAccepted: "Via eksekvopeto estas akceptita."
   _types:
-    follow: "Sekvi"
+    follow: "Sekvatoj"
     mention: "Mencioj"
-    renote: "Renotici"
+    renote: "Fari renoton"
     quote: "Citi"
     reaction: "Reagoj"
     receiveFollowRequest: "Eksekvopeto ricevita"
+    followRequestAccepted: "Eksekvopeto akceptiĝis."
 _deck:
+  profile: "Agordaro"
   _columns:
     notifications: "Sciigoj"
-    tl: "Tempolinio"
+    tl: "Templinio"
     list: "Listoj"
-    mentions: "Mencioj"
+    mentions: "Al vi"
diff --git a/locales/es-ES.yml b/locales/es-ES.yml
index 81baa9b37f..8c3e6f13ee 100644
--- a/locales/es-ES.yml
+++ b/locales/es-ES.yml
@@ -665,6 +665,10 @@ administration: "Administrar"
 expiration: "Termina el"
 middle: "Mediano"
 global: "Global"
+sent: "Enviar"
+hashtags: "Hashtag"
+_docs:
+  admin: "Administrar"
 _ad:
   back: "Deseleccionar"
 _gallery:
diff --git a/locales/fr-FR.yml b/locales/fr-FR.yml
index 1ebe492b8f..5a1db402ac 100644
--- a/locales/fr-FR.yml
+++ b/locales/fr-FR.yml
@@ -528,6 +528,7 @@ removeAllFollowing: "Retenir tous les abonnements"
 removeAllFollowingDescription: "Se désabonner de tous les comptes de {host}. Veuillez lancer cette action uniquement si l’instance n’existe plus."
 userSuspended: "Cet·te utilisateur·rice a été suspendu·e."
 userSilenced: "Cette utilisateur·trice a été mis·e en sourdine."
+menu: "Menu"
 divider: "Séparateur"
 addItem: "Ajouter un élément"
 rooms: "Chambre"
@@ -760,7 +761,18 @@ middle: "Moyen"
 low: "Basse"
 emailNotConfiguredWarning: "Vous n'avez pas configuré d'adresse e-mail."
 ratio: "Ratio"
+customCss: "CSS personnalisé"
+customCssWarn: "Utilisez cette fonctionnalité uniquement si vous savez exactement ce que vous faites. Une configuration inadaptée peut empêcher le client de s'exécuter normalement."
 global: "Global"
+squareAvatars: "Avatars carrés"
+sent: "Envoyer"
+hashtags: "Hashtags"
+_docs:
+  continueReading: "Lire plus"
+  features: "Fonctionnalités"
+  generalTopics: "Sujets généraux"
+  advancedTopics: "Sujets avancés"
+  admin: "Gestion"
 _ad:
   back: "Retour"
   reduceFrequencyOfThisAd: "Voir cette publicité moins souvent"
@@ -911,6 +923,9 @@ _channel:
   usersCount: "{n} Participant·e·s"
   notesCount: "{n} Notes"
 _menuDisplay:
+  sideFull: "Latéral"
+  sideIcon: "Latéral (icônes)"
+  top: "Haut de page"
   hide: "Masquer"
 _wordMute:
   muteWords: "Mots à filtrer"
diff --git a/locales/id-ID.yml b/locales/id-ID.yml
index 7b5cd6b869..16f4d4468b 100644
--- a/locales/id-ID.yml
+++ b/locales/id-ID.yml
@@ -528,6 +528,7 @@ removeAllFollowing: "Tahan semua mengikuti"
 removeAllFollowingDescription: "Batal mengikuti semua akun dari {host}. Mohon jalankan ini ketika instansi sudah tidak ada lagi."
 userSuspended: "Pengguna ini telah dibekukan."
 userSilenced: "Pengguna ini telah dibungkam."
+menu: "Menu"
 divider: "Pembagi"
 addItem: "Tambahkan item"
 rooms: "Ruang"
@@ -760,7 +761,14 @@ middle: "Sedang"
 low: "Rendah"
 emailNotConfiguredWarning: "Alamat surel tidak disetel."
 ratio: "Rasio"
+customCss: "Custom CSS"
+customCssWarn: "Pengaturan ini seharusnya digunakan jika kamu tahu cara kerjanya. Memasukkan nilai yang tidak tepat dapat menyebabkan klien tidak berfungsi semestinya."
 global: "Global"
+squareAvatars: "Tampilkan avatar sebagai persegi"
+sent: "Kirim"
+hashtags: "Tagar"
+_docs:
+  admin: "Manajemen"
 _ad:
   back: "Kembali"
   reduceFrequencyOfThisAd: "Tampilkan iklan ini lebih sedikit"
@@ -911,6 +919,9 @@ _channel:
   usersCount: "{n} Partisipan"
   notesCount: "terdapat {n} catatan"
 _menuDisplay:
+  sideFull: "Horisontal"
+  sideIcon: "Horisontal (Ikon)"
+  top: "Atas"
   hide: "Sembunyikan"
 _wordMute:
   muteWords: "Kata yang dibisukan"
diff --git a/locales/it-IT.yml b/locales/it-IT.yml
index 0ac8ccfba5..70672aa0a8 100644
--- a/locales/it-IT.yml
+++ b/locales/it-IT.yml
@@ -741,6 +741,12 @@ low: "Bassa"
 emailNotConfiguredWarning: "Non hai impostato nessun indirizzo e-mail."
 ratio: "Rapporto"
 global: "Federata"
+sent: "Inviare"
+hashtags: "Hashtag"
+_docs:
+  continueReading: "Leggi di più"
+  features: "Funzionalità"
+  admin: "Gestione"
 _ad:
   back: "Indietro"
   reduceFrequencyOfThisAd: "Visualizza questa pubblicità meno spesso"
diff --git a/locales/ja-KS.yml b/locales/ja-KS.yml
index ef951adce6..05542e8198 100644
--- a/locales/ja-KS.yml
+++ b/locales/ja-KS.yml
@@ -647,6 +647,10 @@ high: "高い"
 middle: "中"
 low: "低い"
 global: "グローバル"
+sent: "送信"
+hashtags: "ハッシュタグ"
+_docs:
+  admin: "管理"
 _ad:
   back: "戻る"
 _gallery:
diff --git a/locales/ko-KR.yml b/locales/ko-KR.yml
index 50d920bf55..bcd3a0fe44 100644
--- a/locales/ko-KR.yml
+++ b/locales/ko-KR.yml
@@ -528,6 +528,7 @@ removeAllFollowing: "모든 팔로잉 해제"
 removeAllFollowingDescription: "{host}(으)로부터 모든 팔로잉을 해제합니다. 해당 인스턴스가 더 이상 존재하지 않게 된 경우 등에 실행해 주세요."
 userSuspended: "이 계정은 정지된 상태입니다."
 userSilenced: "이 계정은 사일런스된 상태입니다."
+menu: "메뉴"
 divider: "구분선"
 addItem: "항목 추가"
 rooms: "ë°©"
@@ -760,7 +761,14 @@ middle: "보통"
 low: "낮음"
 emailNotConfiguredWarning: "메일 주소가 설정되어 있지 않습니다."
 ratio: "비율"
+customCss: "CSS 사용자화"
+customCssWarn: "이 설정은 기능을 알고 있는 경우에만 사용해야 합니다. 잘못된 값을 입력하면 클라이언트가 정상적으로 작동하지 않을 수 있습니다."
 global: "글로벌"
+squareAvatars: "프로필 아이콘을 사각형으로 표시"
+sent: "전송"
+hashtags: "해시태그"
+_docs:
+  admin: "관리"
 _ad:
   back: "뒤로"
   reduceFrequencyOfThisAd: "이 광고의 표시 빈도 낮추기"
@@ -911,6 +919,9 @@ _channel:
   usersCount: "{n}명 참여 중"
   notesCount: "{n}노트"
 _menuDisplay:
+  sideFull: "가로"
+  sideIcon: "가로(아이콘)"
+  top: "상단"
   hide: "숨기기"
 _wordMute:
   muteWords: "뮤트할 단어"
diff --git a/locales/pl-PL.yml b/locales/pl-PL.yml
index db6241c019..eafd072a9f 100644
--- a/locales/pl-PL.yml
+++ b/locales/pl-PL.yml
@@ -735,6 +735,10 @@ low: "Niski"
 emailNotConfiguredWarning: "Nie podano adresu e-mail"
 ratio: "Stosunek"
 global: "Globalna"
+sent: "Wyślij"
+hashtags: "Hashtag"
+_docs:
+  admin: "ZarzÄ…dzanie"
 _ad:
   back: "Wróć"
   reduceFrequencyOfThisAd: "Pokazuj tÄ™ reklamÄ™ rzadziej"
diff --git a/locales/ru-RU.yml b/locales/ru-RU.yml
index 119a78de22..21b38651a6 100644
--- a/locales/ru-RU.yml
+++ b/locales/ru-RU.yml
@@ -761,6 +761,14 @@ low: "Низкий"
 emailNotConfiguredWarning: "Не указан адрес электронной почты"
 ratio: "Соотношение"
 global: "Всеобщая"
+sent: "Отправить"
+hashtags: "Хэштег"
+_docs:
+  continueReading: "Читать подробнее"
+  features: "Возможности"
+  generalTopics: "Основные темы"
+  advancedTopics: "Дополнительные темы"
+  admin: "Управление"
 _ad:
   back: "Выход"
   reduceFrequencyOfThisAd: "Реже показывать эту рекламу"
@@ -859,6 +867,8 @@ _mfm:
   blurDescription: "Размывает текст до нечитаемости, будто его поместили за матовое стекло. Наведение указателя мыши на размытый текст возвращает чёткость."
   font: "Шрифт"
   fontDescription: "Так можно писать произвольным шрифтом."
+  rainbow: "Радуга"
+  rainbowDescription: "Заставлять содержимое отображаться в цветах радуги."
 _reversi:
   reversi: "Реверси"
   gameSettings: "Настройки игры"
@@ -911,6 +921,9 @@ _channel:
   usersCount: "Участников: {n}"
   notesCount: "Заметок: {n}"
 _menuDisplay:
+  sideFull: "Сторона"
+  sideIcon: "Сторона (иконки)"
+  top: "Вверх"
   hide: "Спрятать"
 _wordMute:
   muteWords: "Скрыть слово"
diff --git a/locales/uk-UA.yml b/locales/uk-UA.yml
index 893fb3bcdc..56ffd3e78f 100644
--- a/locales/uk-UA.yml
+++ b/locales/uk-UA.yml
@@ -689,6 +689,10 @@ administration: "Управління"
 expiration: "Опитування закінчується"
 middle: "Середній"
 global: "Глобальна"
+sent: "Відправити"
+hashtags: "Хештеґ"
+_docs:
+  admin: "Управління"
 _ad:
   back: "Назад"
 _gallery:
diff --git a/locales/zh-CN.yml b/locales/zh-CN.yml
index 2612652c54..6b5182c6f2 100644
--- a/locales/zh-CN.yml
+++ b/locales/zh-CN.yml
@@ -765,6 +765,16 @@ customCss: "自定义 CSS"
 customCssWarn: "这些设置必须有相关的基础知识,不当的配置可能导致客户端无法正常使用!"
 global: "全局"
 squareAvatars: "显示方形头像图标"
+sent: "发送"
+received: "收取"
+searchResult: "搜索结果"
+hashtags: "话题标签"
+_docs:
+  continueReading: "继续阅读"
+  features: "特性"
+  generalTopics: "通常提示"
+  advancedTopics: "进阶提示"
+  admin: "管理"
 _ad:
   back: "返回"
   reduceFrequencyOfThisAd: "减少此广告的频率"
@@ -863,6 +873,8 @@ _mfm:
   blurDescription: "产生模糊效果。将鼠标指针放在上面即可将内容显示出来。"
   font: "字体"
   fontDescription: "可以设置内容所使用的字体。"
+  rainbow: "彩虹"
+  rainbowDescription: "用彩虹色来显示内容。"
 _reversi:
   reversi: "黑白棋"
   gameSettings: "对局设置"
diff --git a/locales/zh-TW.yml b/locales/zh-TW.yml
index 7010220fc1..bae072b0bb 100644
--- a/locales/zh-TW.yml
+++ b/locales/zh-TW.yml
@@ -751,6 +751,10 @@ low: "低"
 emailNotConfiguredWarning: "沒有設定電子郵件地址"
 ratio: "%"
 global: "公開"
+sent: "發送"
+hashtags: "#tag"
+_docs:
+  admin: "管理"
 _ad:
   back: "返回"
   reduceFrequencyOfThisAd: "降低此廣告的頻率 "
diff --git a/src/docs/eo-UY/custom-emoji.md b/src/docs/eo-UY/custom-emoji.md
index ed2e92be16..ab8c6c7f12 100644
--- a/src/docs/eo-UY/custom-emoji.md
+++ b/src/docs/eo-UY/custom-emoji.md
@@ -1,2 +1,2 @@
-# カスタム絵文字
+# Personecigitaj emoĵioj
 カスタム絵文字は、インスタンスで用意された画像を絵文字のように使える機能です。 ノート、リアクション、チャット、自己紹介、名前などの場所で使うことができます。 カスタム絵文字をそれらの場所で使うには、絵文字ピッカーボタン(ある場合)を押すか、`:`を入力して絵文字サジェストを表示します。 テキスト内に`:foo:`のような形式の文字列が見つかると、`foo`の部分がカスタム絵文字名と解釈され、表示時には対応したカスタム絵文字に置き換わります。
diff --git a/src/docs/eo-UY/follow.md b/src/docs/eo-UY/follow.md
index 6208b86e3c..6199895eba 100644
--- a/src/docs/eo-UY/follow.md
+++ b/src/docs/eo-UY/follow.md
@@ -1,2 +1,2 @@
-# Sekvi
+# Sekvataj
 ユーザーをフォローすると、タイムラインにそのユーザーの投稿が表示されるようになります。ただし、他のユーザーに対する返信は含まれません。 ユーザーをフォローするには、ユーザーページの「フォロー」ボタンをクリックします。フォローを解除するには、もう一度クリックします。
diff --git a/src/docs/eo-UY/keyboard-shortcut.md b/src/docs/eo-UY/keyboard-shortcut.md
index 1765272dab..1efd76f66d 100644
--- a/src/docs/eo-UY/keyboard-shortcut.md
+++ b/src/docs/eo-UY/keyboard-shortcut.md
@@ -1,6 +1,6 @@
 # キーボードショートカット
 
-## グローバル
+## Konfederacia
 これらのショートカットは基本的にどこでも使えます。
 <table>
     <thead>
diff --git a/src/docs/eo-UY/mute.md b/src/docs/eo-UY/mute.md
index 1835bc8d92..3a36c00f7a 100644
--- a/src/docs/eo-UY/mute.md
+++ b/src/docs/eo-UY/mute.md
@@ -1,4 +1,4 @@
-# Mutigi
+# Silentigi
 
 ユーザーをミュートすると、そのユーザーに関する次のコンテンツがMisskeyに表示されなくなります:
 
diff --git a/src/docs/eo-UY/stream.md b/src/docs/eo-UY/stream.md
index 45867d28d2..f06eb96bef 100644
--- a/src/docs/eo-UY/stream.md
+++ b/src/docs/eo-UY/stream.md
@@ -31,7 +31,7 @@
 
 **ストリームでのやり取りはすべてJSONです。**
 
-## Kanaloj
+## Kanalo
 MisskeyのストリーミングAPIにはチャンネルという概念があります。これは、送受信する情報を分離するための仕組みです。 Misskeyのストリームに接続しただけでは、まだリアルタイムでタイムラインの投稿を受信したりはできません。 ストリーム上でチャンネルに接続することで、様々な情報を受け取ったり情報を送信したりすることができるようになります。
 
 ### チャンネルに接続する
diff --git a/src/docs/eo-UY/timelines.md b/src/docs/eo-UY/timelines.md
index e40e99537c..8f0e8a93a5 100644
--- a/src/docs/eo-UY/timelines.md
+++ b/src/docs/eo-UY/timelines.md
@@ -2,7 +2,7 @@
 
 https://docs.google.com/spreadsheets/d/1lxQ2ugKrhz58Bg96HTDK_2F98BUritkMyIiBkOByjHA/edit?usp=sharing
 
-## Ĉefpaĝo
+## Hejmo
 自分のフォローしているユーザーの投稿
 
 ## Loka
@@ -11,5 +11,5 @@ https://docs.google.com/spreadsheets/d/1lxQ2ugKrhz58Bg96HTDK_2F98BUritkMyIiBkOBy
 ## Hejmo kaj loka
 自分のフォローしているユーザーの投稿と、全てのローカルユーザーの「ホーム」指定されていない投稿
 
-## グローバル
+## Konfederacia
 全てのローカルユーザーの「ホーム」指定されていない投稿と、サーバーに届いた全てのリモートユーザーの「ホーム」指定されていない投稿
diff --git a/src/docs/id-ID/create-plugin.md b/src/docs/id-ID/create-plugin.md
index ec17b95186..5f6b3daa99 100644
--- a/src/docs/id-ID/create-plugin.md
+++ b/src/docs/id-ID/create-plugin.md
@@ -1,4 +1,4 @@
-# プラグインの作成
+# Membuat Plugin
 Misskey Webクライアントのプラグイン機能を使うと、クライアントを拡張し、様々な機能を追加できます。 ここではプラグインの作成にあたってのメタデータ定義や、AiScript APIリファレンスを掲載します。
 
 ## Metadata
-- 
GitLab


From 7705a7928e1ea952b7185162844576575c1a4bab Mon Sep 17 00:00:00 2001
From: syuilo <Syuilotan@yahoo.co.jp>
Date: Sat, 7 Aug 2021 20:39:27 +0900
Subject: [PATCH 57/70] fix bug that docs not loading

---
 src/server/web/index.ts | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/server/web/index.ts b/src/server/web/index.ts
index a732e7f5b4..30a53a703b 100644
--- a/src/server/web/index.ts
+++ b/src/server/web/index.ts
@@ -168,7 +168,7 @@ router.get('/docs.json', async ctx => {
 		}
 
 		docs.push({
-			path: path.replace(`${dirPath}/`, '').split('.')[0],
+			path: path.match(new RegExp(`docs\/${lang}\/(.+?)\.md$`))![1],
 			title: markdown.renderer.render(headingTokens, {}, {}),
 			summary: markdown.renderer.render(firstParagrapfTokens, {}, {}),
 		});
-- 
GitLab


From 39a8942daf6085fbd919e73256d2f688d817ccd4 Mon Sep 17 00:00:00 2001
From: syuilo <Syuilotan@yahoo.co.jp>
Date: Sat, 7 Aug 2021 22:06:50 +0900
Subject: [PATCH 58/70] :art:

---
 src/client/ui/default.vue | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/src/client/ui/default.vue b/src/client/ui/default.vue
index 645f67c123..3fc666c833 100644
--- a/src/client/ui/default.vue
+++ b/src/client/ui/default.vue
@@ -12,7 +12,7 @@
 			</div>
 		</template>
 
-		<main class="main _panel" @contextmenu.stop="onContextmenu">
+		<main class="main" @contextmenu.stop="onContextmenu">
 			<header class="header" @click="onHeaderClick">
 				<XHeader :info="pageInfo" :back-button="true" @back="back()"/>
 			</header>
@@ -292,7 +292,10 @@ export default defineComponent({
 			width: 750px;
 			margin: 0 16px 0 0;
 			background: var(--panel);
+			border-left: solid 1px var(--divider);
+			border-right: solid 1px var(--divider);
 			border-radius: 0;
+			overflow: clip;
 			--margin: 12px;
 
 			> .header {
@@ -343,6 +346,7 @@ export default defineComponent({
 
 			> .main {
 				margin-top: 0;
+				border: solid 1px var(--divider);
 				border-radius: var(--radius);
 			}
 
-- 
GitLab


From c968633d155587083d280a48c6b425064f5f44c6 Mon Sep 17 00:00:00 2001
From: syuilo <Syuilotan@yahoo.co.jp>
Date: Sat, 7 Aug 2021 23:43:42 +0900
Subject: [PATCH 59/70] Update misskey.md

---
 src/docs/ja-JP/general/misskey.md | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/src/docs/ja-JP/general/misskey.md b/src/docs/ja-JP/general/misskey.md
index 97ffd23eb2..d364780ec7 100644
--- a/src/docs/ja-JP/general/misskey.md
+++ b/src/docs/ja-JP/general/misskey.md
@@ -18,7 +18,7 @@ Misskeyはオープンソースの分散型マイクロブログプラットフ
 
 ## 常にオープンソース
 Misskeyはこれまでもこれからも、オープンソースであり続けます。オープンソースとは、簡単に言うと<b>ソフトウェアのソースコード(プログラム)が公開されている</b>ことです。ソースコードの修正や再配布が可能であることを定義に含めることもあります。
-Misskeyのすべてのソースコードは[AGPL](https://github.com/misskey-dev/misskey/blob/develop/LICENSE)というオープンソースライセンスの下に[公開]((https://github.com/misskey-dev))されていて、誰でも自由に閲覧、使用、修正、改変、再配布をすることができます。
+Misskeyのすべてのソースコードは[AGPL](https://github.com/misskey-dev/misskey/blob/develop/LICENSE)というオープンソースライセンスの下に[公開](https://github.com/misskey-dev)されていて、誰でも自由に閲覧、使用、修正、改変、再配布をすることができます。
 オープンソースは、自分で好きなように変えたり、有害な処理が含まれていないことを確認することができたり、誰でも開発に参加できるなどの、様々なメリットがあります。
 上述の分散型を実現するためにも、オープンソースであるということは必要不可欠な要素です。
 再び引き合いに出しますが、TwitterやFacebookなどの利益を得ているほとんどのサービスはオープンソースではありません。
@@ -84,6 +84,8 @@ Misskeyは分散型なため、各サーバーにそれぞれ異なった運営
 他にも、サーバーの規模、ユーザー層、国および言語、運営者が信頼できるかどうか、などの観点があります。
 なお、Misskey公式のサーバーというものはありません。自身で新しくサーバーを作成するという選択肢もあります。
 
+基本的にどのサーバーを選んだとしても、他の全てのサーバーのユーザーと繋がることができます。
+
 ### サーバーを建てるにはどうしたらいいですか?
 Misskeyサーバーの作成に興味を持っていただきありがとうございます。
 2021年現在、Misskeyのホスティングサービスは存在しないため、サーバーの作成にはある程度の知識が必要です。
-- 
GitLab


From 65858dab3e2656f44b0be668c994781cfb4b419d Mon Sep 17 00:00:00 2001
From: syuilo <Syuilotan@yahoo.co.jp>
Date: Sun, 8 Aug 2021 12:19:10 +0900
Subject: [PATCH 60/70] Improve client

---
 src/client/components/drive.file.vue          |   2 +-
 src/client/components/drive.vue               |   2 +-
 src/client/components/emoji-picker-dialog.vue |  14 +-
 src/client/components/note-detailed.vue       |   8 +-
 src/client/components/note.vue                |   8 +-
 src/client/components/post-form-attaches.vue  |   2 +-
 src/client/components/post-form.vue           |   2 +-
 src/client/components/sample.vue              |   2 +-
 src/client/components/ui/button.vue           |   2 +-
 src/client/components/ui/input.vue            |   6 +-
 .../ui/{modal-menu.vue => popup-menu.vue}     |  29 +--
 src/client/components/ui/popup.vue            | 208 ++++++++++++++++++
 src/client/components/ui/select.vue           |   6 +-
 src/client/components/ui/textarea.vue         |   6 +-
 src/client/menu.ts                            |   2 +-
 src/client/os.ts                              |   4 +-
 src/client/pages/advanced-theme-editor.vue    |   2 +-
 src/client/pages/clip.vue                     |   2 +-
 src/client/pages/emojis.vue                   |   2 +-
 src/client/pages/instance/emojis.vue          |   2 +-
 src/client/pages/instance/index.vue           |   2 +-
 src/client/pages/messaging/index.vue          |   2 +-
 src/client/pages/messaging/messaging-room.vue |   2 +-
 src/client/pages/settings/accounts.vue        |   4 +-
 src/client/pages/settings/reaction.vue        |   2 +-
 src/client/pages/timeline.vue                 |   6 +-
 src/client/pages/user/index.vue               |   2 +-
 src/client/pages/welcome.entrance.a.vue       |   2 +-
 src/client/pages/welcome.entrance.b.vue       |   2 +-
 src/client/pages/welcome.entrance.c.vue       |   2 +-
 src/client/scripts/select-file.ts             |   2 +-
 src/client/ui/_common_/header.vue             |   4 +-
 src/client/ui/_common_/sidebar.vue            |   4 +-
 src/client/ui/chat/note.vue                   |   8 +-
 src/client/ui/chat/pages/channel.vue          |   2 +-
 src/client/ui/chat/post-form.vue              |   2 +-
 src/client/ui/default.header.vue              |   4 +-
 src/client/ui/default.sidebar.vue             |   4 +-
 src/client/widgets/timeline.vue               |   2 +-
 39 files changed, 286 insertions(+), 83 deletions(-)
 rename src/client/components/ui/{modal-menu.vue => popup-menu.vue} (51%)
 create mode 100644 src/client/components/ui/popup.vue

diff --git a/src/client/components/drive.file.vue b/src/client/components/drive.file.vue
index 3d20de23e9..b1be3d0cab 100644
--- a/src/client/components/drive.file.vue
+++ b/src/client/components/drive.file.vue
@@ -114,7 +114,7 @@ export default defineComponent({
 			if (this.selectMode) {
 				this.$emit('chosen', this.file);
 			} else {
-				os.modalMenu(this.getMenu(), ev.currentTarget || ev.target);
+				os.popupMenu(this.getMenu(), ev.currentTarget || ev.target);
 			}
 		},
 
diff --git a/src/client/components/drive.vue b/src/client/components/drive.vue
index 98f7b54828..5dadf9a11f 100644
--- a/src/client/components/drive.vue
+++ b/src/client/components/drive.vue
@@ -629,7 +629,7 @@ export default defineComponent({
 		},
 
 		showMenu(ev) {
-			os.modalMenu(this.getMenu(), ev.currentTarget || ev.target);
+			os.popupMenu(this.getMenu(), ev.currentTarget || ev.target);
 		},
 
 		onContextmenu(ev) {
diff --git a/src/client/components/emoji-picker-dialog.vue b/src/client/components/emoji-picker-dialog.vue
index 9400819a1f..5860acaa42 100644
--- a/src/client/components/emoji-picker-dialog.vue
+++ b/src/client/components/emoji-picker-dialog.vue
@@ -1,17 +1,17 @@
 <template>
-<MkModal ref="modal" :manual-showing="manualShowing" :src="src" :front="true" @click="$refs.modal.close()" @opening="opening" @close="$emit('close')" @closed="$emit('closed')">
-	<MkEmojiPicker :show-pinned="showPinned" :as-reaction-picker="asReactionPicker" @chosen="chosen" ref="picker"/>
-</MkModal>
+<MkPopup ref="popup" :manual-showing="manualShowing" :src="src" :front="true" @click="$refs.popup.close()" @opening="opening" @close="$emit('close')" @closed="$emit('closed')">
+	<MkEmojiPicker :show-pinned="showPinned" :as-reaction-picker="asReactionPicker" @chosen="chosen" ref="picker" style="box-shadow: 0 8px 32px rgb(0 0 0 / 30%);"/>
+</MkPopup>
 </template>
 
 <script lang="ts">
 import { defineComponent, markRaw } from 'vue';
-import MkModal from '@client/components/ui/modal.vue';
+import MkPopup from '@client/components/ui/popup.vue';
 import MkEmojiPicker from '@client/components/emoji-picker.vue';
 
 export default defineComponent({
 	components: {
-		MkModal,
+		MkPopup,
 		MkEmojiPicker,
 	},
 
@@ -33,7 +33,7 @@ export default defineComponent({
 		},
 	},
 
-	emits: ['done', 'closed'],
+	emits: ['done', 'close', 'closed'],
 
 	data() {
 		return {
@@ -44,7 +44,7 @@ export default defineComponent({
 	methods: {
 		chosen(emoji: any) {
 			this.$emit('done', emoji);
-			this.$refs.modal.close();
+			this.$refs.popup.close();
 		},
 
 		opening() {
diff --git a/src/client/components/note-detailed.vue b/src/client/components/note-detailed.vue
index 6040ad378f..d601052927 100644
--- a/src/client/components/note-detailed.vue
+++ b/src/client/components/note-detailed.vue
@@ -454,7 +454,7 @@ export default defineComponent({
 		renote(viaKeyboard = false) {
 			pleaseLogin();
 			this.blur();
-			os.modalMenu([{
+			os.popupMenu([{
 				text: this.$ts.renote,
 				icon: 'fas fa-retweet',
 				action: () => {
@@ -743,14 +743,14 @@ export default defineComponent({
 		},
 
 		menu(viaKeyboard = false) {
-			os.modalMenu(this.getMenu(), this.$refs.menuButton, {
+			os.popupMenu(this.getMenu(), this.$refs.menuButton, {
 				viaKeyboard
 			}).then(this.focus);
 		},
 
 		showRenoteMenu(viaKeyboard = false) {
 			if (!this.isMyRenote) return;
-			os.modalMenu([{
+			os.popupMenu([{
 				text: this.$ts.unrenote,
 				icon: 'fas fa-trash-alt',
 				danger: true,
@@ -794,7 +794,7 @@ export default defineComponent({
 
 		async clip() {
 			const clips = await os.api('clips/list');
-			os.modalMenu([{
+			os.popupMenu([{
 				icon: 'fas fa-plus',
 				text: this.$ts.createNew,
 				action: async () => {
diff --git a/src/client/components/note.vue b/src/client/components/note.vue
index 504d07c0eb..873b96030a 100644
--- a/src/client/components/note.vue
+++ b/src/client/components/note.vue
@@ -429,7 +429,7 @@ export default defineComponent({
 		renote(viaKeyboard = false) {
 			pleaseLogin();
 			this.blur();
-			os.modalMenu([{
+			os.popupMenu([{
 				text: this.$ts.renote,
 				icon: 'fas fa-retweet',
 				action: () => {
@@ -718,14 +718,14 @@ export default defineComponent({
 		},
 
 		menu(viaKeyboard = false) {
-			os.modalMenu(this.getMenu(), this.$refs.menuButton, {
+			os.popupMenu(this.getMenu(), this.$refs.menuButton, {
 				viaKeyboard
 			}).then(this.focus);
 		},
 
 		showRenoteMenu(viaKeyboard = false) {
 			if (!this.isMyRenote) return;
-			os.modalMenu([{
+			os.popupMenu([{
 				text: this.$ts.unrenote,
 				icon: 'fas fa-trash-alt',
 				danger: true,
@@ -769,7 +769,7 @@ export default defineComponent({
 
 		async clip() {
 			const clips = await os.api('clips/list');
-			os.modalMenu([{
+			os.popupMenu([{
 				icon: 'fas fa-plus',
 				text: this.$ts.createNew,
 				action: async () => {
diff --git a/src/client/components/post-form-attaches.vue b/src/client/components/post-form-attaches.vue
index 27e20fdfa8..9365365653 100644
--- a/src/client/components/post-form-attaches.vue
+++ b/src/client/components/post-form-attaches.vue
@@ -112,7 +112,7 @@ export default defineComponent({
 
 		showFileMenu(file, ev: MouseEvent) {
 			if (this.menu) return;
-			this.menu = os.modalMenu([{
+			this.menu = os.popupMenu([{
 				text: this.$ts.renameFile,
 				icon: 'fas fa-i-cursor',
 				action: () => { this.rename(file) }
diff --git a/src/client/components/post-form.vue b/src/client/components/post-form.vue
index ed2a934c26..969f8563a4 100644
--- a/src/client/components/post-form.vue
+++ b/src/client/components/post-form.vue
@@ -664,7 +664,7 @@ export default defineComponent({
 		},
 
 		showActions(ev) {
-			os.modalMenu(postFormActions.map(action => ({
+			os.popupMenu(postFormActions.map(action => ({
 				text: action.title,
 				action: () => {
 					action.handler({
diff --git a/src/client/components/sample.vue b/src/client/components/sample.vue
index 53eac0e2e6..bce02466f6 100644
--- a/src/client/components/sample.vue
+++ b/src/client/components/sample.vue
@@ -93,7 +93,7 @@ export default defineComponent({
 		},
 
 		async openMenu(ev) {
-			os.modalMenu([{
+			os.popupMenu([{
 				type: 'label',
 				text: 'Fruits'
 			}, {
diff --git a/src/client/components/ui/button.vue b/src/client/components/ui/button.vue
index 8a83943825..000f6302a0 100644
--- a/src/client/components/ui/button.vue
+++ b/src/client/components/ui/button.vue
@@ -115,7 +115,7 @@ export default defineComponent({
 	z-index: 1; // 他コンポーネントのbox-shadowに隠されないようにするため
 	display: block;
 	min-width: 100px;
-	width: min-content;
+	width: max-content;
 	padding: 8px 14px;
 	text-align: center;
 	font-weight: normal;
diff --git a/src/client/components/ui/input.vue b/src/client/components/ui/input.vue
index 3e2a5fb0dd..05ce5d3e15 100644
--- a/src/client/components/ui/input.vue
+++ b/src/client/components/ui/input.vue
@@ -210,8 +210,7 @@ export default defineComponent({
 
 	> .label {
 		font-size: 0.85em;
-		padding: 0 0 6px 6px;
-		font-weight: bold;
+		padding: 0 0 8px 12px;
 		user-select: none;
 
 		&:empty {
@@ -221,7 +220,7 @@ export default defineComponent({
 
 	> .caption {
 		font-size: 0.8em;
-		padding: 6px 0 0 6px;
+		padding: 8px 0 0 12px;
 		color: var(--fgTransparentWeak);
 
 		&:empty {
@@ -251,6 +250,7 @@ export default defineComponent({
 			outline: none;
 			box-shadow: none;
 			box-sizing: border-box;
+			transition: border-color 0.1s ease-out;
 
 			&:hover {
 				border-color: var(--inputBorderHover);
diff --git a/src/client/components/ui/modal-menu.vue b/src/client/components/ui/popup-menu.vue
similarity index 51%
rename from src/client/components/ui/modal-menu.vue
rename to src/client/components/ui/popup-menu.vue
index aac4be9c3b..ceb3c47bf9 100644
--- a/src/client/components/ui/modal-menu.vue
+++ b/src/client/components/ui/popup-menu.vue
@@ -1,20 +1,25 @@
 <template>
-<MkModal ref="modal" :src="src" @click="$refs.modal.close()" @closed="$emit('closed')">
-	<MkMenu :items="items" :align="align" @close="$refs.modal.close()" class="_popup"/>
-</MkModal>
+<MkPopup ref="popup" :src="src" @closed="$emit('closed')">
+	<MkMenu :items="items" :align="align" @close="$refs.popup.close()" class="_popup" style="box-shadow: 0 8px 32px rgb(0 0 0 / 30%);"/>
+</MkPopup>
 </template>
 
 <script lang="ts">
 import { defineComponent } from 'vue';
-import MkModal from './modal.vue';
+import MkPopup from './popup.vue';
 import MkMenu from './menu.vue';
 
 export default defineComponent({
 	components: {
-		MkModal,
+		MkPopup,
 		MkMenu,
 	},
+
 	props: {
+		showing: {
+			type: Boolean,
+			required: true,
+		},
 		items: {
 			type: Array,
 			required: true
@@ -31,17 +36,7 @@ export default defineComponent({
 			required: false
 		},
 	},
-	emits: ['closed'],
-	computed: {
-		keymap(): any {
-			return {
-				'esc': () => this.$refs.modal.close(),
-			};
-		},
-	},
+
+	emits: ['close', 'closed'],
 });
 </script>
-
-<style lang="scss" scoped>
-
-</style>
diff --git a/src/client/components/ui/popup.vue b/src/client/components/ui/popup.vue
new file mode 100644
index 0000000000..85df3f432d
--- /dev/null
+++ b/src/client/components/ui/popup.vue
@@ -0,0 +1,208 @@
+<template>
+<transition :name="$store.state.animation ? 'popup-menu' : ''" :duration="$store.state.animation ? 300 : 0" appear @after-leave="onClosed" @enter="$emit('opening')" @after-enter="childRendered">
+	<div v-show="manualShowing != null ? manualShowing : showing" class="ccczpooj" :class="{ front, fixed, top: position === 'top' }" ref="content" :style="{ pointerEvents: (manualShowing != null ? manualShowing : showing) ? 'auto' : 'none', '--transformOrigin': transformOrigin }">
+		<slot></slot>
+	</div>
+</transition>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+
+function getFixedContainer(el: Element | null): Element | null {
+	if (el == null || el.tagName === 'BODY') return null;
+	const position = window.getComputedStyle(el).getPropertyValue('position');
+	if (position === 'fixed') {
+		return el;
+	} else {
+		return getFixedContainer(el.parentElement);
+	}
+}
+
+export default defineComponent({
+	props: {
+		manualShowing: {
+			type: Boolean,
+			required: false,
+			default: null,
+		},
+		srcCenter: {
+			type: Boolean,
+			required: false
+		},
+		src: {
+			required: false,
+		},
+		position: {
+			required: false
+		},
+		front: {
+			type: Boolean,
+			required: false,
+			default: false,
+		}
+	},
+
+	emits: ['opening', 'click', 'esc', 'close', 'closed'],
+
+	data() {
+		return {
+			showing: true,
+			fixed: false,
+			transformOrigin: 'center',
+			contentClicking: false,
+		};
+	},
+
+	mounted() {
+		this.$watch('src', () => {
+			this.fixed = getFixedContainer(this.src) != null;
+			this.$nextTick(() => {
+				this.align();
+			});
+		}, { immediate: true });
+
+		this.$nextTick(() => {
+			const popover = this.$refs.content as any;
+			new ResizeObserver((entries, observer) => {
+				this.align();
+			}).observe(popover);
+		});
+
+		document.addEventListener('mousedown', this.onDocumentClick);
+	},
+
+	beforeUnmount() {
+		document.removeEventListener('mousedown', this.onDocumentClick);
+	},
+
+	methods: {
+		align() {
+			if (this.src == null) return;
+
+			const popover = this.$refs.content as any;
+
+			if (popover == null) return;
+
+			const rect = this.src.getBoundingClientRect();
+			
+			const width = popover.offsetWidth;
+			const height = popover.offsetHeight;
+
+			let left;
+			let top;
+
+			if (this.srcCenter) {
+				const x = rect.left + (this.fixed ? 0 : window.pageXOffset) + (this.src.offsetWidth / 2);
+				const y = rect.top + (this.fixed ? 0 : window.pageYOffset) + (this.src.offsetHeight / 2);
+				left = (x - (width / 2));
+				top = (y - (height / 2));
+			} else {
+				const x = rect.left + (this.fixed ? 0 : window.pageXOffset) + (this.src.offsetWidth / 2);
+				const y = rect.top + (this.fixed ? 0 : window.pageYOffset) + this.src.offsetHeight;
+				left = (x - (width / 2));
+				top = y;
+			}
+
+			if (this.fixed) {
+				if (left + width > window.innerWidth) {
+					left = window.innerWidth - width;
+				}
+
+				if (top + height > window.innerHeight) {
+					top = window.innerHeight - height;
+				}
+			} else {
+				if (left + width - window.pageXOffset > window.innerWidth) {
+					left = window.innerWidth - width + window.pageXOffset - 1;
+				}
+
+				if (top + height - window.pageYOffset > window.innerHeight) {
+					top = window.innerHeight - height + window.pageYOffset - 1;
+				}
+			}
+
+			if (top < 0) {
+				top = 0;
+			}
+
+			if (left < 0) {
+				left = 0;
+			}
+
+			if (top > rect.top + (this.fixed ? 0 : window.pageYOffset)) {
+				this.transformOrigin = 'center top';
+			} else {
+				this.transformOrigin = 'center';
+			}
+
+			popover.style.left = left + 'px';
+			popover.style.top = top + 'px';
+		},
+
+		childRendered() {
+			// モーダルコンテンツにマウスボタンが押され、コンテンツ外でマウスボタンが離されたときにモーダルバックグラウンドクリックと判定させないためにマウスイベントを監視しフラグ管理する
+			const content = this.$refs.content.children[0];
+			content.addEventListener('mousedown', e => {
+				this.contentClicking = true;
+				window.addEventListener('mouseup', e => {
+					// click イベントより先に mouseup イベントが発生するかもしれないのでちょっと待つ
+					setTimeout(() => {
+						this.contentClicking = false;
+					}, 100);
+				}, { passive: true, once: true });
+			}, { passive: true });
+		},
+
+		close() {
+			this.showing = false;
+			this.$emit('close');
+		},
+
+		onClosed() {
+			this.$emit('closed');
+		},
+
+		onDocumentClick(ev) {
+			const flyoutElement = this.$refs.content;
+			let targetElement = ev.target;
+			do {
+				if (targetElement === flyoutElement) {
+					return;
+				}
+				targetElement = targetElement.parentNode;
+			} while (targetElement);
+			this.close();
+		}
+	}
+});
+</script>
+
+<style lang="scss" scoped>
+.popup-menu-enter-active {
+	transform-origin: var(--transformOrigin);
+	transition: opacity 0.2s cubic-bezier(0, 0, 0.2, 1), transform 0.2s cubic-bezier(0, 0, 0.2, 1) !important;
+}
+.popup-menu-leave-active {
+	transform-origin: var(--transformOrigin);
+	transition: opacity 0.2s cubic-bezier(0.4, 0, 1, 1), transform 0.2s cubic-bezier(0.4, 0, 1, 1) !important;
+}
+.popup-menu-enter-from, .popup-menu-leave-to {
+	pointer-events: none;
+	opacity: 0;
+	transform: scale(0.9);
+}
+
+.ccczpooj {
+	position: absolute;
+	z-index: 10000;
+
+	&.fixed {
+		position: fixed;
+	}
+
+	&.front {
+		z-index: 20000;
+	}
+}
+</style>
diff --git a/src/client/components/ui/select.vue b/src/client/components/ui/select.vue
index 987d4f194c..e9d43d8a64 100644
--- a/src/client/components/ui/select.vue
+++ b/src/client/components/ui/select.vue
@@ -155,8 +155,7 @@ export default defineComponent({
 
 	> .label {
 		font-size: 0.85em;
-		padding: 0 0 6px 6px;
-		font-weight: bold;
+		padding: 0 0 8px 12px;
 		user-select: none;
 
 		&:empty {
@@ -166,7 +165,7 @@ export default defineComponent({
 
 	> .caption {
 		font-size: 0.8em;
-		padding: 6px 0 0 6px;
+		padding: 8px 0 0 12px;
 		color: var(--fgTransparentWeak);
 
 		&:empty {
@@ -197,6 +196,7 @@ export default defineComponent({
 			box-shadow: none;
 			box-sizing: border-box;
 			cursor: pointer;
+			transition: border-color 0.1s ease-out;
 
 			&:hover {
 				border-color: var(--inputBorderHover);
diff --git a/src/client/components/ui/textarea.vue b/src/client/components/ui/textarea.vue
index a61324f25f..53a141f011 100644
--- a/src/client/components/ui/textarea.vue
+++ b/src/client/components/ui/textarea.vue
@@ -176,8 +176,7 @@ export default defineComponent({
 
 	> .label {
 		font-size: 0.85em;
-		padding: 0 0 6px 6px;
-		font-weight: bold;
+		padding: 0 0 8px 12px;
 		user-select: none;
 
 		&:empty {
@@ -187,7 +186,7 @@ export default defineComponent({
 
 	> .caption {
 		font-size: 0.8em;
-		padding: 6px 0 0 6px;
+		padding: 8px 0 0 12px;
 		color: var(--fgTransparentWeak);
 
 		&:empty {
@@ -218,6 +217,7 @@ export default defineComponent({
 			outline: none;
 			box-shadow: none;
 			box-sizing: border-box;
+			transition: border-color 0.1s ease-out;
 
 			&:hover {
 				border-color: var(--inputBorderHover);
diff --git a/src/client/menu.ts b/src/client/menu.ts
index 0b5341f970..8e65496cf3 100644
--- a/src/client/menu.ts
+++ b/src/client/menu.ts
@@ -143,7 +143,7 @@ export const menuDef = {
 		title: 'switchUi',
 		icon: 'fas fa-columns',
 		action: (ev) => {
-			os.modalMenu([{
+			os.popupMenu([{
 				text: i18n.locale.default,
 				action: () => {
 					localStorage.setItem('ui', 'default');
diff --git a/src/client/os.ts b/src/client/os.ts
index 987844b2d2..284f982f06 100644
--- a/src/client/os.ts
+++ b/src/client/os.ts
@@ -368,10 +368,10 @@ export async function openEmojiPicker(src?: HTMLElement, opts, initialTextarea:
 	});
 }
 
-export function modalMenu(items: any[], src?: HTMLElement, options?: { align?: string; viaKeyboard?: boolean }) {
+export function popupMenu(items: any[], src?: HTMLElement, options?: { align?: string; viaKeyboard?: boolean }) {
 	return new Promise((resolve, reject) => {
 		let dispose;
-		popup(import('@client/components/ui/modal-menu.vue'), {
+		popup(import('@client/components/ui/popup-menu.vue'), {
 			items,
 			src,
 			align: options?.align,
diff --git a/src/client/pages/advanced-theme-editor.vue b/src/client/pages/advanced-theme-editor.vue
index b40d9808ca..c03d88b82d 100644
--- a/src/client/pages/advanced-theme-editor.vue
+++ b/src/client/pages/advanced-theme-editor.vue
@@ -272,7 +272,7 @@ export default defineComponent({
 	
 		showTypeMenu(e: MouseEvent) {
 			return new Promise<ThemeValue>((resolve) => {
-				os.modalMenu([{
+				os.popupMenu([{
 					text: this.$ts._theme.defaultValue,
 					action: () => resolve(null),
 				}, {
diff --git a/src/client/pages/clip.vue b/src/client/pages/clip.vue
index 8777975557..e4b00d5e28 100644
--- a/src/client/pages/clip.vue
+++ b/src/client/pages/clip.vue
@@ -79,7 +79,7 @@ export default defineComponent({
 
 	methods: {
 		menu(ev) {
-			os.modalMenu([this.isOwned ? {
+			os.popupMenu([this.isOwned ? {
 				icon: 'fas fa-pencil-alt',
 				text: this.$ts.edit,
 				action: async () => {
diff --git a/src/client/pages/emojis.vue b/src/client/pages/emojis.vue
index 435727e196..391aff8297 100644
--- a/src/client/pages/emojis.vue
+++ b/src/client/pages/emojis.vue
@@ -80,7 +80,7 @@ export default defineComponent({
 
 	methods: {
 		menu(emoji, ev) {
-			os.modalMenu([{
+			os.popupMenu([{
 				type: 'label',
 				text: ':' + emoji.name + ':',
 			}, {
diff --git a/src/client/pages/instance/emojis.vue b/src/client/pages/instance/emojis.vue
index e971ca942e..7badc9da02 100644
--- a/src/client/pages/instance/emojis.vue
+++ b/src/client/pages/instance/emojis.vue
@@ -146,7 +146,7 @@ export default defineComponent({
 		},
 
 		remoteMenu(emoji, ev) {
-			os.modalMenu([{
+			os.popupMenu([{
 				type: 'label',
 				text: ':' + emoji.name + ':',
 			}, {
diff --git a/src/client/pages/instance/index.vue b/src/client/pages/instance/index.vue
index 90dd29d55f..612bfa762a 100644
--- a/src/client/pages/instance/index.vue
+++ b/src/client/pages/instance/index.vue
@@ -167,7 +167,7 @@ export default defineComponent({
 		};
 
 		const lookup = (ev) => {
-			os.modalMenu([{
+			os.popupMenu([{
 				text: i18n.locale.user,
 				icon: 'fas fa-user',
 				action: () => {
diff --git a/src/client/pages/messaging/index.vue b/src/client/pages/messaging/index.vue
index 1d4e816fb9..1e0d4dc64c 100644
--- a/src/client/pages/messaging/index.vue
+++ b/src/client/pages/messaging/index.vue
@@ -116,7 +116,7 @@ export default defineComponent({
 		},
 
 		start(ev) {
-			os.modalMenu([{
+			os.popupMenu([{
 				text: this.$ts.messagingWithUser,
 				icon: 'fas fa-user',
 				action: () => { this.startUser() }
diff --git a/src/client/pages/messaging/messaging-room.vue b/src/client/pages/messaging/messaging-room.vue
index 24ed105913..b6a2fbd3d4 100644
--- a/src/client/pages/messaging/messaging-room.vue
+++ b/src/client/pages/messaging/messaging-room.vue
@@ -320,7 +320,7 @@ const Component = defineComponent({
 		menu(ev) {
 			const path = this.groupId ? `/my/messaging/group/${this.groupId}` : `/my/messaging/${this.userAcct}`;
 
-			os.modalMenu([this.inWindow ? undefined : {
+			os.popupMenu([this.inWindow ? undefined : {
 				text: this.$ts.openInWindow,
 				icon: 'fas fa-window-maximize',
 				action: () => {
diff --git a/src/client/pages/settings/accounts.vue b/src/client/pages/settings/accounts.vue
index a3fa0d4eb0..53e28bdf6f 100644
--- a/src/client/pages/settings/accounts.vue
+++ b/src/client/pages/settings/accounts.vue
@@ -64,7 +64,7 @@ export default defineComponent({
 
 	methods: {
 		menu(account, ev) {
-			os.modalMenu([{
+			os.popupMenu([{
 				text: this.$ts.switch,
 				icon: 'fas fa-exchange-alt',
 				action: () => this.switchAccount(account),
@@ -77,7 +77,7 @@ export default defineComponent({
 		},
 
 		addAccount(ev) {
-			os.modalMenu([{
+			os.popupMenu([{
 				text: this.$ts.existingAccount,
 				action: () => { this.addExistingAccount(); },
 			}, {
diff --git a/src/client/pages/settings/reaction.vue b/src/client/pages/settings/reaction.vue
index 9bffd5f903..a0024234e4 100644
--- a/src/client/pages/settings/reaction.vue
+++ b/src/client/pages/settings/reaction.vue
@@ -94,7 +94,7 @@ export default defineComponent({
 		},
 
 		remove(reaction, ev) {
-			os.modalMenu([{
+			os.popupMenu([{
 				text: this.$ts.remove,
 				action: () => {
 					this.reactions = this.reactions.filter(x => x !== reaction)
diff --git a/src/client/pages/timeline.vue b/src/client/pages/timeline.vue
index 55c4743264..a6a0e6987f 100644
--- a/src/client/pages/timeline.vue
+++ b/src/client/pages/timeline.vue
@@ -147,7 +147,7 @@ export default defineComponent({
 					this.saveSrc();
 				}
 			}));
-			os.modalMenu(items, ev.currentTarget || ev.target);
+			os.popupMenu(items, ev.currentTarget || ev.target);
 		},
 
 		async chooseAntenna(ev) {
@@ -161,7 +161,7 @@ export default defineComponent({
 					this.saveSrc();
 				}
 			}));
-			os.modalMenu(items, ev.currentTarget || ev.target);
+			os.popupMenu(items, ev.currentTarget || ev.target);
 		},
 
 		async chooseChannel(ev) {
@@ -177,7 +177,7 @@ export default defineComponent({
 					this.$router.push(`/channels/${channel.id}`);
 				}
 			}));
-			os.modalMenu(items, ev.currentTarget || ev.target);
+			os.popupMenu(items, ev.currentTarget || ev.target);
 		},
 
 		saveSrc() {
diff --git a/src/client/pages/user/index.vue b/src/client/pages/user/index.vue
index dec5ec39e2..9cf424b127 100644
--- a/src/client/pages/user/index.vue
+++ b/src/client/pages/user/index.vue
@@ -338,7 +338,7 @@ export default defineComponent({
 		},
 
 		menu(ev) {
-			os.modalMenu(getUserMenu(this.user), ev.currentTarget || ev.target);
+			os.popupMenu(getUserMenu(this.user), ev.currentTarget || ev.target);
 		},
 
 		parallaxLoop() {
diff --git a/src/client/pages/welcome.entrance.a.vue b/src/client/pages/welcome.entrance.a.vue
index da3c694265..299271c347 100644
--- a/src/client/pages/welcome.entrance.a.vue
+++ b/src/client/pages/welcome.entrance.a.vue
@@ -117,7 +117,7 @@ export default defineComponent({
 		},
 
 		showMenu(ev) {
-			os.modalMenu([{
+			os.popupMenu([{
 				text: this.$t('aboutX', { x: instanceName }),
 				icon: 'fas fa-info-circle',
 				action: () => {
diff --git a/src/client/pages/welcome.entrance.b.vue b/src/client/pages/welcome.entrance.b.vue
index d108eb7d94..a5c12f09e2 100644
--- a/src/client/pages/welcome.entrance.b.vue
+++ b/src/client/pages/welcome.entrance.b.vue
@@ -101,7 +101,7 @@ export default defineComponent({
 		},
 
 		showMenu(ev) {
-			os.modalMenu([{
+			os.popupMenu([{
 				text: this.$t('aboutX', { x: instanceName }),
 				icon: 'fas fa-info-circle',
 				action: () => {
diff --git a/src/client/pages/welcome.entrance.c.vue b/src/client/pages/welcome.entrance.c.vue
index 93811e98fb..2c8db6e264 100644
--- a/src/client/pages/welcome.entrance.c.vue
+++ b/src/client/pages/welcome.entrance.c.vue
@@ -121,7 +121,7 @@ export default defineComponent({
 		},
 
 		showMenu(ev) {
-			os.modalMenu([{
+			os.popupMenu([{
 				text: this.$t('aboutX', { x: instanceName }),
 				icon: 'fas fa-info-circle',
 				action: () => {
diff --git a/src/client/scripts/select-file.ts b/src/client/scripts/select-file.ts
index 9d7146e215..f7b971e113 100644
--- a/src/client/scripts/select-file.ts
+++ b/src/client/scripts/select-file.ts
@@ -69,7 +69,7 @@ export function selectFile(src: any, label: string | null, multiple = false) {
 			});
 		};
 
-		os.modalMenu([label ? {
+		os.popupMenu([label ? {
 			text: label,
 			type: 'label'
 		} : undefined, {
diff --git a/src/client/ui/_common_/header.vue b/src/client/ui/_common_/header.vue
index 24b9046717..67bb3abb93 100644
--- a/src/client/ui/_common_/header.vue
+++ b/src/client/ui/_common_/header.vue
@@ -31,7 +31,7 @@
 
 <script lang="ts">
 import { defineComponent } from 'vue';
-import { modalMenu } from '@client/os';
+import { popupMenu } from '@client/os';
 import { url } from '@client/config';
 
 export default defineComponent({
@@ -121,7 +121,7 @@ export default defineComponent({
 				if (menu.length > 0) menu.push(null);
 				menu = menu.concat(this.menu);
 			}
-			modalMenu(menu, ev.currentTarget || ev.target);
+			popupMenu(menu, ev.currentTarget || ev.target);
 		}
 	}
 });
diff --git a/src/client/ui/_common_/sidebar.vue b/src/client/ui/_common_/sidebar.vue
index 073907cde9..ffa3a67b13 100644
--- a/src/client/ui/_common_/sidebar.vue
+++ b/src/client/ui/_common_/sidebar.vue
@@ -150,7 +150,7 @@ export default defineComponent({
 				});
 			}));
 
-			os.modalMenu([...[{
+			os.popupMenu([...[{
 				type: 'link',
 				text: this.$ts.profile,
 				to: `/@${ this.$i.username }`,
@@ -159,7 +159,7 @@ export default defineComponent({
 				icon: 'fas fa-plus',
 				text: this.$ts.addAccount,
 				action: () => {
-					os.modalMenu([{
+					os.popupMenu([{
 						text: this.$ts.existingAccount,
 						action: () => { this.addAccount(); },
 					}, {
diff --git a/src/client/ui/chat/note.vue b/src/client/ui/chat/note.vue
index 7a525d9edb..6d2b9bbf54 100644
--- a/src/client/ui/chat/note.vue
+++ b/src/client/ui/chat/note.vue
@@ -432,7 +432,7 @@ export default defineComponent({
 			pleaseLogin();
 			this.operating = true;
 			this.blur();
-			os.modalMenu([{
+			os.popupMenu([{
 				text: this.$ts.renote,
 				icon: 'fas fa-retweet',
 				action: () => {
@@ -726,7 +726,7 @@ export default defineComponent({
 
 		menu(viaKeyboard = false) {
 			this.operating = true;
-			os.modalMenu(this.getMenu(), this.$refs.menuButton, {
+			os.popupMenu(this.getMenu(), this.$refs.menuButton, {
 				viaKeyboard
 			}).then(() => {
 				this.operating = false;
@@ -736,7 +736,7 @@ export default defineComponent({
 
 		showRenoteMenu(viaKeyboard = false) {
 			if (!this.isMyRenote) return;
-			os.modalMenu([{
+			os.popupMenu([{
 				text: this.$ts.unrenote,
 				icon: 'fas fa-trash-alt',
 				danger: true,
@@ -780,7 +780,7 @@ export default defineComponent({
 
 		async clip() {
 			const clips = await os.api('clips/list');
-			os.modalMenu([{
+			os.popupMenu([{
 				icon: 'fas fa-plus',
 				text: this.$ts.createNew,
 				action: async () => {
diff --git a/src/client/ui/chat/pages/channel.vue b/src/client/ui/chat/pages/channel.vue
index 76b334487e..d11d40b210 100644
--- a/src/client/ui/chat/pages/channel.vue
+++ b/src/client/ui/chat/pages/channel.vue
@@ -178,7 +178,7 @@ export default defineComponent({
 		},
 
 		openChannelMenu(ev) {
-			os.modalMenu([{
+			os.popupMenu([{
 				text: this.$ts.copyUrl,
 				icon: 'fas fa-link',
 				action: () => {
diff --git a/src/client/ui/chat/post-form.vue b/src/client/ui/chat/post-form.vue
index 6812eb31ba..0f9a206fab 100644
--- a/src/client/ui/chat/post-form.vue
+++ b/src/client/ui/chat/post-form.vue
@@ -594,7 +594,7 @@ export default defineComponent({
 		},
 
 		showActions(ev) {
-			os.modalMenu(postFormActions.map(action => ({
+			os.popupMenu(postFormActions.map(action => ({
 				text: action.title,
 				action: () => {
 					action.handler({
diff --git a/src/client/ui/default.header.vue b/src/client/ui/default.header.vue
index a67883020f..df2e99f13a 100644
--- a/src/client/ui/default.header.vue
+++ b/src/client/ui/default.header.vue
@@ -116,7 +116,7 @@ export default defineComponent({
 				});
 			}));
 
-			os.modalMenu([...[{
+			os.popupMenu([...[{
 				type: 'link',
 				text: this.$ts.profile,
 				to: `/@${ this.$i.username }`,
@@ -125,7 +125,7 @@ export default defineComponent({
 				icon: 'fas fa-plus',
 				text: this.$ts.addAccount,
 				action: () => {
-					os.modalMenu([{
+					os.popupMenu([{
 						text: this.$ts.existingAccount,
 						action: () => { this.addAccount(); },
 					}, {
diff --git a/src/client/ui/default.sidebar.vue b/src/client/ui/default.sidebar.vue
index 2e0336878d..dd6d4d1516 100644
--- a/src/client/ui/default.sidebar.vue
+++ b/src/client/ui/default.sidebar.vue
@@ -136,7 +136,7 @@ export default defineComponent({
 				});
 			}));
 
-			os.modalMenu([...[{
+			os.popupMenu([...[{
 				type: 'link',
 				text: this.$ts.profile,
 				to: `/@${ this.$i.username }`,
@@ -145,7 +145,7 @@ export default defineComponent({
 				icon: 'fas fa-plus',
 				text: this.$ts.addAccount,
 				action: () => {
-					os.modalMenu([{
+					os.popupMenu([{
 						text: this.$ts.existingAccount,
 						action: () => { this.addAccount(); },
 					}, {
diff --git a/src/client/widgets/timeline.vue b/src/client/widgets/timeline.vue
index 8548574afc..bd951d8565 100644
--- a/src/client/widgets/timeline.vue
+++ b/src/client/widgets/timeline.vue
@@ -86,7 +86,7 @@ export default defineComponent({
 					this.setSrc('list');
 				}
 			}));
-			os.modalMenu([{
+			os.popupMenu([{
 				text: this.$ts._timelines.home,
 				icon: 'fas fa-home',
 				action: () => { this.setSrc('home') }
-- 
GitLab


From b3c5c3f0ea07311f42af788daad24d6d23b7148a Mon Sep 17 00:00:00 2001
From: syuilo <Syuilotan@yahoo.co.jp>
Date: Sun, 8 Aug 2021 12:45:44 +0900
Subject: [PATCH 61/70] Improve usability

---
 src/client/components/ui/popup.vue | 9 +++++++--
 1 file changed, 7 insertions(+), 2 deletions(-)

diff --git a/src/client/components/ui/popup.vue b/src/client/components/ui/popup.vue
index 85df3f432d..c98e17fa25 100644
--- a/src/client/components/ui/popup.vue
+++ b/src/client/components/ui/popup.vue
@@ -7,7 +7,7 @@
 </template>
 
 <script lang="ts">
-import { defineComponent } from 'vue';
+import { defineComponent, PropType } from 'vue';
 
 function getFixedContainer(el: Element | null): Element | null {
 	if (el == null || el.tagName === 'BODY') return null;
@@ -31,6 +31,7 @@ export default defineComponent({
 			required: false
 		},
 		src: {
+			type: Object as PropType<HTMLElement>,
 			required: false,
 		},
 		position: {
@@ -56,6 +57,9 @@ export default defineComponent({
 
 	mounted() {
 		this.$watch('src', () => {
+			if (this.src) {
+				this.src.style.pointerEvents = 'none';
+			}
 			this.fixed = getFixedContainer(this.src) != null;
 			this.$nextTick(() => {
 				this.align();
@@ -69,7 +73,7 @@ export default defineComponent({
 			}).observe(popover);
 		});
 
-		document.addEventListener('mousedown', this.onDocumentClick);
+		document.addEventListener('mousedown', this.onDocumentClick, { passive: true });
 	},
 
 	beforeUnmount() {
@@ -155,6 +159,7 @@ export default defineComponent({
 		},
 
 		close() {
+			if (this.src) this.src.style.pointerEvents = 'auto';
 			this.showing = false;
 			this.$emit('close');
 		},
-- 
GitLab


From 9e03335ff8e741dbb4e41db9e248cd86944afd27 Mon Sep 17 00:00:00 2001
From: syuilo <Syuilotan@yahoo.co.jp>
Date: Sun, 8 Aug 2021 13:02:58 +0900
Subject: [PATCH 62/70] Improve client

---
 src/client/components/signin.vue        | 6 ++----
 src/client/components/ui/popup-menu.vue | 4 ----
 2 files changed, 2 insertions(+), 8 deletions(-)

diff --git a/src/client/components/signin.vue b/src/client/components/signin.vue
index 0c6cd3440a..f1e5d6afe5 100755
--- a/src/client/components/signin.vue
+++ b/src/client/components/signin.vue
@@ -3,13 +3,11 @@
 	<div class="auth _section">
 		<div class="avatar" :style="{ backgroundImage: user ? `url('${ user.avatarUrl }')` : null }" v-show="withAvatar"></div>
 		<div class="normal-signin" v-if="!totpLogin">
-			<MkInput v-model="username" type="text" pattern="^[a-zA-Z0-9_]+$" spellcheck="false" autofocus required @update:modelValue="onUsernameChange">
-				<template #label>{{ $ts.username }}</template>
+			<MkInput v-model="username" :placeholder="$ts.username" type="text" pattern="^[a-zA-Z0-9_]+$" spellcheck="false" autofocus required @update:modelValue="onUsernameChange">
 				<template #prefix>@</template>
 				<template #suffix>@{{ host }}</template>
 			</MkInput>
-			<MkInput v-model="password" type="password" :with-password-toggle="true" v-if="!user || user && !user.usePasswordLessLogin" required>
-				<template #label>{{ $ts.password }}</template>
+			<MkInput v-model="password" :placeholder="$ts.password" type="password" :with-password-toggle="true" v-if="!user || user && !user.usePasswordLessLogin" required>
 				<template #prefix><i class="fas fa-lock"></i></template>
 				<template #caption><button class="_textButton" @click="resetPassword" type="button">{{ $ts.forgotPassword }}</button></template>
 			</MkInput>
diff --git a/src/client/components/ui/popup-menu.vue b/src/client/components/ui/popup-menu.vue
index ceb3c47bf9..cc4c83667f 100644
--- a/src/client/components/ui/popup-menu.vue
+++ b/src/client/components/ui/popup-menu.vue
@@ -16,10 +16,6 @@ export default defineComponent({
 	},
 
 	props: {
-		showing: {
-			type: Boolean,
-			required: true,
-		},
 		items: {
 			type: Array,
 			required: true
-- 
GitLab


From 82150bd5b84e31f79d606b22dd8041e038ce67f1 Mon Sep 17 00:00:00 2001
From: syuilo <Syuilotan@yahoo.co.jp>
Date: Sun, 8 Aug 2021 16:30:30 +0900
Subject: [PATCH 63/70] :art:

---
 src/client/components/emoji-picker-dialog.vue | 2 +-
 src/client/components/ui/popup-menu.vue       | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/client/components/emoji-picker-dialog.vue b/src/client/components/emoji-picker-dialog.vue
index 5860acaa42..9aca47f547 100644
--- a/src/client/components/emoji-picker-dialog.vue
+++ b/src/client/components/emoji-picker-dialog.vue
@@ -1,6 +1,6 @@
 <template>
 <MkPopup ref="popup" :manual-showing="manualShowing" :src="src" :front="true" @click="$refs.popup.close()" @opening="opening" @close="$emit('close')" @closed="$emit('closed')">
-	<MkEmojiPicker :show-pinned="showPinned" :as-reaction-picker="asReactionPicker" @chosen="chosen" ref="picker" style="box-shadow: 0 8px 32px rgb(0 0 0 / 30%);"/>
+	<MkEmojiPicker class="_shadow" :show-pinned="showPinned" :as-reaction-picker="asReactionPicker" @chosen="chosen" ref="picker"/>
 </MkPopup>
 </template>
 
diff --git a/src/client/components/ui/popup-menu.vue b/src/client/components/ui/popup-menu.vue
index cc4c83667f..23f7c89f3b 100644
--- a/src/client/components/ui/popup-menu.vue
+++ b/src/client/components/ui/popup-menu.vue
@@ -1,6 +1,6 @@
 <template>
 <MkPopup ref="popup" :src="src" @closed="$emit('closed')">
-	<MkMenu :items="items" :align="align" @close="$refs.popup.close()" class="_popup" style="box-shadow: 0 8px 32px rgb(0 0 0 / 30%);"/>
+	<MkMenu :items="items" :align="align" @close="$refs.popup.close()" class="_popup _shadow"/>
 </MkPopup>
 </template>
 
-- 
GitLab


From c95619b2bf85ad031b4dd5f141dbefc0c8d5d617 Mon Sep 17 00:00:00 2001
From: syuilo <Syuilotan@yahoo.co.jp>
Date: Sun, 8 Aug 2021 17:23:16 +0900
Subject: [PATCH 64/70] Update ja-JP.yml

---
 locales/ja-JP.yml | 1 +
 1 file changed, 1 insertion(+)

diff --git a/locales/ja-JP.yml b/locales/ja-JP.yml
index 3a00c28ddb..55e5c8e408 100644
--- a/locales/ja-JP.yml
+++ b/locales/ja-JP.yml
@@ -128,6 +128,7 @@ editWidgets: "ウィジェットを編集"
 editWidgetsExit: "編集を終了"
 customEmojis: "カスタム絵文字"
 emoji: "絵文字"
+emojis: "絵文字"
 emojiName: "絵文字名"
 emojiUrl: "絵文字画像URL"
 addEmoji: "絵文字を追加"
-- 
GitLab


From b90d76dcfe614d9668cc43a0728cc53b48898738 Mon Sep 17 00:00:00 2001
From: syuilo <Syuilotan@yahoo.co.jp>
Date: Sun, 8 Aug 2021 18:47:57 +0900
Subject: [PATCH 65/70] Update links.md

---
 src/docs/ja-JP/general/links.md | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/src/docs/ja-JP/general/links.md b/src/docs/ja-JP/general/links.md
index 9541a6255b..d6b16856fb 100644
--- a/src/docs/ja-JP/general/links.md
+++ b/src/docs/ja-JP/general/links.md
@@ -1,2 +1,5 @@
 # リンク集
-todo
+
+## ライブラリ
+- [misskey-dev/misskey.js](https://github.com/misskey-dev/misskey.js) - JavaScriptのMisskey SDK
+- [misskey-dev/mfm.js](https://github.com/misskey-dev/mfm.js) - JavaScriptのMFMパーサー実装
-- 
GitLab


From 0062e084f84340e5e65e02e4d66bb986a8f26bf5 Mon Sep 17 00:00:00 2001
From: syuilo <Syuilotan@yahoo.co.jp>
Date: Sun, 8 Aug 2021 18:55:15 +0900
Subject: [PATCH 66/70] New Crowdin updates (#7614)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (Chinese Simplified)

* New translations ja-JP.yml (Kabyle)

* New translations ja-JP.yml (Kabyle)

* New translations ja-JP.yml (Korean)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (French)

* New translations ja-JP.yml (Italian)

* New translations ja-JP.yml (French)

* New translations ja-JP.yml (Italian)

* New translations ja-JP.yml (French)

* New translations ja-JP.yml (Italian)

* New translations ja-JP.yml (Italian)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Russian)

* New translations ja-JP.yml (Indonesian)

* New translations ja-JP.yml (Chinese Traditional)

* New translations ja-JP.yml (Chinese Simplified)

* New translations ja-JP.yml (Ukrainian)

* New translations ja-JP.yml (French)

* New translations ja-JP.yml (Polish)

* New translations ja-JP.yml (Korean)

* New translations ja-JP.yml (Italian)

* New translations ja-JP.yml (Czech)

* New translations ja-JP.yml (Spanish)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (Japanese, Kansai)
---
 locales/cs-CZ.yml   |  1 +
 locales/de-DE.yml   |  5 +++--
 locales/en-US.yml   |  5 +++--
 locales/eo-UY.yml   |  5 +++--
 locales/es-ES.yml   |  1 +
 locales/fr-FR.yml   | 10 +++++++---
 locales/id-ID.yml   |  1 +
 locales/it-IT.yml   |  9 ++++++---
 locales/ja-KS.yml   |  1 +
 locales/kab-KAB.yml | 20 ++++++++++++++++++++
 locales/ko-KR.yml   | 10 ++++++++++
 locales/pl-PL.yml   |  1 +
 locales/ru-RU.yml   |  1 +
 locales/uk-UA.yml   |  1 +
 locales/zh-CN.yml   |  2 ++
 locales/zh-TW.yml   |  1 +
 16 files changed, 62 insertions(+), 12 deletions(-)

diff --git a/locales/cs-CZ.yml b/locales/cs-CZ.yml
index 958323525a..1897f3f2aa 100644
--- a/locales/cs-CZ.yml
+++ b/locales/cs-CZ.yml
@@ -111,6 +111,7 @@ editWidgets: "Upravit widget"
 editWidgetsExit: "Hotovo"
 customEmojis: "Vlastní emoji"
 emoji: "Emoji"
+emojis: "Emoji"
 emojiName: "Jméno emoji"
 emojiUrl: "URL obrázku"
 addEmoji: "Přidat emoji"
diff --git a/locales/de-DE.yml b/locales/de-DE.yml
index c9cff1fec1..d7538c7fe6 100644
--- a/locales/de-DE.yml
+++ b/locales/de-DE.yml
@@ -128,6 +128,7 @@ editWidgets: "Widgets bearbeiten"
 editWidgetsExit: "Fertig"
 customEmojis: "Benutzerdefinierte Emojis"
 emoji: "Emojis"
+emojis: "Emojis"
 emojiName: "Emojiname"
 emojiUrl: "Emoji-URL"
 addEmoji: "Emoji hinzufügen"
@@ -158,8 +159,8 @@ annotation: "Anmerkung"
 federation: "Föderation"
 instances: "Instanzen"
 registeredAt: "Registriert am"
-latestRequestSentAt: "Letzte Anfrage gesendet am"
-latestRequestReceivedAt: "Letzte Anfrage erhalten am"
+latestRequestSentAt: "Letzte Anfrage gesendet"
+latestRequestReceivedAt: "Letzte Anfrage erhalten"
 latestStatus: "Neuster Status"
 storageUsage: "Verbrauchter Speicherplatz"
 charts: "Diagramme"
diff --git a/locales/en-US.yml b/locales/en-US.yml
index 7b02532331..e5ed9fa9c5 100644
--- a/locales/en-US.yml
+++ b/locales/en-US.yml
@@ -128,6 +128,7 @@ editWidgets: "Edit widgets"
 editWidgetsExit: "Done"
 customEmojis: "Custom Emoji"
 emoji: "Emoji"
+emojis: "Emoji"
 emojiName: "Emoji name"
 emojiUrl: "Emoji URL"
 addEmoji: "Add an emoji"
@@ -158,8 +159,8 @@ annotation: "Comments"
 federation: "Federation"
 instances: "Instances"
 registeredAt: "Registered at"
-latestRequestSentAt: "Last request sent at"
-latestRequestReceivedAt: "Last request received at"
+latestRequestSentAt: "Last request sent"
+latestRequestReceivedAt: "Last request received"
 latestStatus: "Latest status"
 storageUsage: "Storage usage"
 charts: "Charts"
diff --git a/locales/eo-UY.yml b/locales/eo-UY.yml
index 99d2a93c9b..89f84a84ad 100644
--- a/locales/eo-UY.yml
+++ b/locales/eo-UY.yml
@@ -113,6 +113,7 @@ editWidgets: "Redakti fenestraĵon"
 editWidgetsExit: "Fini la redaktadon"
 customEmojis: "Personecigitaj emoĵioj"
 emoji: "Emoĵio"
+emojis: "Emoĵio"
 emojiName: "Nomo de emoĵio"
 emojiUrl: "URL de la bildo de emoĵio"
 addEmoji: "Aldoni emoĵion"
@@ -366,7 +367,7 @@ _time:
   hour: "hor"
   day: "Tago"
 _tutorial:
-  title: "Uzado de Misskey (Ĉi-sekve Miskejo)"
+  title: "Uzado de Misskey"
   step1_1: "Bonvenon."
   step7_2: "Se vi volus scii pli pri Miskejon, volu rigardi la fako {help}."
 _permissions:
@@ -435,7 +436,7 @@ _exportOrImport:
 _timelines:
   home: "Hejmo"
   local: "Loka"
-  social: "Transa"
+  social: "Sociala"
   global: "Konfederacia"
 _rooms:
   translate: "Movi"
diff --git a/locales/es-ES.yml b/locales/es-ES.yml
index 8c3e6f13ee..0defcabd0e 100644
--- a/locales/es-ES.yml
+++ b/locales/es-ES.yml
@@ -127,6 +127,7 @@ editWidgets: "Editar widgets"
 editWidgetsExit: "Terminar edición"
 customEmojis: "Emojis personalizados"
 emoji: "Emoji"
+emojis: "Emoji"
 emojiName: "Nombre del emoji"
 emojiUrl: "URL de la imágen del emoji"
 addEmoji: "Agregar emoji"
diff --git a/locales/fr-FR.yml b/locales/fr-FR.yml
index 5a1db402ac..4a95aae42f 100644
--- a/locales/fr-FR.yml
+++ b/locales/fr-FR.yml
@@ -128,6 +128,7 @@ editWidgets: "Modifier les widgets"
 editWidgetsExit: "Valider les modifications"
 customEmojis: "Émojis personnalisés"
 emoji: "Émoji"
+emojis: "Émoji"
 emojiName: "Nom de l’émoji"
 emojiUrl: "URL de l’émoji"
 addEmoji: "Ajouter un émoji"
@@ -767,6 +768,7 @@ global: "Global"
 squareAvatars: "Avatars carrés"
 sent: "Envoyer"
 hashtags: "Hashtags"
+troubleshooting: "Résolution de problèmes"
 _docs:
   continueReading: "Lire plus"
   features: "Fonctionnalités"
@@ -871,6 +873,8 @@ _mfm:
   blurDescription: "Le contenu peut être flouté ; il sera visible en le survolant avec le curseur."
   font: "Police de caractères"
   fontDescription: "Il est possible de choisir la police."
+  rainbow: "Arc-en-ciel"
+  rainbowDescription: "Permet d'afficher le contenu en couleurs arc-en-ciel."
 _reversi:
   reversi: "Reversi"
   gameSettings: "Réglages de la partie"
@@ -1605,11 +1609,11 @@ _notification:
   youWereInvitedToGroup: "Invité·e au groupe"
   _types:
     all: "Toutes"
-    follow: "Abonnements"
+    follow: "Nouvel·le abonné·e"
     mention: "Mentions"
     reply: "Réponses"
-    renote: "Partager"
-    quote: "Citer"
+    renote: "Renotes"
+    quote: "Citations"
     reaction: "Réactions"
     pollVote: "Votes dans des sondages"
     receiveFollowRequest: "Demande d'abonnement reçue"
diff --git a/locales/id-ID.yml b/locales/id-ID.yml
index 16f4d4468b..6b98b43ca8 100644
--- a/locales/id-ID.yml
+++ b/locales/id-ID.yml
@@ -128,6 +128,7 @@ editWidgets: "Sunting gawit"
 editWidgetsExit: "Selesai"
 customEmojis: "Emoji kustom"
 emoji: "Emoji"
+emojis: "Emoji"
 emojiName: "Nama emoji"
 emojiUrl: "URL Emoji"
 addEmoji: "Tambahkan emoji"
diff --git a/locales/it-IT.yml b/locales/it-IT.yml
index 70672aa0a8..f291eaa17f 100644
--- a/locales/it-IT.yml
+++ b/locales/it-IT.yml
@@ -127,6 +127,7 @@ editWidgets: "Modifica i widget"
 editWidgetsExit: "Modifica fine"
 customEmojis: "Emoji personalizzati"
 emoji: "Emoji"
+emojis: "Emoji"
 emojiName: "Nome dell'emoji"
 emojiUrl: "URL dell'emoji"
 addEmoji: "Aggiungi un emoji"
@@ -743,6 +744,7 @@ ratio: "Rapporto"
 global: "Federata"
 sent: "Inviare"
 hashtags: "Hashtag"
+troubleshooting: "Risoluzione problemi"
 _docs:
   continueReading: "Leggi di più"
   features: "Funzionalità"
@@ -805,6 +807,7 @@ _mfm:
   blur: "Sfocatura"
   font: "Tipo di carattere"
   fontDescription: "Puoi scegliere il tipo di carattere per il contenuto."
+  rainbow: "Arcobaleno"
 _reversi:
   reversi: "Reversi"
   gameSettings: "Impostazioni di gioco"
@@ -1392,12 +1395,12 @@ _notification:
   youWereInvitedToGroup: "Invitat@ al gruppo"
   _types:
     all: "Tutto"
-    follow: "Follows"
+    follow: "NuovÉ™ follower"
     mention: "Menzioni"
-    reply: "Rispondi"
+    reply: "Risposte"
     renote: "Rinota"
     quote: "Cita"
-    reaction: "Reazione"
+    reaction: "Reazioni"
     pollVote: "Voti ricevuti"
     receiveFollowRequest: "Richiesta di follow ricevuta"
     followRequestAccepted: "Richiesta di follow accettata"
diff --git a/locales/ja-KS.yml b/locales/ja-KS.yml
index 05542e8198..80ac48a765 100644
--- a/locales/ja-KS.yml
+++ b/locales/ja-KS.yml
@@ -127,6 +127,7 @@ editWidgets: "ウィジェットをいじる"
 editWidgetsExit: "編集終ったで"
 customEmojis: "カスタム絵文字"
 emoji: "絵文字"
+emojis: "絵文字"
 emojiName: "絵文字名"
 emojiUrl: "絵文字画像URL"
 addEmoji: "絵文字を追加"
diff --git a/locales/kab-KAB.yml b/locales/kab-KAB.yml
index e96f5b366f..199e4cc135 100644
--- a/locales/kab-KAB.yml
+++ b/locales/kab-KAB.yml
@@ -7,7 +7,9 @@ username: "Isem n umseqdac"
 password: "Awal uffir"
 ok: "IH"
 settings: "IÉ£ewwaá¹›en"
+otherSettings: "Iɣewwaren nniḍen"
 profile: "Amaɣnu"
+signup: "Jerred"
 save: "Sekles"
 delete: "Kkes"
 addToList: "Rnu ɣer tebdart"
@@ -27,15 +29,31 @@ followers: "Imeḍfaṛen"
 followsYou: "Yeṭṭafaṛ-ik·em-id"
 createList: "Snulfu-d tabdart"
 enterListName: "Isem n tebdart"
+privacy: "Tabaḍnit"
 follow: "Ḍfeṛ"
 you: "Kečči·mmi"
 selectList: "Fren tabdart"
 youHaveNoLists: "Ulac ɣur-k·m ula d yiwet n tabdart"
+security: "Taɣellist"
 remove: "Kkes"
 userList: "Tibdarin"
+securityKey: "Tasarutt n tɣellist"
+securityKeyName: "Isem n tsarutt"
+signinRequired: "Ttxil jerred"
+signinWith: "Tuqqna s {x}"
+tapSecurityKey: "Sekcem tasarutt-ik·im n tɣellist"
 uiLanguage: "Tutlayt n wegrudem"
+accountSettings: "Iɣewwaṛen n umiḍan"
+plugins: "Izegrar"
+email: "Imayl"
+emailAddress: "Tansa imayl"
 smtpUser: "Isem n umseqdac"
 smtpPass: "Awal uffir"
+other: "Wiyyaḍ"
+accountInfo: "Talɣut n umiḍan"
+emailNotification: "Ilɣa imayl"
+selectAccount: "Fren amiḍan"
+accounts: "Imiḍan"
 _email:
   _follow:
     title: "Yeṭṭafaṛ-ik·em-id"
@@ -48,6 +66,8 @@ _theme:
     mention: "Bder"
 _sfx:
   notification: "Ilɣuyen"
+_permissions:
+  "write:account": "Ẓreg talɣut n umiḍan-ik·im"
 _widgets:
   notifications: "Ilɣuyen"
 _cw:
diff --git a/locales/ko-KR.yml b/locales/ko-KR.yml
index bcd3a0fe44..6562874bc1 100644
--- a/locales/ko-KR.yml
+++ b/locales/ko-KR.yml
@@ -128,6 +128,7 @@ editWidgets: "위젯 편집"
 editWidgetsExit: "편집 종료"
 customEmojis: "커스텀 이모지"
 emoji: "이모지"
+emojis: "이모지"
 emojiName: "이모지 이름"
 emojiUrl: "이모지 URL"
 addEmoji: "이모지 추가"
@@ -766,8 +767,15 @@ customCssWarn: "이 설정은 기능을 알고 있는 경우에만 사용해야
 global: "글로벌"
 squareAvatars: "프로필 아이콘을 사각형으로 표시"
 sent: "전송"
+received: "수신"
+searchResult: "검색 결과"
 hashtags: "해시태그"
+troubleshooting: "트러블 슈팅"
 _docs:
+  continueReading: "계속 읽기"
+  features: "기능"
+  generalTopics: "일반 주제"
+  advancedTopics: "심화 주제"
   admin: "관리"
 _ad:
   back: "뒤로"
@@ -867,6 +875,8 @@ _mfm:
   blurDescription: "내용이 흐리게 보입니다. 마우스를 위에 올려두면 내용이 보입니다."
   font: "폰트"
   fontDescription: "내용의 글꼴을 지정할 수 있습니다."
+  rainbow: "무지개"
+  rainbowDescription: "내용을 무지개로 표시합니다."
 _reversi:
   reversi: "리버시"
   gameSettings: "대국 설정"
diff --git a/locales/pl-PL.yml b/locales/pl-PL.yml
index eafd072a9f..379f06dd1b 100644
--- a/locales/pl-PL.yml
+++ b/locales/pl-PL.yml
@@ -128,6 +128,7 @@ editWidgets: "Edytuj widżet"
 editWidgetsExit: "Gotowe"
 customEmojis: "Niestandardowe emoji"
 emoji: "Emoji"
+emojis: "Emoji"
 emojiName: "Nazwa emoji"
 emojiUrl: "Adres URL emoji"
 addEmoji: "Dodaj emoji"
diff --git a/locales/ru-RU.yml b/locales/ru-RU.yml
index 21b38651a6..2d1334f521 100644
--- a/locales/ru-RU.yml
+++ b/locales/ru-RU.yml
@@ -128,6 +128,7 @@ editWidgets: "Редактировать виджеты"
 editWidgetsExit: "Готово"
 customEmojis: "Эмодзи пользователя"
 emoji: "Эмодзи"
+emojis: "Эмодзи"
 emojiName: "Название эмодзи"
 emojiUrl: "URL эмодзи"
 addEmoji: "Добавить эмодзи"
diff --git a/locales/uk-UA.yml b/locales/uk-UA.yml
index 56ffd3e78f..b68f99c67b 100644
--- a/locales/uk-UA.yml
+++ b/locales/uk-UA.yml
@@ -127,6 +127,7 @@ editWidgets: "Редагувати віджети"
 editWidgetsExit: "Готово"
 customEmojis: "Кастомні емоджі"
 emoji: "Емоджі"
+emojis: "Емоджі"
 emojiName: "Назва емоджі"
 emojiUrl: "URL емодзі"
 addEmoji: "Додати емодзі"
diff --git a/locales/zh-CN.yml b/locales/zh-CN.yml
index 6b5182c6f2..3e5e2ecd63 100644
--- a/locales/zh-CN.yml
+++ b/locales/zh-CN.yml
@@ -128,6 +128,7 @@ editWidgets: "编辑小工具"
 editWidgetsExit: "完成编辑"
 customEmojis: "自定义表情符号"
 emoji: "表情符号"
+emojis: "表情符号"
 emojiName: "表情符号名称"
 emojiUrl: "表情符号地址"
 addEmoji: "添加表情符号"
@@ -769,6 +770,7 @@ sent: "发送"
 received: "收取"
 searchResult: "搜索结果"
 hashtags: "话题标签"
+troubleshooting: "故障排除"
 _docs:
   continueReading: "继续阅读"
   features: "特性"
diff --git a/locales/zh-TW.yml b/locales/zh-TW.yml
index bae072b0bb..f362d4258b 100644
--- a/locales/zh-TW.yml
+++ b/locales/zh-TW.yml
@@ -128,6 +128,7 @@ editWidgets: "編輯小工具"
 editWidgetsExit: "完成"
 customEmojis: "自訂表情符號"
 emoji: "表情符號"
+emojis: "表情符號"
 emojiName: "表情符號名稱"
 emojiUrl: "表情符號URL"
 addEmoji: "加入表情符號"
-- 
GitLab


From 576303cd725920c11c83fea2ca88603c6f21801b Mon Sep 17 00:00:00 2001
From: syuilo <Syuilotan@yahoo.co.jp>
Date: Sun, 8 Aug 2021 18:57:07 +0900
Subject: [PATCH 67/70] Update crowdin.yml

---
 crowdin.yml | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/crowdin.yml b/crowdin.yml
index 160b9184d3..2d2cd5a49d 100644
--- a/crowdin.yml
+++ b/crowdin.yml
@@ -2,6 +2,6 @@ files:
   - source: /locales/ja-JP.yml
     translation: /locales/%locale%.yml
     update_option: update_as_unapproved
-  - source: /src/docs/ja-JP/*.md
-    translation: /src/docs/%locale%/%original_file_name%
+  - source: /src/docs/ja-JP/**/*.md
+    translation: /src/docs/%locale%/**/%original_file_name%
     update_option: update_as_unapproved
-- 
GitLab


From ed20805b10f4e332f50d4579c700058cb74c942c Mon Sep 17 00:00:00 2001
From: syuilo <Syuilotan@yahoo.co.jp>
Date: Sun, 8 Aug 2021 21:39:45 +0900
Subject: [PATCH 68/70] New Crowdin updates (#7616)

* New translations troubleshooting.md (Indonesian)

* New translations troubleshooting.md (Chinese Traditional)

* New translations troubleshooting.md (German)

* New translations troubleshooting.md (Chinese Simplified)

* New translations troubleshooting.md (Ukrainian)

* New translations troubleshooting.md (Russian)

* New translations troubleshooting.md (Portuguese)

* New translations troubleshooting.md (Polish)

* New translations troubleshooting.md (Norwegian)

* New translations troubleshooting.md (Dutch)

* New translations troubleshooting.md (Korean)

* New translations troubleshooting.md (Italian)

* New translations report-issue.md (Korean)

* New translations report-issue.md (German)

* New translations links.md (Portuguese)

* New translations links.md (Kannada)

* New translations misskey.md (German)

* New translations misskey.md (Danish)

* New translations misskey.md (Czech)

* New translations misskey.md (Arabic)

* New translations misskey.md (Spanish)

* New translations misskey.md (French)

* New translations links.md (Japanese, Kansai)

* New translations links.md (Kabyle)

* New translations links.md (Haitian Creole)

* New translations links.md (Lojban)

* New translations misskey.md (Korean)

* New translations links.md (Uyghur)

* New translations links.md (Esperanto)

* New translations links.md (Thai)

* New translations links.md (Indonesian)

* New translations links.md (English)

* New translations links.md (Chinese Traditional)

* New translations links.md (Chinese Simplified)

* New translations links.md (Ukrainian)

* New translations links.md (Russian)

* New translations misskey.md (Italian)

* New translations misskey.md (Dutch)

* New translations report-issue.md (Danish)

* New translations misskey.md (Uyghur)

* New translations report-issue.md (Czech)

* New translations report-issue.md (Arabic)

* New translations report-issue.md (Spanish)

* New translations report-issue.md (French)

* New translations misskey.md (Japanese, Kansai)

* New translations misskey.md (Kabyle)

* New translations misskey.md (Haitian Creole)

* New translations misskey.md (Kannada)

* New translations misskey.md (Lojban)

* New translations misskey.md (Esperanto)

* New translations misskey.md (Norwegian)

* New translations misskey.md (Thai)

* New translations misskey.md (Indonesian)

* New translations misskey.md (English)

* New translations misskey.md (Chinese Traditional)

* New translations misskey.md (Chinese Simplified)

* New translations misskey.md (Ukrainian)

* New translations misskey.md (Russian)

* New translations misskey.md (Portuguese)

* New translations misskey.md (Polish)

* New translations widgets.md (Lojban)

* New translations reaction.md (Polish)

* New translations widgets.md (Esperanto)

* New translations pages.md (Esperanto)

* New translations reaction.md (Spanish)

* New translations reaction.md (French)

* New translations pages.md (Japanese, Kansai)

* New translations pages.md (Kabyle)

* New translations pages.md (Haitian Creole)

* New translations pages.md (Kannada)

* New translations pages.md (Lojban)

* New translations pages.md (Uyghur)

* New translations pages.md (Thai)

* New translations reaction.md (Czech)

* New translations pages.md (Indonesian)

* New translations pages.md (English)

* New translations pages.md (Chinese Traditional)

* New translations pages.md (Chinese Simplified)

* New translations pages.md (Ukrainian)

* New translations pages.md (Russian)

* New translations pages.md (Portuguese)

* New translations pages.md (Polish)

* New translations pages.md (Norwegian)

* New translations reaction.md (Arabic)

* New translations reaction.md (Danish)

* New translations pages.md (Korean)

* New translations reaction.md (Indonesian)

* New translations silence.md (French)

* New translations reaction.md (Japanese, Kansai)

* New translations reaction.md (Kabyle)

* New translations reaction.md (Haitian Creole)

* New translations reaction.md (Kannada)

* New translations reaction.md (Lojban)

* New translations reaction.md (Uyghur)

* New translations reaction.md (Esperanto)

* New translations reaction.md (Thai)

* New translations reaction.md (English)

* New translations reaction.md (German)

* New translations reaction.md (Chinese Traditional)

* New translations reaction.md (Chinese Simplified)

* New translations reaction.md (Ukrainian)

* New translations reaction.md (Russian)

* New translations reaction.md (Portuguese)

* New translations reaction.md (Norwegian)

* New translations reaction.md (Dutch)

* New translations reaction.md (Korean)

* New translations reaction.md (Italian)

* New translations pages.md (Dutch)

* New translations pages.md (Italian)

* New translations silence.md (Arabic)

* New translations mute.md (Kabyle)

* New translations note.md (Italian)

* New translations note.md (German)

* New translations note.md (Danish)

* New translations note.md (Czech)

* New translations note.md (Arabic)

* New translations note.md (Spanish)

* New translations note.md (French)

* New translations mute.md (Japanese, Kansai)

* New translations mute.md (Haitian Creole)

* New translations note.md (Dutch)

* New translations mute.md (Kannada)

* New translations mute.md (Lojban)

* New translations mute.md (Uyghur)

* New translations mute.md (Esperanto)

* New translations mute.md (Thai)

* New translations mute.md (Indonesian)

* New translations mute.md (English)

* New translations mute.md (Chinese Traditional)

* New translations mute.md (Chinese Simplified)

* New translations note.md (Korean)

* New translations note.md (Norwegian)

* New translations pages.md (German)

* New translations note.md (Lojban)

* New translations pages.md (Danish)

* New translations pages.md (Czech)

* New translations pages.md (Arabic)

* New translations pages.md (Spanish)

* New translations pages.md (French)

* New translations note.md (Japanese, Kansai)

* New translations note.md (Kabyle)

* New translations note.md (Haitian Creole)

* New translations note.md (Kannada)

* New translations note.md (Uyghur)

* New translations note.md (Polish)

* New translations note.md (Esperanto)

* New translations note.md (Thai)

* New translations note.md (Indonesian)

* New translations note.md (English)

* New translations note.md (Chinese Traditional)

* New translations note.md (Chinese Simplified)

* New translations note.md (Ukrainian)

* New translations note.md (Russian)

* New translations note.md (Portuguese)

* New translations silence.md (Spanish)

* New translations silence.md (Czech)

* New translations widgets.md (Thai)

* New translations timeline.md (Portuguese)

* New translations timeline.md (Esperanto)

* New translations timeline.md (Thai)

* New translations timeline.md (Indonesian)

* New translations timeline.md (English)

* New translations timeline.md (Chinese Traditional)

* New translations timeline.md (Chinese Simplified)

* New translations timeline.md (Ukrainian)

* New translations timeline.md (Russian)

* New translations timeline.md (Polish)

* New translations timeline.md (Lojban)

* New translations timeline.md (Norwegian)

* New translations timeline.md (Dutch)

* New translations timeline.md (Korean)

* New translations timeline.md (Italian)

* New translations timeline.md (German)

* New translations timeline.md (Danish)

* New translations timeline.md (Czech)

* New translations timeline.md (Arabic)

* New translations timeline.md (Spanish)

* New translations timeline.md (Uyghur)

* New translations timeline.md (Kannada)

* New translations theme.md (Japanese, Kansai)

* New translations widgets.md (Dutch)

* New translations widgets.md (Indonesian)

* New translations widgets.md (English)

* New translations widgets.md (Chinese Traditional)

* New translations widgets.md (Chinese Simplified)

* New translations widgets.md (Ukrainian)

* New translations widgets.md (Russian)

* New translations widgets.md (Portuguese)

* New translations widgets.md (Polish)

* New translations widgets.md (Norwegian)

* New translations widgets.md (Korean)

* New translations timeline.md (Haitian Creole)

* New translations widgets.md (Italian)

* New translations widgets.md (German)

* New translations widgets.md (Danish)

* New translations widgets.md (Czech)

* New translations widgets.md (Arabic)

* New translations widgets.md (Spanish)

* New translations widgets.md (French)

* New translations timeline.md (Japanese, Kansai)

* New translations timeline.md (Kabyle)

* New translations timeline.md (French)

* New translations theme.md (Kabyle)

* New translations silence.md (Danish)

* New translations silence.md (Chinese Traditional)

* New translations silence.md (Kabyle)

* New translations silence.md (Haitian Creole)

* New translations silence.md (Kannada)

* New translations silence.md (Lojban)

* New translations silence.md (Uyghur)

* New translations silence.md (Esperanto)

* New translations silence.md (Thai)

* New translations silence.md (Indonesian)

* New translations silence.md (English)

* New translations silence.md (Chinese Simplified)

* New translations theme.md (French)

* New translations silence.md (Ukrainian)

* New translations silence.md (Russian)

* New translations silence.md (Portuguese)

* New translations silence.md (Polish)

* New translations silence.md (Norwegian)

* New translations silence.md (Dutch)

* New translations silence.md (Korean)

* New translations silence.md (Italian)

* New translations silence.md (German)

* New translations silence.md (Japanese, Kansai)

* New translations theme.md (Spanish)

* New translations theme.md (Haitian Creole)

* New translations theme.md (Ukrainian)

* New translations theme.md (Kannada)

* New translations theme.md (Lojban)

* New translations theme.md (Uyghur)

* New translations theme.md (Esperanto)

* New translations theme.md (Thai)

* New translations theme.md (Indonesian)

* New translations theme.md (English)

* New translations theme.md (Chinese Traditional)

* New translations theme.md (Chinese Simplified)

* New translations theme.md (Russian)

* New translations theme.md (Arabic)

* New translations theme.md (Portuguese)

* New translations theme.md (Polish)

* New translations theme.md (Norwegian)

* New translations theme.md (Dutch)

* New translations theme.md (Korean)

* New translations theme.md (Italian)

* New translations theme.md (German)

* New translations theme.md (Danish)

* New translations theme.md (Czech)

* New translations troubleshooting.md (Japanese, Kansai)
---
 src/docs/ar-SA/admin/disable-timelines.md     |   8 +
 src/docs/ar-SA/admin/faq.md                   |   5 +
 src/docs/ar-SA/advanced/aiscript.md           |   7 +
 src/docs/ar-SA/advanced/api.md                |  58 +++
 src/docs/ar-SA/advanced/create-plugin.md      |  74 ++++
 src/docs/ar-SA/advanced/develop-bot.md        |   6 +
 src/docs/ar-SA/advanced/reversi-bot.md        | 160 ++++++++
 src/docs/ar-SA/advanced/stream.md             | 350 ++++++++++++++++++
 src/docs/ar-SA/features/antenna.md            |   4 +
 src/docs/ar-SA/features/custom-emoji.md       |   2 +
 src/docs/ar-SA/features/deck.md               |  18 +
 src/docs/ar-SA/features/drive.md              |  17 +
 src/docs/ar-SA/features/favorite.md           |   4 +
 src/docs/ar-SA/features/follow.md             |   2 +
 src/docs/ar-SA/features/keyboard-shortcut.md  |  66 ++++
 src/docs/ar-SA/features/mfm.md                |  12 +
 src/docs/ar-SA/features/mute.md               |  13 +
 src/docs/ar-SA/features/note.md               |  51 +++
 src/docs/ar-SA/features/pages.md              |  10 +
 src/docs/ar-SA/features/reaction.md           |  11 +
 src/docs/ar-SA/features/silence.md            |   6 +
 src/docs/ar-SA/features/theme.md              |  68 ++++
 src/docs/ar-SA/features/timeline.md           |  31 ++
 src/docs/ar-SA/features/widgets.md            |   7 +
 src/docs/ar-SA/general/apps.md                |   6 +
 src/docs/ar-SA/general/faq.md                 |  22 ++
 src/docs/ar-SA/general/glossary.md            |  83 +++++
 src/docs/ar-SA/general/links.md               |   5 +
 src/docs/ar-SA/general/misskey.md             |  87 +++++
 src/docs/ar-SA/general/report-issue.md        |   8 +
 src/docs/ar-SA/general/troubleshooting.md     |  36 ++
 src/docs/cs-CZ/admin/disable-timelines.md     |   8 +
 src/docs/cs-CZ/admin/faq.md                   |   5 +
 src/docs/cs-CZ/advanced/aiscript.md           |   7 +
 src/docs/cs-CZ/advanced/api.md                |  58 +++
 src/docs/cs-CZ/advanced/create-plugin.md      |  74 ++++
 src/docs/cs-CZ/advanced/develop-bot.md        |   6 +
 src/docs/cs-CZ/advanced/reversi-bot.md        | 160 ++++++++
 src/docs/cs-CZ/advanced/stream.md             | 350 ++++++++++++++++++
 src/docs/cs-CZ/features/antenna.md            |   4 +
 src/docs/cs-CZ/features/custom-emoji.md       |   2 +
 src/docs/cs-CZ/features/deck.md               |  18 +
 src/docs/cs-CZ/features/drive.md              |  17 +
 src/docs/cs-CZ/features/favorite.md           |   4 +
 src/docs/cs-CZ/features/follow.md             |   2 +
 src/docs/cs-CZ/features/keyboard-shortcut.md  |  66 ++++
 src/docs/cs-CZ/features/mfm.md                |  12 +
 src/docs/cs-CZ/features/mute.md               |  13 +
 src/docs/cs-CZ/features/note.md               |  51 +++
 src/docs/cs-CZ/features/pages.md              |  10 +
 src/docs/cs-CZ/features/reaction.md           |  11 +
 src/docs/cs-CZ/features/silence.md            |   6 +
 src/docs/cs-CZ/features/theme.md              |  68 ++++
 src/docs/cs-CZ/features/timeline.md           |  31 ++
 src/docs/cs-CZ/features/widgets.md            |   7 +
 src/docs/cs-CZ/general/apps.md                |   6 +
 src/docs/cs-CZ/general/faq.md                 |  22 ++
 src/docs/cs-CZ/general/glossary.md            |  83 +++++
 src/docs/cs-CZ/general/links.md               |   5 +
 src/docs/cs-CZ/general/misskey.md             |  87 +++++
 src/docs/cs-CZ/general/report-issue.md        |   8 +
 src/docs/cs-CZ/general/troubleshooting.md     |  36 ++
 src/docs/da-DK/admin/disable-timelines.md     |   8 +
 src/docs/da-DK/admin/faq.md                   |   5 +
 src/docs/da-DK/advanced/aiscript.md           |   7 +
 src/docs/da-DK/advanced/api.md                |  58 +++
 src/docs/da-DK/advanced/create-plugin.md      |  74 ++++
 src/docs/da-DK/advanced/develop-bot.md        |   6 +
 src/docs/da-DK/advanced/reversi-bot.md        | 160 ++++++++
 src/docs/da-DK/advanced/stream.md             | 350 ++++++++++++++++++
 src/docs/da-DK/features/antenna.md            |   4 +
 src/docs/da-DK/features/custom-emoji.md       |   2 +
 src/docs/da-DK/features/deck.md               |  18 +
 src/docs/da-DK/features/drive.md              |  17 +
 src/docs/da-DK/features/favorite.md           |   4 +
 src/docs/da-DK/features/follow.md             |   2 +
 src/docs/da-DK/features/keyboard-shortcut.md  |  66 ++++
 src/docs/da-DK/features/mfm.md                |  12 +
 src/docs/da-DK/features/mute.md               |  13 +
 src/docs/da-DK/features/note.md               |  51 +++
 src/docs/da-DK/features/pages.md              |  10 +
 src/docs/da-DK/features/reaction.md           |  11 +
 src/docs/da-DK/features/silence.md            |   6 +
 src/docs/da-DK/features/theme.md              |  68 ++++
 src/docs/da-DK/features/timeline.md           |  31 ++
 src/docs/da-DK/features/widgets.md            |   7 +
 src/docs/da-DK/general/apps.md                |   6 +
 src/docs/da-DK/general/faq.md                 |  22 ++
 src/docs/da-DK/general/glossary.md            |  83 +++++
 src/docs/da-DK/general/links.md               |   5 +
 src/docs/da-DK/general/misskey.md             |  87 +++++
 src/docs/da-DK/general/report-issue.md        |   8 +
 src/docs/da-DK/general/troubleshooting.md     |  36 ++
 src/docs/de-DE/admin/disable-timelines.md     |   8 +
 src/docs/de-DE/admin/faq.md                   |   5 +
 src/docs/de-DE/advanced/aiscript.md           |   7 +
 src/docs/de-DE/advanced/api.md                |  58 +++
 src/docs/de-DE/advanced/create-plugin.md      |  74 ++++
 src/docs/de-DE/advanced/develop-bot.md        |   6 +
 src/docs/de-DE/advanced/reversi-bot.md        | 160 ++++++++
 src/docs/de-DE/advanced/stream.md             | 350 ++++++++++++++++++
 src/docs/de-DE/features/antenna.md            |   4 +
 src/docs/de-DE/features/custom-emoji.md       |   2 +
 src/docs/de-DE/features/deck.md               |  18 +
 src/docs/de-DE/features/drive.md              |  17 +
 src/docs/de-DE/features/favorite.md           |   4 +
 src/docs/de-DE/features/follow.md             |   2 +
 src/docs/de-DE/features/keyboard-shortcut.md  |  66 ++++
 src/docs/de-DE/features/mfm.md                |  12 +
 src/docs/de-DE/features/mute.md               |  13 +
 src/docs/de-DE/features/note.md               |  51 +++
 src/docs/de-DE/features/pages.md              |  10 +
 src/docs/de-DE/features/reaction.md           |  11 +
 src/docs/de-DE/features/silence.md            |   6 +
 src/docs/de-DE/features/theme.md              |  68 ++++
 src/docs/de-DE/features/timeline.md           |  31 ++
 src/docs/de-DE/features/widgets.md            |   7 +
 src/docs/de-DE/general/apps.md                |   6 +
 src/docs/de-DE/general/faq.md                 |  22 ++
 src/docs/de-DE/general/glossary.md            |  83 +++++
 src/docs/de-DE/general/links.md               |   5 +
 src/docs/de-DE/general/misskey.md             |  87 +++++
 src/docs/de-DE/general/report-issue.md        |   8 +
 src/docs/de-DE/general/troubleshooting.md     |  36 ++
 src/docs/en-US/admin/disable-timelines.md     |   8 +
 src/docs/en-US/admin/faq.md                   |   5 +
 src/docs/en-US/advanced/aiscript.md           |   7 +
 src/docs/en-US/advanced/api.md                |  58 +++
 src/docs/en-US/advanced/create-plugin.md      |  74 ++++
 src/docs/en-US/advanced/develop-bot.md        |   6 +
 src/docs/en-US/advanced/reversi-bot.md        | 160 ++++++++
 src/docs/en-US/advanced/stream.md             | 350 ++++++++++++++++++
 src/docs/en-US/features/antenna.md            |   4 +
 src/docs/en-US/features/custom-emoji.md       |   2 +
 src/docs/en-US/features/deck.md               |  18 +
 src/docs/en-US/features/drive.md              |  17 +
 src/docs/en-US/features/favorite.md           |   4 +
 src/docs/en-US/features/follow.md             |   2 +
 src/docs/en-US/features/keyboard-shortcut.md  |  66 ++++
 src/docs/en-US/features/mfm.md                |  12 +
 src/docs/en-US/features/mute.md               |  13 +
 src/docs/en-US/features/note.md               |  51 +++
 src/docs/en-US/features/pages.md              |  10 +
 src/docs/en-US/features/reaction.md           |  11 +
 src/docs/en-US/features/silence.md            |   6 +
 src/docs/en-US/features/theme.md              |  68 ++++
 src/docs/en-US/features/timeline.md           |  31 ++
 src/docs/en-US/features/widgets.md            |   7 +
 src/docs/en-US/general/apps.md                |   6 +
 src/docs/en-US/general/faq.md                 |  22 ++
 src/docs/en-US/general/glossary.md            |  83 +++++
 src/docs/en-US/general/links.md               |   5 +
 src/docs/en-US/general/misskey.md             |  87 +++++
 src/docs/en-US/general/report-issue.md        |   8 +
 src/docs/en-US/general/troubleshooting.md     |  36 ++
 src/docs/eo-UY/admin/disable-timelines.md     |   8 +
 src/docs/eo-UY/admin/faq.md                   |   5 +
 src/docs/eo-UY/advanced/aiscript.md           |   7 +
 src/docs/eo-UY/advanced/api.md                |  58 +++
 src/docs/eo-UY/advanced/create-plugin.md      |  74 ++++
 src/docs/eo-UY/advanced/develop-bot.md        |   6 +
 src/docs/eo-UY/advanced/reversi-bot.md        | 160 ++++++++
 src/docs/eo-UY/advanced/stream.md             | 350 ++++++++++++++++++
 src/docs/eo-UY/features/antenna.md            |   4 +
 src/docs/eo-UY/features/custom-emoji.md       |   2 +
 src/docs/eo-UY/features/deck.md               |  18 +
 src/docs/eo-UY/features/drive.md              |  17 +
 src/docs/eo-UY/features/favorite.md           |   4 +
 src/docs/eo-UY/features/follow.md             |   2 +
 src/docs/eo-UY/features/keyboard-shortcut.md  |  66 ++++
 src/docs/eo-UY/features/mfm.md                |  12 +
 src/docs/eo-UY/features/mute.md               |  13 +
 src/docs/eo-UY/features/note.md               |  51 +++
 src/docs/eo-UY/features/pages.md              |  10 +
 src/docs/eo-UY/features/reaction.md           |  11 +
 src/docs/eo-UY/features/silence.md            |   6 +
 src/docs/eo-UY/features/theme.md              |  68 ++++
 src/docs/eo-UY/features/timeline.md           |  31 ++
 src/docs/eo-UY/features/widgets.md            |   7 +
 src/docs/eo-UY/general/apps.md                |   6 +
 src/docs/eo-UY/general/faq.md                 |  22 ++
 src/docs/eo-UY/general/glossary.md            |  83 +++++
 src/docs/eo-UY/general/links.md               |   5 +
 src/docs/eo-UY/general/misskey.md             |  87 +++++
 src/docs/eo-UY/general/report-issue.md        |   8 +
 src/docs/eo-UY/general/troubleshooting.md     |  36 ++
 src/docs/es-ES/admin/disable-timelines.md     |   8 +
 src/docs/es-ES/admin/faq.md                   |   5 +
 src/docs/es-ES/advanced/aiscript.md           |   7 +
 src/docs/es-ES/advanced/api.md                |  58 +++
 src/docs/es-ES/advanced/create-plugin.md      |  74 ++++
 src/docs/es-ES/advanced/develop-bot.md        |   6 +
 src/docs/es-ES/advanced/reversi-bot.md        | 160 ++++++++
 src/docs/es-ES/advanced/stream.md             | 350 ++++++++++++++++++
 src/docs/es-ES/features/antenna.md            |   4 +
 src/docs/es-ES/features/custom-emoji.md       |   2 +
 src/docs/es-ES/features/deck.md               |  18 +
 src/docs/es-ES/features/drive.md              |  17 +
 src/docs/es-ES/features/favorite.md           |   4 +
 src/docs/es-ES/features/follow.md             |   2 +
 src/docs/es-ES/features/keyboard-shortcut.md  |  66 ++++
 src/docs/es-ES/features/mfm.md                |  12 +
 src/docs/es-ES/features/mute.md               |  13 +
 src/docs/es-ES/features/note.md               |  51 +++
 src/docs/es-ES/features/pages.md              |  10 +
 src/docs/es-ES/features/reaction.md           |  11 +
 src/docs/es-ES/features/silence.md            |   6 +
 src/docs/es-ES/features/theme.md              |  68 ++++
 src/docs/es-ES/features/timeline.md           |  31 ++
 src/docs/es-ES/features/widgets.md            |   7 +
 src/docs/es-ES/general/apps.md                |   6 +
 src/docs/es-ES/general/faq.md                 |  22 ++
 src/docs/es-ES/general/glossary.md            |  83 +++++
 src/docs/es-ES/general/links.md               |   5 +
 src/docs/es-ES/general/misskey.md             |  87 +++++
 src/docs/es-ES/general/report-issue.md        |   8 +
 src/docs/es-ES/general/troubleshooting.md     |  36 ++
 src/docs/fr-FR/admin/disable-timelines.md     |   8 +
 src/docs/fr-FR/admin/faq.md                   |   5 +
 src/docs/fr-FR/advanced/aiscript.md           |   7 +
 src/docs/fr-FR/advanced/api.md                |  58 +++
 src/docs/fr-FR/advanced/create-plugin.md      |  74 ++++
 src/docs/fr-FR/advanced/develop-bot.md        |   6 +
 src/docs/fr-FR/advanced/reversi-bot.md        | 160 ++++++++
 src/docs/fr-FR/advanced/stream.md             | 350 ++++++++++++++++++
 src/docs/fr-FR/features/antenna.md            |   4 +
 src/docs/fr-FR/features/custom-emoji.md       |   2 +
 src/docs/fr-FR/features/deck.md               |  18 +
 src/docs/fr-FR/features/drive.md              |  17 +
 src/docs/fr-FR/features/favorite.md           |   4 +
 src/docs/fr-FR/features/follow.md             |   2 +
 src/docs/fr-FR/features/keyboard-shortcut.md  |  66 ++++
 src/docs/fr-FR/features/mfm.md                |  12 +
 src/docs/fr-FR/features/mute.md               |  13 +
 src/docs/fr-FR/features/note.md               |  51 +++
 src/docs/fr-FR/features/pages.md              |  10 +
 src/docs/fr-FR/features/reaction.md           |  11 +
 src/docs/fr-FR/features/silence.md            |   6 +
 src/docs/fr-FR/features/theme.md              |  68 ++++
 src/docs/fr-FR/features/timeline.md           |  31 ++
 src/docs/fr-FR/features/widgets.md            |   7 +
 src/docs/fr-FR/general/apps.md                |   6 +
 src/docs/fr-FR/general/faq.md                 |  22 ++
 src/docs/fr-FR/general/glossary.md            |  83 +++++
 src/docs/fr-FR/general/links.md               |   5 +
 src/docs/fr-FR/general/misskey.md             |  87 +++++
 src/docs/fr-FR/general/report-issue.md        |   8 +
 src/docs/fr-FR/general/troubleshooting.md     |  36 ++
 src/docs/ht-HT/admin/disable-timelines.md     |   8 +
 src/docs/ht-HT/admin/faq.md                   |   5 +
 src/docs/ht-HT/advanced/aiscript.md           |   7 +
 src/docs/ht-HT/advanced/api.md                |  58 +++
 src/docs/ht-HT/advanced/create-plugin.md      |  74 ++++
 src/docs/ht-HT/advanced/develop-bot.md        |   6 +
 src/docs/ht-HT/advanced/reversi-bot.md        | 160 ++++++++
 src/docs/ht-HT/advanced/stream.md             | 350 ++++++++++++++++++
 src/docs/ht-HT/features/antenna.md            |   4 +
 src/docs/ht-HT/features/custom-emoji.md       |   2 +
 src/docs/ht-HT/features/deck.md               |  18 +
 src/docs/ht-HT/features/drive.md              |  17 +
 src/docs/ht-HT/features/favorite.md           |   4 +
 src/docs/ht-HT/features/follow.md             |   2 +
 src/docs/ht-HT/features/keyboard-shortcut.md  |  66 ++++
 src/docs/ht-HT/features/mfm.md                |  12 +
 src/docs/ht-HT/features/mute.md               |  13 +
 src/docs/ht-HT/features/note.md               |  51 +++
 src/docs/ht-HT/features/pages.md              |  10 +
 src/docs/ht-HT/features/reaction.md           |  11 +
 src/docs/ht-HT/features/silence.md            |   6 +
 src/docs/ht-HT/features/theme.md              |  68 ++++
 src/docs/ht-HT/features/timeline.md           |  31 ++
 src/docs/ht-HT/features/widgets.md            |   7 +
 src/docs/ht-HT/general/apps.md                |   6 +
 src/docs/ht-HT/general/faq.md                 |  22 ++
 src/docs/ht-HT/general/glossary.md            |  83 +++++
 src/docs/ht-HT/general/links.md               |   5 +
 src/docs/ht-HT/general/misskey.md             |  87 +++++
 src/docs/ht-HT/general/report-issue.md        |   8 +
 src/docs/ht-HT/general/troubleshooting.md     |  36 ++
 src/docs/id-ID/admin/disable-timelines.md     |   8 +
 src/docs/id-ID/admin/faq.md                   |   5 +
 src/docs/id-ID/advanced/aiscript.md           |   7 +
 src/docs/id-ID/advanced/api.md                |  58 +++
 src/docs/id-ID/advanced/create-plugin.md      |  74 ++++
 src/docs/id-ID/advanced/develop-bot.md        |   6 +
 src/docs/id-ID/advanced/reversi-bot.md        | 160 ++++++++
 src/docs/id-ID/advanced/stream.md             | 350 ++++++++++++++++++
 src/docs/id-ID/features/antenna.md            |   4 +
 src/docs/id-ID/features/custom-emoji.md       |   2 +
 src/docs/id-ID/features/deck.md               |  18 +
 src/docs/id-ID/features/drive.md              |  17 +
 src/docs/id-ID/features/favorite.md           |   4 +
 src/docs/id-ID/features/follow.md             |   2 +
 src/docs/id-ID/features/keyboard-shortcut.md  |  66 ++++
 src/docs/id-ID/features/mfm.md                |  12 +
 src/docs/id-ID/features/mute.md               |  13 +
 src/docs/id-ID/features/note.md               |  51 +++
 src/docs/id-ID/features/pages.md              |  10 +
 src/docs/id-ID/features/reaction.md           |  11 +
 src/docs/id-ID/features/silence.md            |   6 +
 src/docs/id-ID/features/theme.md              |  68 ++++
 src/docs/id-ID/features/timeline.md           |  31 ++
 src/docs/id-ID/features/widgets.md            |   7 +
 src/docs/id-ID/general/apps.md                |   6 +
 src/docs/id-ID/general/faq.md                 |  22 ++
 src/docs/id-ID/general/glossary.md            |  83 +++++
 src/docs/id-ID/general/links.md               |   5 +
 src/docs/id-ID/general/misskey.md             |  87 +++++
 src/docs/id-ID/general/report-issue.md        |   8 +
 src/docs/id-ID/general/troubleshooting.md     |  36 ++
 src/docs/it-IT/admin/disable-timelines.md     |   8 +
 src/docs/it-IT/admin/faq.md                   |   5 +
 src/docs/it-IT/advanced/aiscript.md           |   7 +
 src/docs/it-IT/advanced/api.md                |  58 +++
 src/docs/it-IT/advanced/create-plugin.md      |  74 ++++
 src/docs/it-IT/advanced/develop-bot.md        |   6 +
 src/docs/it-IT/advanced/reversi-bot.md        | 160 ++++++++
 src/docs/it-IT/advanced/stream.md             | 350 ++++++++++++++++++
 src/docs/it-IT/features/antenna.md            |   4 +
 src/docs/it-IT/features/custom-emoji.md       |   2 +
 src/docs/it-IT/features/deck.md               |  18 +
 src/docs/it-IT/features/drive.md              |  17 +
 src/docs/it-IT/features/favorite.md           |   4 +
 src/docs/it-IT/features/follow.md             |   2 +
 src/docs/it-IT/features/keyboard-shortcut.md  |  66 ++++
 src/docs/it-IT/features/mfm.md                |  12 +
 src/docs/it-IT/features/mute.md               |  13 +
 src/docs/it-IT/features/note.md               |  51 +++
 src/docs/it-IT/features/pages.md              |  10 +
 src/docs/it-IT/features/reaction.md           |  11 +
 src/docs/it-IT/features/silence.md            |   6 +
 src/docs/it-IT/features/theme.md              |  68 ++++
 src/docs/it-IT/features/timeline.md           |  31 ++
 src/docs/it-IT/features/widgets.md            |   7 +
 src/docs/it-IT/general/apps.md                |   6 +
 src/docs/it-IT/general/faq.md                 |  22 ++
 src/docs/it-IT/general/glossary.md            |  83 +++++
 src/docs/it-IT/general/links.md               |   5 +
 src/docs/it-IT/general/misskey.md             |  87 +++++
 src/docs/it-IT/general/report-issue.md        |   8 +
 src/docs/it-IT/general/troubleshooting.md     |  36 ++
 src/docs/ja-KS/admin/disable-timelines.md     |   8 +
 src/docs/ja-KS/admin/faq.md                   |   5 +
 src/docs/ja-KS/advanced/aiscript.md           |   7 +
 src/docs/ja-KS/advanced/api.md                |  58 +++
 src/docs/ja-KS/advanced/create-plugin.md      |  74 ++++
 src/docs/ja-KS/advanced/develop-bot.md        |   6 +
 src/docs/ja-KS/advanced/reversi-bot.md        | 160 ++++++++
 src/docs/ja-KS/advanced/stream.md             | 350 ++++++++++++++++++
 src/docs/ja-KS/features/antenna.md            |   4 +
 src/docs/ja-KS/features/custom-emoji.md       |   2 +
 src/docs/ja-KS/features/deck.md               |  18 +
 src/docs/ja-KS/features/drive.md              |  17 +
 src/docs/ja-KS/features/favorite.md           |   4 +
 src/docs/ja-KS/features/follow.md             |   2 +
 src/docs/ja-KS/features/keyboard-shortcut.md  |  66 ++++
 src/docs/ja-KS/features/mfm.md                |  12 +
 src/docs/ja-KS/features/mute.md               |  13 +
 src/docs/ja-KS/features/note.md               |  51 +++
 src/docs/ja-KS/features/pages.md              |  10 +
 src/docs/ja-KS/features/reaction.md           |  11 +
 src/docs/ja-KS/features/silence.md            |   6 +
 src/docs/ja-KS/features/theme.md              |  68 ++++
 src/docs/ja-KS/features/timeline.md           |  31 ++
 src/docs/ja-KS/features/widgets.md            |   7 +
 src/docs/ja-KS/general/apps.md                |   6 +
 src/docs/ja-KS/general/faq.md                 |  22 ++
 src/docs/ja-KS/general/glossary.md            |  83 +++++
 src/docs/ja-KS/general/links.md               |   5 +
 src/docs/ja-KS/general/misskey.md             |  87 +++++
 src/docs/ja-KS/general/report-issue.md        |   8 +
 src/docs/ja-KS/general/troubleshooting.md     |  36 ++
 src/docs/jbo-EN/admin/disable-timelines.md    |   8 +
 src/docs/jbo-EN/admin/faq.md                  |   5 +
 src/docs/jbo-EN/advanced/aiscript.md          |   7 +
 src/docs/jbo-EN/advanced/api.md               |  58 +++
 src/docs/jbo-EN/advanced/create-plugin.md     |  74 ++++
 src/docs/jbo-EN/advanced/develop-bot.md       |   6 +
 src/docs/jbo-EN/advanced/reversi-bot.md       | 160 ++++++++
 src/docs/jbo-EN/advanced/stream.md            | 350 ++++++++++++++++++
 src/docs/jbo-EN/features/antenna.md           |   4 +
 src/docs/jbo-EN/features/custom-emoji.md      |   2 +
 src/docs/jbo-EN/features/deck.md              |  18 +
 src/docs/jbo-EN/features/drive.md             |  17 +
 src/docs/jbo-EN/features/favorite.md          |   4 +
 src/docs/jbo-EN/features/follow.md            |   2 +
 src/docs/jbo-EN/features/keyboard-shortcut.md |  66 ++++
 src/docs/jbo-EN/features/mfm.md               |  12 +
 src/docs/jbo-EN/features/mute.md              |  13 +
 src/docs/jbo-EN/features/note.md              |  51 +++
 src/docs/jbo-EN/features/pages.md             |  10 +
 src/docs/jbo-EN/features/reaction.md          |  11 +
 src/docs/jbo-EN/features/silence.md           |   6 +
 src/docs/jbo-EN/features/theme.md             |  68 ++++
 src/docs/jbo-EN/features/timeline.md          |  31 ++
 src/docs/jbo-EN/features/widgets.md           |   7 +
 src/docs/jbo-EN/general/apps.md               |   6 +
 src/docs/jbo-EN/general/faq.md                |  22 ++
 src/docs/jbo-EN/general/glossary.md           |  83 +++++
 src/docs/jbo-EN/general/links.md              |   5 +
 src/docs/jbo-EN/general/misskey.md            |  87 +++++
 src/docs/jbo-EN/general/report-issue.md       |   8 +
 src/docs/jbo-EN/general/troubleshooting.md    |  36 ++
 src/docs/kab-KAB/admin/disable-timelines.md   |   8 +
 src/docs/kab-KAB/admin/faq.md                 |   5 +
 src/docs/kab-KAB/advanced/aiscript.md         |   7 +
 src/docs/kab-KAB/advanced/api.md              |  58 +++
 src/docs/kab-KAB/advanced/create-plugin.md    |  74 ++++
 src/docs/kab-KAB/advanced/develop-bot.md      |   6 +
 src/docs/kab-KAB/advanced/reversi-bot.md      | 160 ++++++++
 src/docs/kab-KAB/advanced/stream.md           | 350 ++++++++++++++++++
 src/docs/kab-KAB/features/antenna.md          |   4 +
 src/docs/kab-KAB/features/custom-emoji.md     |   2 +
 src/docs/kab-KAB/features/deck.md             |  18 +
 src/docs/kab-KAB/features/drive.md            |  17 +
 src/docs/kab-KAB/features/favorite.md         |   4 +
 src/docs/kab-KAB/features/follow.md           |   2 +
 .../kab-KAB/features/keyboard-shortcut.md     |  66 ++++
 src/docs/kab-KAB/features/mfm.md              |  12 +
 src/docs/kab-KAB/features/mute.md             |  13 +
 src/docs/kab-KAB/features/note.md             |  51 +++
 src/docs/kab-KAB/features/pages.md            |  10 +
 src/docs/kab-KAB/features/reaction.md         |  11 +
 src/docs/kab-KAB/features/silence.md          |   6 +
 src/docs/kab-KAB/features/theme.md            |  68 ++++
 src/docs/kab-KAB/features/timeline.md         |  31 ++
 src/docs/kab-KAB/features/widgets.md          |   7 +
 src/docs/kab-KAB/general/apps.md              |   6 +
 src/docs/kab-KAB/general/faq.md               |  22 ++
 src/docs/kab-KAB/general/glossary.md          |  83 +++++
 src/docs/kab-KAB/general/links.md             |   5 +
 src/docs/kab-KAB/general/misskey.md           |  87 +++++
 src/docs/kab-KAB/general/report-issue.md      |   8 +
 src/docs/kab-KAB/general/troubleshooting.md   |  36 ++
 src/docs/kn-IN/admin/disable-timelines.md     |   8 +
 src/docs/kn-IN/admin/faq.md                   |   5 +
 src/docs/kn-IN/advanced/aiscript.md           |   7 +
 src/docs/kn-IN/advanced/api.md                |  58 +++
 src/docs/kn-IN/advanced/create-plugin.md      |  74 ++++
 src/docs/kn-IN/advanced/develop-bot.md        |   6 +
 src/docs/kn-IN/advanced/reversi-bot.md        | 160 ++++++++
 src/docs/kn-IN/advanced/stream.md             | 350 ++++++++++++++++++
 src/docs/kn-IN/features/antenna.md            |   4 +
 src/docs/kn-IN/features/custom-emoji.md       |   2 +
 src/docs/kn-IN/features/deck.md               |  18 +
 src/docs/kn-IN/features/drive.md              |  17 +
 src/docs/kn-IN/features/favorite.md           |   4 +
 src/docs/kn-IN/features/follow.md             |   2 +
 src/docs/kn-IN/features/keyboard-shortcut.md  |  66 ++++
 src/docs/kn-IN/features/mfm.md                |  12 +
 src/docs/kn-IN/features/mute.md               |  13 +
 src/docs/kn-IN/features/note.md               |  51 +++
 src/docs/kn-IN/features/pages.md              |  10 +
 src/docs/kn-IN/features/reaction.md           |  11 +
 src/docs/kn-IN/features/silence.md            |   6 +
 src/docs/kn-IN/features/theme.md              |  68 ++++
 src/docs/kn-IN/features/timeline.md           |  31 ++
 src/docs/kn-IN/features/widgets.md            |   7 +
 src/docs/kn-IN/general/apps.md                |   6 +
 src/docs/kn-IN/general/faq.md                 |  22 ++
 src/docs/kn-IN/general/glossary.md            |  83 +++++
 src/docs/kn-IN/general/links.md               |   5 +
 src/docs/kn-IN/general/misskey.md             |  87 +++++
 src/docs/kn-IN/general/report-issue.md        |   8 +
 src/docs/kn-IN/general/troubleshooting.md     |  36 ++
 src/docs/ko-KR/admin/disable-timelines.md     |   8 +
 src/docs/ko-KR/admin/faq.md                   |   5 +
 src/docs/ko-KR/advanced/aiscript.md           |   7 +
 src/docs/ko-KR/advanced/api.md                |  58 +++
 src/docs/ko-KR/advanced/create-plugin.md      |  74 ++++
 src/docs/ko-KR/advanced/develop-bot.md        |   6 +
 src/docs/ko-KR/advanced/reversi-bot.md        | 160 ++++++++
 src/docs/ko-KR/advanced/stream.md             | 350 ++++++++++++++++++
 src/docs/ko-KR/features/antenna.md            |   4 +
 src/docs/ko-KR/features/custom-emoji.md       |   2 +
 src/docs/ko-KR/features/deck.md               |  18 +
 src/docs/ko-KR/features/drive.md              |  17 +
 src/docs/ko-KR/features/favorite.md           |   4 +
 src/docs/ko-KR/features/follow.md             |   2 +
 src/docs/ko-KR/features/keyboard-shortcut.md  |  66 ++++
 src/docs/ko-KR/features/mfm.md                |  12 +
 src/docs/ko-KR/features/mute.md               |  13 +
 src/docs/ko-KR/features/note.md               |  51 +++
 src/docs/ko-KR/features/pages.md              |  10 +
 src/docs/ko-KR/features/reaction.md           |  11 +
 src/docs/ko-KR/features/silence.md            |   6 +
 src/docs/ko-KR/features/theme.md              |  68 ++++
 src/docs/ko-KR/features/timeline.md           |  31 ++
 src/docs/ko-KR/features/widgets.md            |   7 +
 src/docs/ko-KR/general/apps.md                |   6 +
 src/docs/ko-KR/general/faq.md                 |  22 ++
 src/docs/ko-KR/general/glossary.md            |  83 +++++
 src/docs/ko-KR/general/links.md               |   5 +
 src/docs/ko-KR/general/misskey.md             |  87 +++++
 src/docs/ko-KR/general/report-issue.md        |   8 +
 src/docs/ko-KR/general/troubleshooting.md     |  36 ++
 src/docs/nl-NL/admin/disable-timelines.md     |   8 +
 src/docs/nl-NL/admin/faq.md                   |   5 +
 src/docs/nl-NL/advanced/aiscript.md           |   7 +
 src/docs/nl-NL/advanced/api.md                |  58 +++
 src/docs/nl-NL/advanced/create-plugin.md      |  74 ++++
 src/docs/nl-NL/advanced/develop-bot.md        |   6 +
 src/docs/nl-NL/advanced/reversi-bot.md        | 160 ++++++++
 src/docs/nl-NL/advanced/stream.md             | 350 ++++++++++++++++++
 src/docs/nl-NL/features/antenna.md            |   4 +
 src/docs/nl-NL/features/custom-emoji.md       |   2 +
 src/docs/nl-NL/features/deck.md               |  18 +
 src/docs/nl-NL/features/drive.md              |  17 +
 src/docs/nl-NL/features/favorite.md           |   4 +
 src/docs/nl-NL/features/follow.md             |   2 +
 src/docs/nl-NL/features/keyboard-shortcut.md  |  66 ++++
 src/docs/nl-NL/features/mfm.md                |  12 +
 src/docs/nl-NL/features/mute.md               |  13 +
 src/docs/nl-NL/features/note.md               |  51 +++
 src/docs/nl-NL/features/pages.md              |  10 +
 src/docs/nl-NL/features/reaction.md           |  11 +
 src/docs/nl-NL/features/silence.md            |   6 +
 src/docs/nl-NL/features/theme.md              |  68 ++++
 src/docs/nl-NL/features/timeline.md           |  31 ++
 src/docs/nl-NL/features/widgets.md            |   7 +
 src/docs/nl-NL/general/apps.md                |   6 +
 src/docs/nl-NL/general/faq.md                 |  22 ++
 src/docs/nl-NL/general/glossary.md            |  83 +++++
 src/docs/nl-NL/general/links.md               |   5 +
 src/docs/nl-NL/general/misskey.md             |  87 +++++
 src/docs/nl-NL/general/report-issue.md        |   8 +
 src/docs/nl-NL/general/troubleshooting.md     |  36 ++
 src/docs/no-NO/admin/disable-timelines.md     |   8 +
 src/docs/no-NO/admin/faq.md                   |   5 +
 src/docs/no-NO/advanced/aiscript.md           |   7 +
 src/docs/no-NO/advanced/api.md                |  58 +++
 src/docs/no-NO/advanced/create-plugin.md      |  74 ++++
 src/docs/no-NO/advanced/develop-bot.md        |   6 +
 src/docs/no-NO/advanced/reversi-bot.md        | 160 ++++++++
 src/docs/no-NO/advanced/stream.md             | 350 ++++++++++++++++++
 src/docs/no-NO/features/antenna.md            |   4 +
 src/docs/no-NO/features/custom-emoji.md       |   2 +
 src/docs/no-NO/features/deck.md               |  18 +
 src/docs/no-NO/features/drive.md              |  17 +
 src/docs/no-NO/features/favorite.md           |   4 +
 src/docs/no-NO/features/follow.md             |   2 +
 src/docs/no-NO/features/keyboard-shortcut.md  |  66 ++++
 src/docs/no-NO/features/mfm.md                |  12 +
 src/docs/no-NO/features/mute.md               |  13 +
 src/docs/no-NO/features/note.md               |  51 +++
 src/docs/no-NO/features/pages.md              |  10 +
 src/docs/no-NO/features/reaction.md           |  11 +
 src/docs/no-NO/features/silence.md            |   6 +
 src/docs/no-NO/features/theme.md              |  68 ++++
 src/docs/no-NO/features/timeline.md           |  31 ++
 src/docs/no-NO/features/widgets.md            |   7 +
 src/docs/no-NO/general/apps.md                |   6 +
 src/docs/no-NO/general/faq.md                 |  22 ++
 src/docs/no-NO/general/glossary.md            |  83 +++++
 src/docs/no-NO/general/links.md               |   5 +
 src/docs/no-NO/general/misskey.md             |  87 +++++
 src/docs/no-NO/general/report-issue.md        |   8 +
 src/docs/no-NO/general/troubleshooting.md     |  36 ++
 src/docs/pl-PL/admin/disable-timelines.md     |   8 +
 src/docs/pl-PL/admin/faq.md                   |   5 +
 src/docs/pl-PL/advanced/aiscript.md           |   7 +
 src/docs/pl-PL/advanced/api.md                |  58 +++
 src/docs/pl-PL/advanced/create-plugin.md      |  74 ++++
 src/docs/pl-PL/advanced/develop-bot.md        |   6 +
 src/docs/pl-PL/advanced/reversi-bot.md        | 160 ++++++++
 src/docs/pl-PL/advanced/stream.md             | 350 ++++++++++++++++++
 src/docs/pl-PL/features/antenna.md            |   4 +
 src/docs/pl-PL/features/custom-emoji.md       |   2 +
 src/docs/pl-PL/features/deck.md               |  18 +
 src/docs/pl-PL/features/drive.md              |  17 +
 src/docs/pl-PL/features/favorite.md           |   4 +
 src/docs/pl-PL/features/follow.md             |   2 +
 src/docs/pl-PL/features/keyboard-shortcut.md  |  66 ++++
 src/docs/pl-PL/features/mfm.md                |  12 +
 src/docs/pl-PL/features/mute.md               |  13 +
 src/docs/pl-PL/features/note.md               |  51 +++
 src/docs/pl-PL/features/pages.md              |  10 +
 src/docs/pl-PL/features/reaction.md           |  11 +
 src/docs/pl-PL/features/silence.md            |   6 +
 src/docs/pl-PL/features/theme.md              |  68 ++++
 src/docs/pl-PL/features/timeline.md           |  31 ++
 src/docs/pl-PL/features/widgets.md            |   7 +
 src/docs/pl-PL/general/apps.md                |   6 +
 src/docs/pl-PL/general/faq.md                 |  22 ++
 src/docs/pl-PL/general/glossary.md            |  83 +++++
 src/docs/pl-PL/general/links.md               |   5 +
 src/docs/pl-PL/general/misskey.md             |  87 +++++
 src/docs/pl-PL/general/report-issue.md        |   8 +
 src/docs/pl-PL/general/troubleshooting.md     |  36 ++
 src/docs/pt-PT/admin/disable-timelines.md     |   8 +
 src/docs/pt-PT/admin/faq.md                   |   5 +
 src/docs/pt-PT/advanced/aiscript.md           |   7 +
 src/docs/pt-PT/advanced/api.md                |  58 +++
 src/docs/pt-PT/advanced/create-plugin.md      |  74 ++++
 src/docs/pt-PT/advanced/develop-bot.md        |   6 +
 src/docs/pt-PT/advanced/reversi-bot.md        | 160 ++++++++
 src/docs/pt-PT/advanced/stream.md             | 350 ++++++++++++++++++
 src/docs/pt-PT/features/antenna.md            |   4 +
 src/docs/pt-PT/features/custom-emoji.md       |   2 +
 src/docs/pt-PT/features/deck.md               |  18 +
 src/docs/pt-PT/features/drive.md              |  17 +
 src/docs/pt-PT/features/favorite.md           |   4 +
 src/docs/pt-PT/features/follow.md             |   2 +
 src/docs/pt-PT/features/keyboard-shortcut.md  |  66 ++++
 src/docs/pt-PT/features/mfm.md                |  12 +
 src/docs/pt-PT/features/mute.md               |  13 +
 src/docs/pt-PT/features/note.md               |  51 +++
 src/docs/pt-PT/features/pages.md              |  10 +
 src/docs/pt-PT/features/reaction.md           |  11 +
 src/docs/pt-PT/features/silence.md            |   6 +
 src/docs/pt-PT/features/theme.md              |  68 ++++
 src/docs/pt-PT/features/timeline.md           |  31 ++
 src/docs/pt-PT/features/widgets.md            |   7 +
 src/docs/pt-PT/general/apps.md                |   6 +
 src/docs/pt-PT/general/faq.md                 |  22 ++
 src/docs/pt-PT/general/glossary.md            |  83 +++++
 src/docs/pt-PT/general/links.md               |   5 +
 src/docs/pt-PT/general/misskey.md             |  87 +++++
 src/docs/pt-PT/general/report-issue.md        |   8 +
 src/docs/pt-PT/general/troubleshooting.md     |  36 ++
 src/docs/ru-RU/admin/disable-timelines.md     |   8 +
 src/docs/ru-RU/admin/faq.md                   |   5 +
 src/docs/ru-RU/advanced/aiscript.md           |   7 +
 src/docs/ru-RU/advanced/api.md                |  58 +++
 src/docs/ru-RU/advanced/create-plugin.md      |  74 ++++
 src/docs/ru-RU/advanced/develop-bot.md        |   6 +
 src/docs/ru-RU/advanced/reversi-bot.md        | 160 ++++++++
 src/docs/ru-RU/advanced/stream.md             | 350 ++++++++++++++++++
 src/docs/ru-RU/features/antenna.md            |   4 +
 src/docs/ru-RU/features/custom-emoji.md       |   2 +
 src/docs/ru-RU/features/deck.md               |  18 +
 src/docs/ru-RU/features/drive.md              |  17 +
 src/docs/ru-RU/features/favorite.md           |   4 +
 src/docs/ru-RU/features/follow.md             |   2 +
 src/docs/ru-RU/features/keyboard-shortcut.md  |  66 ++++
 src/docs/ru-RU/features/mfm.md                |  12 +
 src/docs/ru-RU/features/mute.md               |  13 +
 src/docs/ru-RU/features/note.md               |  51 +++
 src/docs/ru-RU/features/pages.md              |  10 +
 src/docs/ru-RU/features/reaction.md           |  11 +
 src/docs/ru-RU/features/silence.md            |   6 +
 src/docs/ru-RU/features/theme.md              |  68 ++++
 src/docs/ru-RU/features/timeline.md           |  31 ++
 src/docs/ru-RU/features/widgets.md            |   7 +
 src/docs/ru-RU/general/apps.md                |   6 +
 src/docs/ru-RU/general/faq.md                 |  22 ++
 src/docs/ru-RU/general/glossary.md            |  83 +++++
 src/docs/ru-RU/general/links.md               |   5 +
 src/docs/ru-RU/general/misskey.md             |  87 +++++
 src/docs/ru-RU/general/report-issue.md        |   8 +
 src/docs/ru-RU/general/troubleshooting.md     |  36 ++
 src/docs/th-TH/admin/disable-timelines.md     |   8 +
 src/docs/th-TH/admin/faq.md                   |   5 +
 src/docs/th-TH/advanced/aiscript.md           |   7 +
 src/docs/th-TH/advanced/api.md                |  58 +++
 src/docs/th-TH/advanced/create-plugin.md      |  74 ++++
 src/docs/th-TH/advanced/develop-bot.md        |   6 +
 src/docs/th-TH/advanced/reversi-bot.md        | 160 ++++++++
 src/docs/th-TH/advanced/stream.md             | 350 ++++++++++++++++++
 src/docs/th-TH/features/antenna.md            |   4 +
 src/docs/th-TH/features/custom-emoji.md       |   2 +
 src/docs/th-TH/features/deck.md               |  18 +
 src/docs/th-TH/features/drive.md              |  17 +
 src/docs/th-TH/features/favorite.md           |   4 +
 src/docs/th-TH/features/follow.md             |   2 +
 src/docs/th-TH/features/keyboard-shortcut.md  |  66 ++++
 src/docs/th-TH/features/mfm.md                |  12 +
 src/docs/th-TH/features/mute.md               |  13 +
 src/docs/th-TH/features/note.md               |  51 +++
 src/docs/th-TH/features/pages.md              |  10 +
 src/docs/th-TH/features/reaction.md           |  11 +
 src/docs/th-TH/features/silence.md            |   6 +
 src/docs/th-TH/features/theme.md              |  68 ++++
 src/docs/th-TH/features/timeline.md           |  31 ++
 src/docs/th-TH/features/widgets.md            |   7 +
 src/docs/th-TH/general/apps.md                |   6 +
 src/docs/th-TH/general/faq.md                 |  22 ++
 src/docs/th-TH/general/glossary.md            |  83 +++++
 src/docs/th-TH/general/links.md               |   5 +
 src/docs/th-TH/general/misskey.md             |  87 +++++
 src/docs/th-TH/general/report-issue.md        |   8 +
 src/docs/th-TH/general/troubleshooting.md     |  36 ++
 src/docs/ug-CN/admin/disable-timelines.md     |   8 +
 src/docs/ug-CN/admin/faq.md                   |   5 +
 src/docs/ug-CN/advanced/aiscript.md           |   7 +
 src/docs/ug-CN/advanced/api.md                |  58 +++
 src/docs/ug-CN/advanced/create-plugin.md      |  74 ++++
 src/docs/ug-CN/advanced/develop-bot.md        |   6 +
 src/docs/ug-CN/advanced/reversi-bot.md        | 160 ++++++++
 src/docs/ug-CN/advanced/stream.md             | 350 ++++++++++++++++++
 src/docs/ug-CN/features/antenna.md            |   4 +
 src/docs/ug-CN/features/custom-emoji.md       |   2 +
 src/docs/ug-CN/features/deck.md               |  18 +
 src/docs/ug-CN/features/drive.md              |  17 +
 src/docs/ug-CN/features/favorite.md           |   4 +
 src/docs/ug-CN/features/follow.md             |   2 +
 src/docs/ug-CN/features/keyboard-shortcut.md  |  66 ++++
 src/docs/ug-CN/features/mfm.md                |  12 +
 src/docs/ug-CN/features/mute.md               |  13 +
 src/docs/ug-CN/features/note.md               |  51 +++
 src/docs/ug-CN/features/pages.md              |  10 +
 src/docs/ug-CN/features/reaction.md           |  11 +
 src/docs/ug-CN/features/silence.md            |   6 +
 src/docs/ug-CN/features/theme.md              |  68 ++++
 src/docs/ug-CN/features/timeline.md           |  31 ++
 src/docs/ug-CN/features/widgets.md            |   7 +
 src/docs/ug-CN/general/apps.md                |   6 +
 src/docs/ug-CN/general/faq.md                 |  22 ++
 src/docs/ug-CN/general/glossary.md            |  83 +++++
 src/docs/ug-CN/general/links.md               |   5 +
 src/docs/ug-CN/general/misskey.md             |  87 +++++
 src/docs/ug-CN/general/report-issue.md        |   8 +
 src/docs/ug-CN/general/troubleshooting.md     |  36 ++
 src/docs/uk-UA/admin/disable-timelines.md     |   8 +
 src/docs/uk-UA/admin/faq.md                   |   5 +
 src/docs/uk-UA/advanced/aiscript.md           |   7 +
 src/docs/uk-UA/advanced/api.md                |  58 +++
 src/docs/uk-UA/advanced/create-plugin.md      |  74 ++++
 src/docs/uk-UA/advanced/develop-bot.md        |   6 +
 src/docs/uk-UA/advanced/reversi-bot.md        | 160 ++++++++
 src/docs/uk-UA/advanced/stream.md             | 350 ++++++++++++++++++
 src/docs/uk-UA/features/antenna.md            |   4 +
 src/docs/uk-UA/features/custom-emoji.md       |   2 +
 src/docs/uk-UA/features/deck.md               |  18 +
 src/docs/uk-UA/features/drive.md              |  17 +
 src/docs/uk-UA/features/favorite.md           |   4 +
 src/docs/uk-UA/features/follow.md             |   2 +
 src/docs/uk-UA/features/keyboard-shortcut.md  |  66 ++++
 src/docs/uk-UA/features/mfm.md                |  12 +
 src/docs/uk-UA/features/mute.md               |  13 +
 src/docs/uk-UA/features/note.md               |  51 +++
 src/docs/uk-UA/features/pages.md              |  10 +
 src/docs/uk-UA/features/reaction.md           |  11 +
 src/docs/uk-UA/features/silence.md            |   6 +
 src/docs/uk-UA/features/theme.md              |  68 ++++
 src/docs/uk-UA/features/timeline.md           |  31 ++
 src/docs/uk-UA/features/widgets.md            |   7 +
 src/docs/uk-UA/general/apps.md                |   6 +
 src/docs/uk-UA/general/faq.md                 |  22 ++
 src/docs/uk-UA/general/glossary.md            |  83 +++++
 src/docs/uk-UA/general/links.md               |   5 +
 src/docs/uk-UA/general/misskey.md             |  87 +++++
 src/docs/uk-UA/general/report-issue.md        |   8 +
 src/docs/uk-UA/general/troubleshooting.md     |  36 ++
 src/docs/zh-CN/admin/disable-timelines.md     |   8 +
 src/docs/zh-CN/admin/faq.md                   |   5 +
 src/docs/zh-CN/advanced/aiscript.md           |   7 +
 src/docs/zh-CN/advanced/api.md                |  58 +++
 src/docs/zh-CN/advanced/create-plugin.md      |  74 ++++
 src/docs/zh-CN/advanced/develop-bot.md        |   6 +
 src/docs/zh-CN/advanced/reversi-bot.md        | 160 ++++++++
 src/docs/zh-CN/advanced/stream.md             | 350 ++++++++++++++++++
 src/docs/zh-CN/features/antenna.md            |   4 +
 src/docs/zh-CN/features/custom-emoji.md       |   2 +
 src/docs/zh-CN/features/deck.md               |  18 +
 src/docs/zh-CN/features/drive.md              |  17 +
 src/docs/zh-CN/features/favorite.md           |   4 +
 src/docs/zh-CN/features/follow.md             |   2 +
 src/docs/zh-CN/features/keyboard-shortcut.md  |  66 ++++
 src/docs/zh-CN/features/mfm.md                |  12 +
 src/docs/zh-CN/features/mute.md               |  13 +
 src/docs/zh-CN/features/note.md               |  51 +++
 src/docs/zh-CN/features/pages.md              |  10 +
 src/docs/zh-CN/features/reaction.md           |  11 +
 src/docs/zh-CN/features/silence.md            |   6 +
 src/docs/zh-CN/features/theme.md              |  68 ++++
 src/docs/zh-CN/features/timeline.md           |  31 ++
 src/docs/zh-CN/features/widgets.md            |   7 +
 src/docs/zh-CN/general/apps.md                |   6 +
 src/docs/zh-CN/general/faq.md                 |  22 ++
 src/docs/zh-CN/general/glossary.md            |  83 +++++
 src/docs/zh-CN/general/links.md               |   5 +
 src/docs/zh-CN/general/misskey.md             |  87 +++++
 src/docs/zh-CN/general/report-issue.md        |   8 +
 src/docs/zh-CN/general/troubleshooting.md     |  36 ++
 src/docs/zh-TW/admin/disable-timelines.md     |   8 +
 src/docs/zh-TW/admin/faq.md                   |   5 +
 src/docs/zh-TW/advanced/aiscript.md           |   7 +
 src/docs/zh-TW/advanced/api.md                |  58 +++
 src/docs/zh-TW/advanced/create-plugin.md      |  74 ++++
 src/docs/zh-TW/advanced/develop-bot.md        |   6 +
 src/docs/zh-TW/advanced/reversi-bot.md        | 160 ++++++++
 src/docs/zh-TW/advanced/stream.md             | 350 ++++++++++++++++++
 src/docs/zh-TW/features/antenna.md            |   4 +
 src/docs/zh-TW/features/custom-emoji.md       |   2 +
 src/docs/zh-TW/features/deck.md               |  18 +
 src/docs/zh-TW/features/drive.md              |  17 +
 src/docs/zh-TW/features/favorite.md           |   4 +
 src/docs/zh-TW/features/follow.md             |   2 +
 src/docs/zh-TW/features/keyboard-shortcut.md  |  66 ++++
 src/docs/zh-TW/features/mfm.md                |  12 +
 src/docs/zh-TW/features/mute.md               |  13 +
 src/docs/zh-TW/features/note.md               |  51 +++
 src/docs/zh-TW/features/pages.md              |  10 +
 src/docs/zh-TW/features/reaction.md           |  11 +
 src/docs/zh-TW/features/silence.md            |   6 +
 src/docs/zh-TW/features/theme.md              |  68 ++++
 src/docs/zh-TW/features/timeline.md           |  31 ++
 src/docs/zh-TW/features/widgets.md            |   7 +
 src/docs/zh-TW/general/apps.md                |   6 +
 src/docs/zh-TW/general/faq.md                 |  22 ++
 src/docs/zh-TW/general/glossary.md            |  83 +++++
 src/docs/zh-TW/general/links.md               |   5 +
 src/docs/zh-TW/general/misskey.md             |  87 +++++
 src/docs/zh-TW/general/report-issue.md        |   8 +
 src/docs/zh-TW/general/troubleshooting.md     |  36 ++
 806 files changed, 32162 insertions(+)
 create mode 100644 src/docs/ar-SA/admin/disable-timelines.md
 create mode 100644 src/docs/ar-SA/admin/faq.md
 create mode 100644 src/docs/ar-SA/advanced/aiscript.md
 create mode 100644 src/docs/ar-SA/advanced/api.md
 create mode 100644 src/docs/ar-SA/advanced/create-plugin.md
 create mode 100644 src/docs/ar-SA/advanced/develop-bot.md
 create mode 100644 src/docs/ar-SA/advanced/reversi-bot.md
 create mode 100644 src/docs/ar-SA/advanced/stream.md
 create mode 100644 src/docs/ar-SA/features/antenna.md
 create mode 100644 src/docs/ar-SA/features/custom-emoji.md
 create mode 100644 src/docs/ar-SA/features/deck.md
 create mode 100644 src/docs/ar-SA/features/drive.md
 create mode 100644 src/docs/ar-SA/features/favorite.md
 create mode 100644 src/docs/ar-SA/features/follow.md
 create mode 100644 src/docs/ar-SA/features/keyboard-shortcut.md
 create mode 100644 src/docs/ar-SA/features/mfm.md
 create mode 100644 src/docs/ar-SA/features/mute.md
 create mode 100644 src/docs/ar-SA/features/note.md
 create mode 100644 src/docs/ar-SA/features/pages.md
 create mode 100644 src/docs/ar-SA/features/reaction.md
 create mode 100644 src/docs/ar-SA/features/silence.md
 create mode 100644 src/docs/ar-SA/features/theme.md
 create mode 100644 src/docs/ar-SA/features/timeline.md
 create mode 100644 src/docs/ar-SA/features/widgets.md
 create mode 100644 src/docs/ar-SA/general/apps.md
 create mode 100644 src/docs/ar-SA/general/faq.md
 create mode 100644 src/docs/ar-SA/general/glossary.md
 create mode 100644 src/docs/ar-SA/general/links.md
 create mode 100644 src/docs/ar-SA/general/misskey.md
 create mode 100644 src/docs/ar-SA/general/report-issue.md
 create mode 100644 src/docs/ar-SA/general/troubleshooting.md
 create mode 100644 src/docs/cs-CZ/admin/disable-timelines.md
 create mode 100644 src/docs/cs-CZ/admin/faq.md
 create mode 100644 src/docs/cs-CZ/advanced/aiscript.md
 create mode 100644 src/docs/cs-CZ/advanced/api.md
 create mode 100644 src/docs/cs-CZ/advanced/create-plugin.md
 create mode 100644 src/docs/cs-CZ/advanced/develop-bot.md
 create mode 100644 src/docs/cs-CZ/advanced/reversi-bot.md
 create mode 100644 src/docs/cs-CZ/advanced/stream.md
 create mode 100644 src/docs/cs-CZ/features/antenna.md
 create mode 100644 src/docs/cs-CZ/features/custom-emoji.md
 create mode 100644 src/docs/cs-CZ/features/deck.md
 create mode 100644 src/docs/cs-CZ/features/drive.md
 create mode 100644 src/docs/cs-CZ/features/favorite.md
 create mode 100644 src/docs/cs-CZ/features/follow.md
 create mode 100644 src/docs/cs-CZ/features/keyboard-shortcut.md
 create mode 100644 src/docs/cs-CZ/features/mfm.md
 create mode 100644 src/docs/cs-CZ/features/mute.md
 create mode 100644 src/docs/cs-CZ/features/note.md
 create mode 100644 src/docs/cs-CZ/features/pages.md
 create mode 100644 src/docs/cs-CZ/features/reaction.md
 create mode 100644 src/docs/cs-CZ/features/silence.md
 create mode 100644 src/docs/cs-CZ/features/theme.md
 create mode 100644 src/docs/cs-CZ/features/timeline.md
 create mode 100644 src/docs/cs-CZ/features/widgets.md
 create mode 100644 src/docs/cs-CZ/general/apps.md
 create mode 100644 src/docs/cs-CZ/general/faq.md
 create mode 100644 src/docs/cs-CZ/general/glossary.md
 create mode 100644 src/docs/cs-CZ/general/links.md
 create mode 100644 src/docs/cs-CZ/general/misskey.md
 create mode 100644 src/docs/cs-CZ/general/report-issue.md
 create mode 100644 src/docs/cs-CZ/general/troubleshooting.md
 create mode 100644 src/docs/da-DK/admin/disable-timelines.md
 create mode 100644 src/docs/da-DK/admin/faq.md
 create mode 100644 src/docs/da-DK/advanced/aiscript.md
 create mode 100644 src/docs/da-DK/advanced/api.md
 create mode 100644 src/docs/da-DK/advanced/create-plugin.md
 create mode 100644 src/docs/da-DK/advanced/develop-bot.md
 create mode 100644 src/docs/da-DK/advanced/reversi-bot.md
 create mode 100644 src/docs/da-DK/advanced/stream.md
 create mode 100644 src/docs/da-DK/features/antenna.md
 create mode 100644 src/docs/da-DK/features/custom-emoji.md
 create mode 100644 src/docs/da-DK/features/deck.md
 create mode 100644 src/docs/da-DK/features/drive.md
 create mode 100644 src/docs/da-DK/features/favorite.md
 create mode 100644 src/docs/da-DK/features/follow.md
 create mode 100644 src/docs/da-DK/features/keyboard-shortcut.md
 create mode 100644 src/docs/da-DK/features/mfm.md
 create mode 100644 src/docs/da-DK/features/mute.md
 create mode 100644 src/docs/da-DK/features/note.md
 create mode 100644 src/docs/da-DK/features/pages.md
 create mode 100644 src/docs/da-DK/features/reaction.md
 create mode 100644 src/docs/da-DK/features/silence.md
 create mode 100644 src/docs/da-DK/features/theme.md
 create mode 100644 src/docs/da-DK/features/timeline.md
 create mode 100644 src/docs/da-DK/features/widgets.md
 create mode 100644 src/docs/da-DK/general/apps.md
 create mode 100644 src/docs/da-DK/general/faq.md
 create mode 100644 src/docs/da-DK/general/glossary.md
 create mode 100644 src/docs/da-DK/general/links.md
 create mode 100644 src/docs/da-DK/general/misskey.md
 create mode 100644 src/docs/da-DK/general/report-issue.md
 create mode 100644 src/docs/da-DK/general/troubleshooting.md
 create mode 100644 src/docs/de-DE/admin/disable-timelines.md
 create mode 100644 src/docs/de-DE/admin/faq.md
 create mode 100644 src/docs/de-DE/advanced/aiscript.md
 create mode 100644 src/docs/de-DE/advanced/api.md
 create mode 100644 src/docs/de-DE/advanced/create-plugin.md
 create mode 100644 src/docs/de-DE/advanced/develop-bot.md
 create mode 100644 src/docs/de-DE/advanced/reversi-bot.md
 create mode 100644 src/docs/de-DE/advanced/stream.md
 create mode 100644 src/docs/de-DE/features/antenna.md
 create mode 100644 src/docs/de-DE/features/custom-emoji.md
 create mode 100644 src/docs/de-DE/features/deck.md
 create mode 100644 src/docs/de-DE/features/drive.md
 create mode 100644 src/docs/de-DE/features/favorite.md
 create mode 100644 src/docs/de-DE/features/follow.md
 create mode 100644 src/docs/de-DE/features/keyboard-shortcut.md
 create mode 100644 src/docs/de-DE/features/mfm.md
 create mode 100644 src/docs/de-DE/features/mute.md
 create mode 100644 src/docs/de-DE/features/note.md
 create mode 100644 src/docs/de-DE/features/pages.md
 create mode 100644 src/docs/de-DE/features/reaction.md
 create mode 100644 src/docs/de-DE/features/silence.md
 create mode 100644 src/docs/de-DE/features/theme.md
 create mode 100644 src/docs/de-DE/features/timeline.md
 create mode 100644 src/docs/de-DE/features/widgets.md
 create mode 100644 src/docs/de-DE/general/apps.md
 create mode 100644 src/docs/de-DE/general/faq.md
 create mode 100644 src/docs/de-DE/general/glossary.md
 create mode 100644 src/docs/de-DE/general/links.md
 create mode 100644 src/docs/de-DE/general/misskey.md
 create mode 100644 src/docs/de-DE/general/report-issue.md
 create mode 100644 src/docs/de-DE/general/troubleshooting.md
 create mode 100644 src/docs/en-US/admin/disable-timelines.md
 create mode 100644 src/docs/en-US/admin/faq.md
 create mode 100644 src/docs/en-US/advanced/aiscript.md
 create mode 100644 src/docs/en-US/advanced/api.md
 create mode 100644 src/docs/en-US/advanced/create-plugin.md
 create mode 100644 src/docs/en-US/advanced/develop-bot.md
 create mode 100644 src/docs/en-US/advanced/reversi-bot.md
 create mode 100644 src/docs/en-US/advanced/stream.md
 create mode 100644 src/docs/en-US/features/antenna.md
 create mode 100644 src/docs/en-US/features/custom-emoji.md
 create mode 100644 src/docs/en-US/features/deck.md
 create mode 100644 src/docs/en-US/features/drive.md
 create mode 100644 src/docs/en-US/features/favorite.md
 create mode 100644 src/docs/en-US/features/follow.md
 create mode 100644 src/docs/en-US/features/keyboard-shortcut.md
 create mode 100644 src/docs/en-US/features/mfm.md
 create mode 100644 src/docs/en-US/features/mute.md
 create mode 100644 src/docs/en-US/features/note.md
 create mode 100644 src/docs/en-US/features/pages.md
 create mode 100644 src/docs/en-US/features/reaction.md
 create mode 100644 src/docs/en-US/features/silence.md
 create mode 100644 src/docs/en-US/features/theme.md
 create mode 100644 src/docs/en-US/features/timeline.md
 create mode 100644 src/docs/en-US/features/widgets.md
 create mode 100644 src/docs/en-US/general/apps.md
 create mode 100644 src/docs/en-US/general/faq.md
 create mode 100644 src/docs/en-US/general/glossary.md
 create mode 100644 src/docs/en-US/general/links.md
 create mode 100644 src/docs/en-US/general/misskey.md
 create mode 100644 src/docs/en-US/general/report-issue.md
 create mode 100644 src/docs/en-US/general/troubleshooting.md
 create mode 100644 src/docs/eo-UY/admin/disable-timelines.md
 create mode 100644 src/docs/eo-UY/admin/faq.md
 create mode 100644 src/docs/eo-UY/advanced/aiscript.md
 create mode 100644 src/docs/eo-UY/advanced/api.md
 create mode 100644 src/docs/eo-UY/advanced/create-plugin.md
 create mode 100644 src/docs/eo-UY/advanced/develop-bot.md
 create mode 100644 src/docs/eo-UY/advanced/reversi-bot.md
 create mode 100644 src/docs/eo-UY/advanced/stream.md
 create mode 100644 src/docs/eo-UY/features/antenna.md
 create mode 100644 src/docs/eo-UY/features/custom-emoji.md
 create mode 100644 src/docs/eo-UY/features/deck.md
 create mode 100644 src/docs/eo-UY/features/drive.md
 create mode 100644 src/docs/eo-UY/features/favorite.md
 create mode 100644 src/docs/eo-UY/features/follow.md
 create mode 100644 src/docs/eo-UY/features/keyboard-shortcut.md
 create mode 100644 src/docs/eo-UY/features/mfm.md
 create mode 100644 src/docs/eo-UY/features/mute.md
 create mode 100644 src/docs/eo-UY/features/note.md
 create mode 100644 src/docs/eo-UY/features/pages.md
 create mode 100644 src/docs/eo-UY/features/reaction.md
 create mode 100644 src/docs/eo-UY/features/silence.md
 create mode 100644 src/docs/eo-UY/features/theme.md
 create mode 100644 src/docs/eo-UY/features/timeline.md
 create mode 100644 src/docs/eo-UY/features/widgets.md
 create mode 100644 src/docs/eo-UY/general/apps.md
 create mode 100644 src/docs/eo-UY/general/faq.md
 create mode 100644 src/docs/eo-UY/general/glossary.md
 create mode 100644 src/docs/eo-UY/general/links.md
 create mode 100644 src/docs/eo-UY/general/misskey.md
 create mode 100644 src/docs/eo-UY/general/report-issue.md
 create mode 100644 src/docs/eo-UY/general/troubleshooting.md
 create mode 100644 src/docs/es-ES/admin/disable-timelines.md
 create mode 100644 src/docs/es-ES/admin/faq.md
 create mode 100644 src/docs/es-ES/advanced/aiscript.md
 create mode 100644 src/docs/es-ES/advanced/api.md
 create mode 100644 src/docs/es-ES/advanced/create-plugin.md
 create mode 100644 src/docs/es-ES/advanced/develop-bot.md
 create mode 100644 src/docs/es-ES/advanced/reversi-bot.md
 create mode 100644 src/docs/es-ES/advanced/stream.md
 create mode 100644 src/docs/es-ES/features/antenna.md
 create mode 100644 src/docs/es-ES/features/custom-emoji.md
 create mode 100644 src/docs/es-ES/features/deck.md
 create mode 100644 src/docs/es-ES/features/drive.md
 create mode 100644 src/docs/es-ES/features/favorite.md
 create mode 100644 src/docs/es-ES/features/follow.md
 create mode 100644 src/docs/es-ES/features/keyboard-shortcut.md
 create mode 100644 src/docs/es-ES/features/mfm.md
 create mode 100644 src/docs/es-ES/features/mute.md
 create mode 100644 src/docs/es-ES/features/note.md
 create mode 100644 src/docs/es-ES/features/pages.md
 create mode 100644 src/docs/es-ES/features/reaction.md
 create mode 100644 src/docs/es-ES/features/silence.md
 create mode 100644 src/docs/es-ES/features/theme.md
 create mode 100644 src/docs/es-ES/features/timeline.md
 create mode 100644 src/docs/es-ES/features/widgets.md
 create mode 100644 src/docs/es-ES/general/apps.md
 create mode 100644 src/docs/es-ES/general/faq.md
 create mode 100644 src/docs/es-ES/general/glossary.md
 create mode 100644 src/docs/es-ES/general/links.md
 create mode 100644 src/docs/es-ES/general/misskey.md
 create mode 100644 src/docs/es-ES/general/report-issue.md
 create mode 100644 src/docs/es-ES/general/troubleshooting.md
 create mode 100644 src/docs/fr-FR/admin/disable-timelines.md
 create mode 100644 src/docs/fr-FR/admin/faq.md
 create mode 100644 src/docs/fr-FR/advanced/aiscript.md
 create mode 100644 src/docs/fr-FR/advanced/api.md
 create mode 100644 src/docs/fr-FR/advanced/create-plugin.md
 create mode 100644 src/docs/fr-FR/advanced/develop-bot.md
 create mode 100644 src/docs/fr-FR/advanced/reversi-bot.md
 create mode 100644 src/docs/fr-FR/advanced/stream.md
 create mode 100644 src/docs/fr-FR/features/antenna.md
 create mode 100644 src/docs/fr-FR/features/custom-emoji.md
 create mode 100644 src/docs/fr-FR/features/deck.md
 create mode 100644 src/docs/fr-FR/features/drive.md
 create mode 100644 src/docs/fr-FR/features/favorite.md
 create mode 100644 src/docs/fr-FR/features/follow.md
 create mode 100644 src/docs/fr-FR/features/keyboard-shortcut.md
 create mode 100644 src/docs/fr-FR/features/mfm.md
 create mode 100644 src/docs/fr-FR/features/mute.md
 create mode 100644 src/docs/fr-FR/features/note.md
 create mode 100644 src/docs/fr-FR/features/pages.md
 create mode 100644 src/docs/fr-FR/features/reaction.md
 create mode 100644 src/docs/fr-FR/features/silence.md
 create mode 100644 src/docs/fr-FR/features/theme.md
 create mode 100644 src/docs/fr-FR/features/timeline.md
 create mode 100644 src/docs/fr-FR/features/widgets.md
 create mode 100644 src/docs/fr-FR/general/apps.md
 create mode 100644 src/docs/fr-FR/general/faq.md
 create mode 100644 src/docs/fr-FR/general/glossary.md
 create mode 100644 src/docs/fr-FR/general/links.md
 create mode 100644 src/docs/fr-FR/general/misskey.md
 create mode 100644 src/docs/fr-FR/general/report-issue.md
 create mode 100644 src/docs/fr-FR/general/troubleshooting.md
 create mode 100644 src/docs/ht-HT/admin/disable-timelines.md
 create mode 100644 src/docs/ht-HT/admin/faq.md
 create mode 100644 src/docs/ht-HT/advanced/aiscript.md
 create mode 100644 src/docs/ht-HT/advanced/api.md
 create mode 100644 src/docs/ht-HT/advanced/create-plugin.md
 create mode 100644 src/docs/ht-HT/advanced/develop-bot.md
 create mode 100644 src/docs/ht-HT/advanced/reversi-bot.md
 create mode 100644 src/docs/ht-HT/advanced/stream.md
 create mode 100644 src/docs/ht-HT/features/antenna.md
 create mode 100644 src/docs/ht-HT/features/custom-emoji.md
 create mode 100644 src/docs/ht-HT/features/deck.md
 create mode 100644 src/docs/ht-HT/features/drive.md
 create mode 100644 src/docs/ht-HT/features/favorite.md
 create mode 100644 src/docs/ht-HT/features/follow.md
 create mode 100644 src/docs/ht-HT/features/keyboard-shortcut.md
 create mode 100644 src/docs/ht-HT/features/mfm.md
 create mode 100644 src/docs/ht-HT/features/mute.md
 create mode 100644 src/docs/ht-HT/features/note.md
 create mode 100644 src/docs/ht-HT/features/pages.md
 create mode 100644 src/docs/ht-HT/features/reaction.md
 create mode 100644 src/docs/ht-HT/features/silence.md
 create mode 100644 src/docs/ht-HT/features/theme.md
 create mode 100644 src/docs/ht-HT/features/timeline.md
 create mode 100644 src/docs/ht-HT/features/widgets.md
 create mode 100644 src/docs/ht-HT/general/apps.md
 create mode 100644 src/docs/ht-HT/general/faq.md
 create mode 100644 src/docs/ht-HT/general/glossary.md
 create mode 100644 src/docs/ht-HT/general/links.md
 create mode 100644 src/docs/ht-HT/general/misskey.md
 create mode 100644 src/docs/ht-HT/general/report-issue.md
 create mode 100644 src/docs/ht-HT/general/troubleshooting.md
 create mode 100644 src/docs/id-ID/admin/disable-timelines.md
 create mode 100644 src/docs/id-ID/admin/faq.md
 create mode 100644 src/docs/id-ID/advanced/aiscript.md
 create mode 100644 src/docs/id-ID/advanced/api.md
 create mode 100644 src/docs/id-ID/advanced/create-plugin.md
 create mode 100644 src/docs/id-ID/advanced/develop-bot.md
 create mode 100644 src/docs/id-ID/advanced/reversi-bot.md
 create mode 100644 src/docs/id-ID/advanced/stream.md
 create mode 100644 src/docs/id-ID/features/antenna.md
 create mode 100644 src/docs/id-ID/features/custom-emoji.md
 create mode 100644 src/docs/id-ID/features/deck.md
 create mode 100644 src/docs/id-ID/features/drive.md
 create mode 100644 src/docs/id-ID/features/favorite.md
 create mode 100644 src/docs/id-ID/features/follow.md
 create mode 100644 src/docs/id-ID/features/keyboard-shortcut.md
 create mode 100644 src/docs/id-ID/features/mfm.md
 create mode 100644 src/docs/id-ID/features/mute.md
 create mode 100644 src/docs/id-ID/features/note.md
 create mode 100644 src/docs/id-ID/features/pages.md
 create mode 100644 src/docs/id-ID/features/reaction.md
 create mode 100644 src/docs/id-ID/features/silence.md
 create mode 100644 src/docs/id-ID/features/theme.md
 create mode 100644 src/docs/id-ID/features/timeline.md
 create mode 100644 src/docs/id-ID/features/widgets.md
 create mode 100644 src/docs/id-ID/general/apps.md
 create mode 100644 src/docs/id-ID/general/faq.md
 create mode 100644 src/docs/id-ID/general/glossary.md
 create mode 100644 src/docs/id-ID/general/links.md
 create mode 100644 src/docs/id-ID/general/misskey.md
 create mode 100644 src/docs/id-ID/general/report-issue.md
 create mode 100644 src/docs/id-ID/general/troubleshooting.md
 create mode 100644 src/docs/it-IT/admin/disable-timelines.md
 create mode 100644 src/docs/it-IT/admin/faq.md
 create mode 100644 src/docs/it-IT/advanced/aiscript.md
 create mode 100644 src/docs/it-IT/advanced/api.md
 create mode 100644 src/docs/it-IT/advanced/create-plugin.md
 create mode 100644 src/docs/it-IT/advanced/develop-bot.md
 create mode 100644 src/docs/it-IT/advanced/reversi-bot.md
 create mode 100644 src/docs/it-IT/advanced/stream.md
 create mode 100644 src/docs/it-IT/features/antenna.md
 create mode 100644 src/docs/it-IT/features/custom-emoji.md
 create mode 100644 src/docs/it-IT/features/deck.md
 create mode 100644 src/docs/it-IT/features/drive.md
 create mode 100644 src/docs/it-IT/features/favorite.md
 create mode 100644 src/docs/it-IT/features/follow.md
 create mode 100644 src/docs/it-IT/features/keyboard-shortcut.md
 create mode 100644 src/docs/it-IT/features/mfm.md
 create mode 100644 src/docs/it-IT/features/mute.md
 create mode 100644 src/docs/it-IT/features/note.md
 create mode 100644 src/docs/it-IT/features/pages.md
 create mode 100644 src/docs/it-IT/features/reaction.md
 create mode 100644 src/docs/it-IT/features/silence.md
 create mode 100644 src/docs/it-IT/features/theme.md
 create mode 100644 src/docs/it-IT/features/timeline.md
 create mode 100644 src/docs/it-IT/features/widgets.md
 create mode 100644 src/docs/it-IT/general/apps.md
 create mode 100644 src/docs/it-IT/general/faq.md
 create mode 100644 src/docs/it-IT/general/glossary.md
 create mode 100644 src/docs/it-IT/general/links.md
 create mode 100644 src/docs/it-IT/general/misskey.md
 create mode 100644 src/docs/it-IT/general/report-issue.md
 create mode 100644 src/docs/it-IT/general/troubleshooting.md
 create mode 100644 src/docs/ja-KS/admin/disable-timelines.md
 create mode 100644 src/docs/ja-KS/admin/faq.md
 create mode 100644 src/docs/ja-KS/advanced/aiscript.md
 create mode 100644 src/docs/ja-KS/advanced/api.md
 create mode 100644 src/docs/ja-KS/advanced/create-plugin.md
 create mode 100644 src/docs/ja-KS/advanced/develop-bot.md
 create mode 100644 src/docs/ja-KS/advanced/reversi-bot.md
 create mode 100644 src/docs/ja-KS/advanced/stream.md
 create mode 100644 src/docs/ja-KS/features/antenna.md
 create mode 100644 src/docs/ja-KS/features/custom-emoji.md
 create mode 100644 src/docs/ja-KS/features/deck.md
 create mode 100644 src/docs/ja-KS/features/drive.md
 create mode 100644 src/docs/ja-KS/features/favorite.md
 create mode 100644 src/docs/ja-KS/features/follow.md
 create mode 100644 src/docs/ja-KS/features/keyboard-shortcut.md
 create mode 100644 src/docs/ja-KS/features/mfm.md
 create mode 100644 src/docs/ja-KS/features/mute.md
 create mode 100644 src/docs/ja-KS/features/note.md
 create mode 100644 src/docs/ja-KS/features/pages.md
 create mode 100644 src/docs/ja-KS/features/reaction.md
 create mode 100644 src/docs/ja-KS/features/silence.md
 create mode 100644 src/docs/ja-KS/features/theme.md
 create mode 100644 src/docs/ja-KS/features/timeline.md
 create mode 100644 src/docs/ja-KS/features/widgets.md
 create mode 100644 src/docs/ja-KS/general/apps.md
 create mode 100644 src/docs/ja-KS/general/faq.md
 create mode 100644 src/docs/ja-KS/general/glossary.md
 create mode 100644 src/docs/ja-KS/general/links.md
 create mode 100644 src/docs/ja-KS/general/misskey.md
 create mode 100644 src/docs/ja-KS/general/report-issue.md
 create mode 100644 src/docs/ja-KS/general/troubleshooting.md
 create mode 100644 src/docs/jbo-EN/admin/disable-timelines.md
 create mode 100644 src/docs/jbo-EN/admin/faq.md
 create mode 100644 src/docs/jbo-EN/advanced/aiscript.md
 create mode 100644 src/docs/jbo-EN/advanced/api.md
 create mode 100644 src/docs/jbo-EN/advanced/create-plugin.md
 create mode 100644 src/docs/jbo-EN/advanced/develop-bot.md
 create mode 100644 src/docs/jbo-EN/advanced/reversi-bot.md
 create mode 100644 src/docs/jbo-EN/advanced/stream.md
 create mode 100644 src/docs/jbo-EN/features/antenna.md
 create mode 100644 src/docs/jbo-EN/features/custom-emoji.md
 create mode 100644 src/docs/jbo-EN/features/deck.md
 create mode 100644 src/docs/jbo-EN/features/drive.md
 create mode 100644 src/docs/jbo-EN/features/favorite.md
 create mode 100644 src/docs/jbo-EN/features/follow.md
 create mode 100644 src/docs/jbo-EN/features/keyboard-shortcut.md
 create mode 100644 src/docs/jbo-EN/features/mfm.md
 create mode 100644 src/docs/jbo-EN/features/mute.md
 create mode 100644 src/docs/jbo-EN/features/note.md
 create mode 100644 src/docs/jbo-EN/features/pages.md
 create mode 100644 src/docs/jbo-EN/features/reaction.md
 create mode 100644 src/docs/jbo-EN/features/silence.md
 create mode 100644 src/docs/jbo-EN/features/theme.md
 create mode 100644 src/docs/jbo-EN/features/timeline.md
 create mode 100644 src/docs/jbo-EN/features/widgets.md
 create mode 100644 src/docs/jbo-EN/general/apps.md
 create mode 100644 src/docs/jbo-EN/general/faq.md
 create mode 100644 src/docs/jbo-EN/general/glossary.md
 create mode 100644 src/docs/jbo-EN/general/links.md
 create mode 100644 src/docs/jbo-EN/general/misskey.md
 create mode 100644 src/docs/jbo-EN/general/report-issue.md
 create mode 100644 src/docs/jbo-EN/general/troubleshooting.md
 create mode 100644 src/docs/kab-KAB/admin/disable-timelines.md
 create mode 100644 src/docs/kab-KAB/admin/faq.md
 create mode 100644 src/docs/kab-KAB/advanced/aiscript.md
 create mode 100644 src/docs/kab-KAB/advanced/api.md
 create mode 100644 src/docs/kab-KAB/advanced/create-plugin.md
 create mode 100644 src/docs/kab-KAB/advanced/develop-bot.md
 create mode 100644 src/docs/kab-KAB/advanced/reversi-bot.md
 create mode 100644 src/docs/kab-KAB/advanced/stream.md
 create mode 100644 src/docs/kab-KAB/features/antenna.md
 create mode 100644 src/docs/kab-KAB/features/custom-emoji.md
 create mode 100644 src/docs/kab-KAB/features/deck.md
 create mode 100644 src/docs/kab-KAB/features/drive.md
 create mode 100644 src/docs/kab-KAB/features/favorite.md
 create mode 100644 src/docs/kab-KAB/features/follow.md
 create mode 100644 src/docs/kab-KAB/features/keyboard-shortcut.md
 create mode 100644 src/docs/kab-KAB/features/mfm.md
 create mode 100644 src/docs/kab-KAB/features/mute.md
 create mode 100644 src/docs/kab-KAB/features/note.md
 create mode 100644 src/docs/kab-KAB/features/pages.md
 create mode 100644 src/docs/kab-KAB/features/reaction.md
 create mode 100644 src/docs/kab-KAB/features/silence.md
 create mode 100644 src/docs/kab-KAB/features/theme.md
 create mode 100644 src/docs/kab-KAB/features/timeline.md
 create mode 100644 src/docs/kab-KAB/features/widgets.md
 create mode 100644 src/docs/kab-KAB/general/apps.md
 create mode 100644 src/docs/kab-KAB/general/faq.md
 create mode 100644 src/docs/kab-KAB/general/glossary.md
 create mode 100644 src/docs/kab-KAB/general/links.md
 create mode 100644 src/docs/kab-KAB/general/misskey.md
 create mode 100644 src/docs/kab-KAB/general/report-issue.md
 create mode 100644 src/docs/kab-KAB/general/troubleshooting.md
 create mode 100644 src/docs/kn-IN/admin/disable-timelines.md
 create mode 100644 src/docs/kn-IN/admin/faq.md
 create mode 100644 src/docs/kn-IN/advanced/aiscript.md
 create mode 100644 src/docs/kn-IN/advanced/api.md
 create mode 100644 src/docs/kn-IN/advanced/create-plugin.md
 create mode 100644 src/docs/kn-IN/advanced/develop-bot.md
 create mode 100644 src/docs/kn-IN/advanced/reversi-bot.md
 create mode 100644 src/docs/kn-IN/advanced/stream.md
 create mode 100644 src/docs/kn-IN/features/antenna.md
 create mode 100644 src/docs/kn-IN/features/custom-emoji.md
 create mode 100644 src/docs/kn-IN/features/deck.md
 create mode 100644 src/docs/kn-IN/features/drive.md
 create mode 100644 src/docs/kn-IN/features/favorite.md
 create mode 100644 src/docs/kn-IN/features/follow.md
 create mode 100644 src/docs/kn-IN/features/keyboard-shortcut.md
 create mode 100644 src/docs/kn-IN/features/mfm.md
 create mode 100644 src/docs/kn-IN/features/mute.md
 create mode 100644 src/docs/kn-IN/features/note.md
 create mode 100644 src/docs/kn-IN/features/pages.md
 create mode 100644 src/docs/kn-IN/features/reaction.md
 create mode 100644 src/docs/kn-IN/features/silence.md
 create mode 100644 src/docs/kn-IN/features/theme.md
 create mode 100644 src/docs/kn-IN/features/timeline.md
 create mode 100644 src/docs/kn-IN/features/widgets.md
 create mode 100644 src/docs/kn-IN/general/apps.md
 create mode 100644 src/docs/kn-IN/general/faq.md
 create mode 100644 src/docs/kn-IN/general/glossary.md
 create mode 100644 src/docs/kn-IN/general/links.md
 create mode 100644 src/docs/kn-IN/general/misskey.md
 create mode 100644 src/docs/kn-IN/general/report-issue.md
 create mode 100644 src/docs/kn-IN/general/troubleshooting.md
 create mode 100644 src/docs/ko-KR/admin/disable-timelines.md
 create mode 100644 src/docs/ko-KR/admin/faq.md
 create mode 100644 src/docs/ko-KR/advanced/aiscript.md
 create mode 100644 src/docs/ko-KR/advanced/api.md
 create mode 100644 src/docs/ko-KR/advanced/create-plugin.md
 create mode 100644 src/docs/ko-KR/advanced/develop-bot.md
 create mode 100644 src/docs/ko-KR/advanced/reversi-bot.md
 create mode 100644 src/docs/ko-KR/advanced/stream.md
 create mode 100644 src/docs/ko-KR/features/antenna.md
 create mode 100644 src/docs/ko-KR/features/custom-emoji.md
 create mode 100644 src/docs/ko-KR/features/deck.md
 create mode 100644 src/docs/ko-KR/features/drive.md
 create mode 100644 src/docs/ko-KR/features/favorite.md
 create mode 100644 src/docs/ko-KR/features/follow.md
 create mode 100644 src/docs/ko-KR/features/keyboard-shortcut.md
 create mode 100644 src/docs/ko-KR/features/mfm.md
 create mode 100644 src/docs/ko-KR/features/mute.md
 create mode 100644 src/docs/ko-KR/features/note.md
 create mode 100644 src/docs/ko-KR/features/pages.md
 create mode 100644 src/docs/ko-KR/features/reaction.md
 create mode 100644 src/docs/ko-KR/features/silence.md
 create mode 100644 src/docs/ko-KR/features/theme.md
 create mode 100644 src/docs/ko-KR/features/timeline.md
 create mode 100644 src/docs/ko-KR/features/widgets.md
 create mode 100644 src/docs/ko-KR/general/apps.md
 create mode 100644 src/docs/ko-KR/general/faq.md
 create mode 100644 src/docs/ko-KR/general/glossary.md
 create mode 100644 src/docs/ko-KR/general/links.md
 create mode 100644 src/docs/ko-KR/general/misskey.md
 create mode 100644 src/docs/ko-KR/general/report-issue.md
 create mode 100644 src/docs/ko-KR/general/troubleshooting.md
 create mode 100644 src/docs/nl-NL/admin/disable-timelines.md
 create mode 100644 src/docs/nl-NL/admin/faq.md
 create mode 100644 src/docs/nl-NL/advanced/aiscript.md
 create mode 100644 src/docs/nl-NL/advanced/api.md
 create mode 100644 src/docs/nl-NL/advanced/create-plugin.md
 create mode 100644 src/docs/nl-NL/advanced/develop-bot.md
 create mode 100644 src/docs/nl-NL/advanced/reversi-bot.md
 create mode 100644 src/docs/nl-NL/advanced/stream.md
 create mode 100644 src/docs/nl-NL/features/antenna.md
 create mode 100644 src/docs/nl-NL/features/custom-emoji.md
 create mode 100644 src/docs/nl-NL/features/deck.md
 create mode 100644 src/docs/nl-NL/features/drive.md
 create mode 100644 src/docs/nl-NL/features/favorite.md
 create mode 100644 src/docs/nl-NL/features/follow.md
 create mode 100644 src/docs/nl-NL/features/keyboard-shortcut.md
 create mode 100644 src/docs/nl-NL/features/mfm.md
 create mode 100644 src/docs/nl-NL/features/mute.md
 create mode 100644 src/docs/nl-NL/features/note.md
 create mode 100644 src/docs/nl-NL/features/pages.md
 create mode 100644 src/docs/nl-NL/features/reaction.md
 create mode 100644 src/docs/nl-NL/features/silence.md
 create mode 100644 src/docs/nl-NL/features/theme.md
 create mode 100644 src/docs/nl-NL/features/timeline.md
 create mode 100644 src/docs/nl-NL/features/widgets.md
 create mode 100644 src/docs/nl-NL/general/apps.md
 create mode 100644 src/docs/nl-NL/general/faq.md
 create mode 100644 src/docs/nl-NL/general/glossary.md
 create mode 100644 src/docs/nl-NL/general/links.md
 create mode 100644 src/docs/nl-NL/general/misskey.md
 create mode 100644 src/docs/nl-NL/general/report-issue.md
 create mode 100644 src/docs/nl-NL/general/troubleshooting.md
 create mode 100644 src/docs/no-NO/admin/disable-timelines.md
 create mode 100644 src/docs/no-NO/admin/faq.md
 create mode 100644 src/docs/no-NO/advanced/aiscript.md
 create mode 100644 src/docs/no-NO/advanced/api.md
 create mode 100644 src/docs/no-NO/advanced/create-plugin.md
 create mode 100644 src/docs/no-NO/advanced/develop-bot.md
 create mode 100644 src/docs/no-NO/advanced/reversi-bot.md
 create mode 100644 src/docs/no-NO/advanced/stream.md
 create mode 100644 src/docs/no-NO/features/antenna.md
 create mode 100644 src/docs/no-NO/features/custom-emoji.md
 create mode 100644 src/docs/no-NO/features/deck.md
 create mode 100644 src/docs/no-NO/features/drive.md
 create mode 100644 src/docs/no-NO/features/favorite.md
 create mode 100644 src/docs/no-NO/features/follow.md
 create mode 100644 src/docs/no-NO/features/keyboard-shortcut.md
 create mode 100644 src/docs/no-NO/features/mfm.md
 create mode 100644 src/docs/no-NO/features/mute.md
 create mode 100644 src/docs/no-NO/features/note.md
 create mode 100644 src/docs/no-NO/features/pages.md
 create mode 100644 src/docs/no-NO/features/reaction.md
 create mode 100644 src/docs/no-NO/features/silence.md
 create mode 100644 src/docs/no-NO/features/theme.md
 create mode 100644 src/docs/no-NO/features/timeline.md
 create mode 100644 src/docs/no-NO/features/widgets.md
 create mode 100644 src/docs/no-NO/general/apps.md
 create mode 100644 src/docs/no-NO/general/faq.md
 create mode 100644 src/docs/no-NO/general/glossary.md
 create mode 100644 src/docs/no-NO/general/links.md
 create mode 100644 src/docs/no-NO/general/misskey.md
 create mode 100644 src/docs/no-NO/general/report-issue.md
 create mode 100644 src/docs/no-NO/general/troubleshooting.md
 create mode 100644 src/docs/pl-PL/admin/disable-timelines.md
 create mode 100644 src/docs/pl-PL/admin/faq.md
 create mode 100644 src/docs/pl-PL/advanced/aiscript.md
 create mode 100644 src/docs/pl-PL/advanced/api.md
 create mode 100644 src/docs/pl-PL/advanced/create-plugin.md
 create mode 100644 src/docs/pl-PL/advanced/develop-bot.md
 create mode 100644 src/docs/pl-PL/advanced/reversi-bot.md
 create mode 100644 src/docs/pl-PL/advanced/stream.md
 create mode 100644 src/docs/pl-PL/features/antenna.md
 create mode 100644 src/docs/pl-PL/features/custom-emoji.md
 create mode 100644 src/docs/pl-PL/features/deck.md
 create mode 100644 src/docs/pl-PL/features/drive.md
 create mode 100644 src/docs/pl-PL/features/favorite.md
 create mode 100644 src/docs/pl-PL/features/follow.md
 create mode 100644 src/docs/pl-PL/features/keyboard-shortcut.md
 create mode 100644 src/docs/pl-PL/features/mfm.md
 create mode 100644 src/docs/pl-PL/features/mute.md
 create mode 100644 src/docs/pl-PL/features/note.md
 create mode 100644 src/docs/pl-PL/features/pages.md
 create mode 100644 src/docs/pl-PL/features/reaction.md
 create mode 100644 src/docs/pl-PL/features/silence.md
 create mode 100644 src/docs/pl-PL/features/theme.md
 create mode 100644 src/docs/pl-PL/features/timeline.md
 create mode 100644 src/docs/pl-PL/features/widgets.md
 create mode 100644 src/docs/pl-PL/general/apps.md
 create mode 100644 src/docs/pl-PL/general/faq.md
 create mode 100644 src/docs/pl-PL/general/glossary.md
 create mode 100644 src/docs/pl-PL/general/links.md
 create mode 100644 src/docs/pl-PL/general/misskey.md
 create mode 100644 src/docs/pl-PL/general/report-issue.md
 create mode 100644 src/docs/pl-PL/general/troubleshooting.md
 create mode 100644 src/docs/pt-PT/admin/disable-timelines.md
 create mode 100644 src/docs/pt-PT/admin/faq.md
 create mode 100644 src/docs/pt-PT/advanced/aiscript.md
 create mode 100644 src/docs/pt-PT/advanced/api.md
 create mode 100644 src/docs/pt-PT/advanced/create-plugin.md
 create mode 100644 src/docs/pt-PT/advanced/develop-bot.md
 create mode 100644 src/docs/pt-PT/advanced/reversi-bot.md
 create mode 100644 src/docs/pt-PT/advanced/stream.md
 create mode 100644 src/docs/pt-PT/features/antenna.md
 create mode 100644 src/docs/pt-PT/features/custom-emoji.md
 create mode 100644 src/docs/pt-PT/features/deck.md
 create mode 100644 src/docs/pt-PT/features/drive.md
 create mode 100644 src/docs/pt-PT/features/favorite.md
 create mode 100644 src/docs/pt-PT/features/follow.md
 create mode 100644 src/docs/pt-PT/features/keyboard-shortcut.md
 create mode 100644 src/docs/pt-PT/features/mfm.md
 create mode 100644 src/docs/pt-PT/features/mute.md
 create mode 100644 src/docs/pt-PT/features/note.md
 create mode 100644 src/docs/pt-PT/features/pages.md
 create mode 100644 src/docs/pt-PT/features/reaction.md
 create mode 100644 src/docs/pt-PT/features/silence.md
 create mode 100644 src/docs/pt-PT/features/theme.md
 create mode 100644 src/docs/pt-PT/features/timeline.md
 create mode 100644 src/docs/pt-PT/features/widgets.md
 create mode 100644 src/docs/pt-PT/general/apps.md
 create mode 100644 src/docs/pt-PT/general/faq.md
 create mode 100644 src/docs/pt-PT/general/glossary.md
 create mode 100644 src/docs/pt-PT/general/links.md
 create mode 100644 src/docs/pt-PT/general/misskey.md
 create mode 100644 src/docs/pt-PT/general/report-issue.md
 create mode 100644 src/docs/pt-PT/general/troubleshooting.md
 create mode 100644 src/docs/ru-RU/admin/disable-timelines.md
 create mode 100644 src/docs/ru-RU/admin/faq.md
 create mode 100644 src/docs/ru-RU/advanced/aiscript.md
 create mode 100644 src/docs/ru-RU/advanced/api.md
 create mode 100644 src/docs/ru-RU/advanced/create-plugin.md
 create mode 100644 src/docs/ru-RU/advanced/develop-bot.md
 create mode 100644 src/docs/ru-RU/advanced/reversi-bot.md
 create mode 100644 src/docs/ru-RU/advanced/stream.md
 create mode 100644 src/docs/ru-RU/features/antenna.md
 create mode 100644 src/docs/ru-RU/features/custom-emoji.md
 create mode 100644 src/docs/ru-RU/features/deck.md
 create mode 100644 src/docs/ru-RU/features/drive.md
 create mode 100644 src/docs/ru-RU/features/favorite.md
 create mode 100644 src/docs/ru-RU/features/follow.md
 create mode 100644 src/docs/ru-RU/features/keyboard-shortcut.md
 create mode 100644 src/docs/ru-RU/features/mfm.md
 create mode 100644 src/docs/ru-RU/features/mute.md
 create mode 100644 src/docs/ru-RU/features/note.md
 create mode 100644 src/docs/ru-RU/features/pages.md
 create mode 100644 src/docs/ru-RU/features/reaction.md
 create mode 100644 src/docs/ru-RU/features/silence.md
 create mode 100644 src/docs/ru-RU/features/theme.md
 create mode 100644 src/docs/ru-RU/features/timeline.md
 create mode 100644 src/docs/ru-RU/features/widgets.md
 create mode 100644 src/docs/ru-RU/general/apps.md
 create mode 100644 src/docs/ru-RU/general/faq.md
 create mode 100644 src/docs/ru-RU/general/glossary.md
 create mode 100644 src/docs/ru-RU/general/links.md
 create mode 100644 src/docs/ru-RU/general/misskey.md
 create mode 100644 src/docs/ru-RU/general/report-issue.md
 create mode 100644 src/docs/ru-RU/general/troubleshooting.md
 create mode 100644 src/docs/th-TH/admin/disable-timelines.md
 create mode 100644 src/docs/th-TH/admin/faq.md
 create mode 100644 src/docs/th-TH/advanced/aiscript.md
 create mode 100644 src/docs/th-TH/advanced/api.md
 create mode 100644 src/docs/th-TH/advanced/create-plugin.md
 create mode 100644 src/docs/th-TH/advanced/develop-bot.md
 create mode 100644 src/docs/th-TH/advanced/reversi-bot.md
 create mode 100644 src/docs/th-TH/advanced/stream.md
 create mode 100644 src/docs/th-TH/features/antenna.md
 create mode 100644 src/docs/th-TH/features/custom-emoji.md
 create mode 100644 src/docs/th-TH/features/deck.md
 create mode 100644 src/docs/th-TH/features/drive.md
 create mode 100644 src/docs/th-TH/features/favorite.md
 create mode 100644 src/docs/th-TH/features/follow.md
 create mode 100644 src/docs/th-TH/features/keyboard-shortcut.md
 create mode 100644 src/docs/th-TH/features/mfm.md
 create mode 100644 src/docs/th-TH/features/mute.md
 create mode 100644 src/docs/th-TH/features/note.md
 create mode 100644 src/docs/th-TH/features/pages.md
 create mode 100644 src/docs/th-TH/features/reaction.md
 create mode 100644 src/docs/th-TH/features/silence.md
 create mode 100644 src/docs/th-TH/features/theme.md
 create mode 100644 src/docs/th-TH/features/timeline.md
 create mode 100644 src/docs/th-TH/features/widgets.md
 create mode 100644 src/docs/th-TH/general/apps.md
 create mode 100644 src/docs/th-TH/general/faq.md
 create mode 100644 src/docs/th-TH/general/glossary.md
 create mode 100644 src/docs/th-TH/general/links.md
 create mode 100644 src/docs/th-TH/general/misskey.md
 create mode 100644 src/docs/th-TH/general/report-issue.md
 create mode 100644 src/docs/th-TH/general/troubleshooting.md
 create mode 100644 src/docs/ug-CN/admin/disable-timelines.md
 create mode 100644 src/docs/ug-CN/admin/faq.md
 create mode 100644 src/docs/ug-CN/advanced/aiscript.md
 create mode 100644 src/docs/ug-CN/advanced/api.md
 create mode 100644 src/docs/ug-CN/advanced/create-plugin.md
 create mode 100644 src/docs/ug-CN/advanced/develop-bot.md
 create mode 100644 src/docs/ug-CN/advanced/reversi-bot.md
 create mode 100644 src/docs/ug-CN/advanced/stream.md
 create mode 100644 src/docs/ug-CN/features/antenna.md
 create mode 100644 src/docs/ug-CN/features/custom-emoji.md
 create mode 100644 src/docs/ug-CN/features/deck.md
 create mode 100644 src/docs/ug-CN/features/drive.md
 create mode 100644 src/docs/ug-CN/features/favorite.md
 create mode 100644 src/docs/ug-CN/features/follow.md
 create mode 100644 src/docs/ug-CN/features/keyboard-shortcut.md
 create mode 100644 src/docs/ug-CN/features/mfm.md
 create mode 100644 src/docs/ug-CN/features/mute.md
 create mode 100644 src/docs/ug-CN/features/note.md
 create mode 100644 src/docs/ug-CN/features/pages.md
 create mode 100644 src/docs/ug-CN/features/reaction.md
 create mode 100644 src/docs/ug-CN/features/silence.md
 create mode 100644 src/docs/ug-CN/features/theme.md
 create mode 100644 src/docs/ug-CN/features/timeline.md
 create mode 100644 src/docs/ug-CN/features/widgets.md
 create mode 100644 src/docs/ug-CN/general/apps.md
 create mode 100644 src/docs/ug-CN/general/faq.md
 create mode 100644 src/docs/ug-CN/general/glossary.md
 create mode 100644 src/docs/ug-CN/general/links.md
 create mode 100644 src/docs/ug-CN/general/misskey.md
 create mode 100644 src/docs/ug-CN/general/report-issue.md
 create mode 100644 src/docs/ug-CN/general/troubleshooting.md
 create mode 100644 src/docs/uk-UA/admin/disable-timelines.md
 create mode 100644 src/docs/uk-UA/admin/faq.md
 create mode 100644 src/docs/uk-UA/advanced/aiscript.md
 create mode 100644 src/docs/uk-UA/advanced/api.md
 create mode 100644 src/docs/uk-UA/advanced/create-plugin.md
 create mode 100644 src/docs/uk-UA/advanced/develop-bot.md
 create mode 100644 src/docs/uk-UA/advanced/reversi-bot.md
 create mode 100644 src/docs/uk-UA/advanced/stream.md
 create mode 100644 src/docs/uk-UA/features/antenna.md
 create mode 100644 src/docs/uk-UA/features/custom-emoji.md
 create mode 100644 src/docs/uk-UA/features/deck.md
 create mode 100644 src/docs/uk-UA/features/drive.md
 create mode 100644 src/docs/uk-UA/features/favorite.md
 create mode 100644 src/docs/uk-UA/features/follow.md
 create mode 100644 src/docs/uk-UA/features/keyboard-shortcut.md
 create mode 100644 src/docs/uk-UA/features/mfm.md
 create mode 100644 src/docs/uk-UA/features/mute.md
 create mode 100644 src/docs/uk-UA/features/note.md
 create mode 100644 src/docs/uk-UA/features/pages.md
 create mode 100644 src/docs/uk-UA/features/reaction.md
 create mode 100644 src/docs/uk-UA/features/silence.md
 create mode 100644 src/docs/uk-UA/features/theme.md
 create mode 100644 src/docs/uk-UA/features/timeline.md
 create mode 100644 src/docs/uk-UA/features/widgets.md
 create mode 100644 src/docs/uk-UA/general/apps.md
 create mode 100644 src/docs/uk-UA/general/faq.md
 create mode 100644 src/docs/uk-UA/general/glossary.md
 create mode 100644 src/docs/uk-UA/general/links.md
 create mode 100644 src/docs/uk-UA/general/misskey.md
 create mode 100644 src/docs/uk-UA/general/report-issue.md
 create mode 100644 src/docs/uk-UA/general/troubleshooting.md
 create mode 100644 src/docs/zh-CN/admin/disable-timelines.md
 create mode 100644 src/docs/zh-CN/admin/faq.md
 create mode 100644 src/docs/zh-CN/advanced/aiscript.md
 create mode 100644 src/docs/zh-CN/advanced/api.md
 create mode 100644 src/docs/zh-CN/advanced/create-plugin.md
 create mode 100644 src/docs/zh-CN/advanced/develop-bot.md
 create mode 100644 src/docs/zh-CN/advanced/reversi-bot.md
 create mode 100644 src/docs/zh-CN/advanced/stream.md
 create mode 100644 src/docs/zh-CN/features/antenna.md
 create mode 100644 src/docs/zh-CN/features/custom-emoji.md
 create mode 100644 src/docs/zh-CN/features/deck.md
 create mode 100644 src/docs/zh-CN/features/drive.md
 create mode 100644 src/docs/zh-CN/features/favorite.md
 create mode 100644 src/docs/zh-CN/features/follow.md
 create mode 100644 src/docs/zh-CN/features/keyboard-shortcut.md
 create mode 100644 src/docs/zh-CN/features/mfm.md
 create mode 100644 src/docs/zh-CN/features/mute.md
 create mode 100644 src/docs/zh-CN/features/note.md
 create mode 100644 src/docs/zh-CN/features/pages.md
 create mode 100644 src/docs/zh-CN/features/reaction.md
 create mode 100644 src/docs/zh-CN/features/silence.md
 create mode 100644 src/docs/zh-CN/features/theme.md
 create mode 100644 src/docs/zh-CN/features/timeline.md
 create mode 100644 src/docs/zh-CN/features/widgets.md
 create mode 100644 src/docs/zh-CN/general/apps.md
 create mode 100644 src/docs/zh-CN/general/faq.md
 create mode 100644 src/docs/zh-CN/general/glossary.md
 create mode 100644 src/docs/zh-CN/general/links.md
 create mode 100644 src/docs/zh-CN/general/misskey.md
 create mode 100644 src/docs/zh-CN/general/report-issue.md
 create mode 100644 src/docs/zh-CN/general/troubleshooting.md
 create mode 100644 src/docs/zh-TW/admin/disable-timelines.md
 create mode 100644 src/docs/zh-TW/admin/faq.md
 create mode 100644 src/docs/zh-TW/advanced/aiscript.md
 create mode 100644 src/docs/zh-TW/advanced/api.md
 create mode 100644 src/docs/zh-TW/advanced/create-plugin.md
 create mode 100644 src/docs/zh-TW/advanced/develop-bot.md
 create mode 100644 src/docs/zh-TW/advanced/reversi-bot.md
 create mode 100644 src/docs/zh-TW/advanced/stream.md
 create mode 100644 src/docs/zh-TW/features/antenna.md
 create mode 100644 src/docs/zh-TW/features/custom-emoji.md
 create mode 100644 src/docs/zh-TW/features/deck.md
 create mode 100644 src/docs/zh-TW/features/drive.md
 create mode 100644 src/docs/zh-TW/features/favorite.md
 create mode 100644 src/docs/zh-TW/features/follow.md
 create mode 100644 src/docs/zh-TW/features/keyboard-shortcut.md
 create mode 100644 src/docs/zh-TW/features/mfm.md
 create mode 100644 src/docs/zh-TW/features/mute.md
 create mode 100644 src/docs/zh-TW/features/note.md
 create mode 100644 src/docs/zh-TW/features/pages.md
 create mode 100644 src/docs/zh-TW/features/reaction.md
 create mode 100644 src/docs/zh-TW/features/silence.md
 create mode 100644 src/docs/zh-TW/features/theme.md
 create mode 100644 src/docs/zh-TW/features/timeline.md
 create mode 100644 src/docs/zh-TW/features/widgets.md
 create mode 100644 src/docs/zh-TW/general/apps.md
 create mode 100644 src/docs/zh-TW/general/faq.md
 create mode 100644 src/docs/zh-TW/general/glossary.md
 create mode 100644 src/docs/zh-TW/general/links.md
 create mode 100644 src/docs/zh-TW/general/misskey.md
 create mode 100644 src/docs/zh-TW/general/report-issue.md
 create mode 100644 src/docs/zh-TW/general/troubleshooting.md

diff --git a/src/docs/ar-SA/admin/disable-timelines.md b/src/docs/ar-SA/admin/disable-timelines.md
new file mode 100644
index 0000000000..b081e35ab0
--- /dev/null
+++ b/src/docs/ar-SA/admin/disable-timelines.md
@@ -0,0 +1,8 @@
+# LTL/STL/GTLの無効化
+Misskeyでは、LTL/STL/GTLをそれぞれ無効化することができます。有効/無効を切り替えるには、インスタンスコントロールパネルで設定します。
+
+LTLやSTLは、そのインスタンス全員の投稿が見れるため、新規のユーザーにとってはユーザーを探す必要がなくなり、興味のあるユーザーを見つけやすいという利点があります。 しかし同時に、フォロー機能が活用されなくなったり、不適切な投稿が目につきやすくなったり、チャットのようになることで内輪感が生じて逆に新規ユーザーが参加しにくくなるといったデメリットも持ち合わせています。 サーバーによってメリット/デメリットどちらが優勢かは異なるので、オプションとして無効にできるようになっています。 もしデメリットの方が上回っていると感じたら、それらのタイムラインを無効化することも検討してください。
+
+<div class="warn">⚠️ 無効化を行うと、ユーザーが困惑し、短期的に見て利用者が減る可能性があります。そのため、無効化の際は影響を慎重に検討し、事前に説明してフォローを整える期間を一定程度設けることを推奨します。</div>
+
+なお、管理者/モデレーターは、これらのタイムラインの無効化状態は適用されず、引き続き利用することが可能です。
diff --git a/src/docs/ar-SA/admin/faq.md b/src/docs/ar-SA/admin/faq.md
new file mode 100644
index 0000000000..317b4e0655
--- /dev/null
+++ b/src/docs/ar-SA/admin/faq.md
@@ -0,0 +1,5 @@
+# よくある質問
+ここでは、サーバー管理者向けのよくある質問を掲載しています。
+
+## デフォルトテーマを設定したい
+現在、デフォルトテーマ設定機能は実装されていません。
diff --git a/src/docs/ar-SA/advanced/aiscript.md b/src/docs/ar-SA/advanced/aiscript.md
new file mode 100644
index 0000000000..604d17daa8
--- /dev/null
+++ b/src/docs/ar-SA/advanced/aiscript.md
@@ -0,0 +1,7 @@
+# AiScript
+AiScriptは、Misskeyで使用できるスクリプト言語です。
+
+<div class="info">ℹ️ AiScript実装はMisskeyとは別リポジトリで、<a href="https://github.com/syuilo/aiscript" target="_blank">オープンソースで公開されています。</a></div>
+
+## 使い方
+AiScriptの構文や組み込み関数などのドキュメントは、[こちら](https://github.com/syuilo/aiscript/tree/master/docs)で公開されています。
diff --git a/src/docs/ar-SA/advanced/api.md b/src/docs/ar-SA/advanced/api.md
new file mode 100644
index 0000000000..76019b6145
--- /dev/null
+++ b/src/docs/ar-SA/advanced/api.md
@@ -0,0 +1,58 @@
+# Misskey API
+
+MisskeyAPIを使ってMisskeyクライアント、Misskey連携Webサービス、Bot等(以下「アプリケーション」と呼びます)を開発できます。 ストリーミングAPIもあるので、リアルタイム性のあるアプリケーションを作ることも可能です。
+
+APIを使い始めるには、まずアクセストークンを取得する必要があります。 このドキュメントでは、アクセストークンを取得する手順を説明した後、基本的なAPIの使い方を説明します。
+
+## アクセストークンの取得
+基本的に、APIはリクエストにはアクセストークンが必要となります。 APIにリクエストするのが自分自身なのか、不特定の利用者に使ってもらうアプリケーションなのかによって取得手順は異なります。
+
+* 前者の場合: [「自分自身のアクセストークンを手動発行する」](#自分自身のアクセストークンを手動発行する)に進む
+* 後者の場合: [「アプリケーション利用者にアクセストークンの発行をリクエストする」](#アプリケーション利用者にアクセストークンの発行をリクエストする)に進む
+
+### 自分自身のアクセストークンを手動発行する
+「設定 > API」で、自分のアクセストークンを発行できます。
+
+[「APIの使い方」へ進む](#APIの使い方)
+
+### アプリケーション利用者にアクセストークンの発行をリクエストする
+アプリケーション利用者のアクセストークンを取得するには、以下の手順で発行をリクエストします。
+
+#### Step 1
+
+UUIDを生成する。以後これをセッションIDと呼びます。
+
+> このセッションIDは毎回生成し、使いまわさないようにしてください。
+
+#### Step 2
+
+`{_URL_}/miauth/{session}`をユーザーのブラウザで表示させる。`{session}`の部分は、セッションIDに置き換えてください。
+> 例: `{_URL_}/miauth/c1f6d42b-468b-4fd2-8274-e58abdedef6f`
+
+表示する際、URLにクエリパラメータとしていくつかのオプションを設定できます:
+* `name` ... アプリケーション名
+    * > 例: `MissDeck`
+* `icon` ... アプリケーションのアイコン画像URL
+    * > 例: `https://missdeck.example.com/icon.png`
+* `callback` ... 認証が終わった後にリダイレクトするURL
+    * > 例: `https://missdeck.example.com/callback`
+    * リダイレクト時には、`session`というクエリパラメータでセッションIDが付きます
+* `permission` ... アプリケーションが要求する権限
+    * > 例: `write:notes,write:following,read:drive`
+    * 要求する権限を`,`で区切って列挙します
+    * どのような権限があるかは[APIリファレンス](/api-doc)で確認できます
+
+#### Step 3
+ユーザーが発行を許可した後、`{_URL_}/api/miauth/{session}/check`にPOSTリクエストすると、レスポンスとしてアクセストークンを含むJSONが返ります。
+
+レスポンスに含まれるプロパティ:
+* `token` ... ユーザーのアクセストークン
+* `user` ... ユーザーの情報
+
+[「APIの使い方」へ進む](#APIの使い方)
+
+## APIの使い方
+**APIはすべてPOSTで、リクエスト/レスポンスともにJSON形式です。RESTではありません。** アクセストークンは、`i`というパラメータ名でリクエストに含めます。
+
+* [APIリファレンス](/api-doc)
+* [ストリーミングAPI](./stream)
diff --git a/src/docs/ar-SA/advanced/create-plugin.md b/src/docs/ar-SA/advanced/create-plugin.md
new file mode 100644
index 0000000000..a6cba6388a
--- /dev/null
+++ b/src/docs/ar-SA/advanced/create-plugin.md
@@ -0,0 +1,74 @@
+# プラグインの作成
+Misskey Webクライアントのプラグイン機能を使うと、クライアントを拡張し、様々な機能を追加できます。 ここではプラグインの作成にあたってのメタデータ定義や、AiScript APIリファレンスを掲載します。
+
+## البيانات الوصفية
+プラグインは、AiScriptのメタデータ埋め込み機能を使って、デフォルトとしてプラグインのメタデータを定義する必要があります。 メタデータは次のプロパティを含むオブジェクトです。
+
+### name
+プラグイン名
+
+### author
+プラグイン作者
+
+### version
+プラグインバージョン。数値を指定してください。
+
+### description
+プラグインの説明
+
+### permissions
+プラグインが要求する権限。MisskeyAPIにリクエストする際に用いられます。
+
+### config
+プラグインの設定情報を表すオブジェクト。 キーに設定名、値に以下のプロパティを含めます。
+
+#### type
+設定値の種類を表す文字列。以下から選択します。 string number boolean
+
+#### label
+ユーザーに表示する設定名
+
+#### description
+設定の説明
+
+#### default
+設定のデフォルト値
+
+## APIリファレンス
+AiScript標準で組み込まれているAPIは掲載しません。
+
+### Mk:dialog(title text type)
+ダイアログを表示します。typeには以下の値が設定できます。 info success warn error question 省略すると info になります。
+
+### Mk:confirm(title text type)
+確認ダイアログを表示します。typeには以下の値が設定できます。 info success warn error question 省略すると question になります。 ユーザーが"OK"を選択した場合は true を、"キャンセル"を選択した場合は false が返ります。
+
+### Mk:api(endpoint params)
+Misskey APIにリクエストします。第一引数にエンドポイント名、第二引数にパラメータオブジェクトを渡します。
+
+### Mk:save(key value)
+任意の値に任意の名前を付けて永続化します。永続化した値は、AiScriptコンテキストが終了しても残り、Mk:loadで読み取ることができます。
+
+### Mk:load(key)
+Mk:saveで永続化した指定の名前の値を読み取ります。
+
+### Plugin:register_post_form_action(title fn)
+投稿フォームにアクションを追加します。第一引数にアクション名、第二引数にアクションが選択された際のコールバック関数を渡します。 コールバック関数には、第一引数に投稿フォームオブジェクトが渡されます。
+
+### Plugin:register_note_action(title fn)
+ノートメニューに項目を追加します。第一引数に項目名、第二引数に項目が選択された際のコールバック関数を渡します。 コールバック関数には、第一引数に対象のノートオブジェクトが渡されます。
+
+### Plugin:register_user_action(title fn)
+ユーザーメニューに項目を追加します。第一引数に項目名、第二引数に項目が選択された際のコールバック関数を渡します。 コールバック関数には、第一引数に対象のユーザーオブジェクトが渡されます。
+
+### Plugin:register_note_view_interruptor(fn)
+UIに表示されるノート情報を書き換えます。 コールバック関数には、第一引数に対象のノートオブジェクトが渡されます。 コールバック関数の返り値でノートが書き換えられます。
+
+### Plugin:register_note_post_interruptor(fn)
+ノート投稿時にノート情報を書き換えます。 コールバック関数には、第一引数に対象のノートオブジェクトが渡されます。 コールバック関数の返り値でノートが書き換えられます。
+
+### Plugin:open_url(url)
+第一引数に渡されたURLをブラウザの新しいタブで開きます。
+
+### Plugin:config
+プラグインの設定が格納されるオブジェクト。プラグイン定義のconfigで設定したキーで値が入ります。
diff --git a/src/docs/ar-SA/advanced/develop-bot.md b/src/docs/ar-SA/advanced/develop-bot.md
new file mode 100644
index 0000000000..7f825e9bc4
--- /dev/null
+++ b/src/docs/ar-SA/advanced/develop-bot.md
@@ -0,0 +1,6 @@
+# Botの作成
+[Misskey API](./api)を利用してBotの開発が可能です。 また、いくつかのBot実装が公開されているため、ぜひ参考にしてください。
+
+- [syuilo/ai](https://github.com/syuilo/ai) ... Node.js上で動く、TypeScript製Bot実装
+
+Botを作成したときは、プロフィール設定からBotフラグをオンにしておくことを強くおすすめします。
diff --git a/src/docs/ar-SA/advanced/reversi-bot.md b/src/docs/ar-SA/advanced/reversi-bot.md
new file mode 100644
index 0000000000..7ab2a7212e
--- /dev/null
+++ b/src/docs/ar-SA/advanced/reversi-bot.md
@@ -0,0 +1,160 @@
+# MisskeyリバーシBotの開発
+Misskeyのリバーシ機能に対応したBotの開発方法をここに記します。
+
+1. `games/reversi`ストリームに以下のパラメータを付けて接続する:
+    * `i`: botアカウントのAPIキー
+
+2. 対局への招待が来たら、ストリームから`invited`イベントが流れてくる
+    * イベントの中身に、`parent`という名前で対局へ誘ってきたユーザーの情報が含まれている
+
+3. `games/reversi/match`へ、`user_id`として`parent`の`id`が含まれたリクエストを送信する
+
+4. 上手くいくとゲーム情報が返ってくるので、`games/reversi-game`ストリームへ、以下のパラメータを付けて接続する:
+    * `i`: botアカウントのAPIキー
+    * `game`: `game`の`id`
+
+5. この間、相手がゲームの設定を変更するとその都度`update-settings`イベントが流れてくるので、必要であれば何かしらの処理を行う
+
+6. 設定に満足したら、`{ type: 'accept' }`メッセージをストリームに送信する
+
+7. ゲームが開始すると、`started`イベントが流れてくる
+    * イベントの中身にはゲーム情報が含まれている
+
+8. 石を打つには、ストリームに`{ type: 'set', pos: <位置> }`を送信する(位置の計算方法は後述)
+
+9. 相手または自分が石を打つと、ストリームから`set`イベントが流れてくる
+    * `color`として石の色が含まれている
+    * `pos`として位置情報が含まれている
+
+## 位置の計算法
+8x8のマップを考える場合、各マスの位置(インデックスと呼びます)は次のようになっています:
+```
++--+--+--+--+--+--+--+--+
+| 0| 1| 2| 3| 4| 5| 6| 7|
++--+--+--+--+--+--+--+--+
+| 8| 9|10|11|12|13|14|15|
++--+--+--+--+--+--+--+--+
+|16|17|18|19|20|21|22|23|
+...
+```
+
+### X,Y座標 から インデックス に変換する
+```
+pos = x + (y * mapWidth)
+```
+`mapWidth`は、ゲーム情報の`map`から、次のようにして計算できます:
+```
+mapWidth = map[0].length
+```
+
+### インデックス から X,Y座標 に変換する
+```
+x = pos % mapWidth
+y = Math.floor(pos / mapWidth)
+```
+
+## マップ情報
+マップ情報は、ゲーム情報の`map`に入っています。 文字列の配列になっており、ひとつひとつの文字がマス情報を表しています。 それをもとにマップのデザインを知る事が出来ます:
+* `(スペース)` ... マス無し
+* `-` ... マス
+* `b` ... 初期配置される黒石
+* `w` ... 初期配置される白石
+
+例えば、4*4の次のような単純なマップがあるとします:
+```text
++---+---+---+---+
+|   |   |   |   |
++---+---+---+---+
+|   | ○ | ● |   |
++---+---+---+---+
+|   | ● | ○ |   |
++---+---+---+---+
+|   |   |   |   |
++---+---+---+---+
+```
+
+この場合、マップデータはこのようになります:
+```javascript
+['----', '-wb-', '-bw-', '----']
+```
+
+## ユーザーにフォームを提示して対話可能Botを作成する
+ユーザーとのコミュニケーションを行うため、ゲームの設定画面でユーザーにフォームを提示することができます。 例えば、Botの強さをユーザーが設定できるようにする、といったシナリオが考えられます。
+
+フォームを提示するには、`reversi-game`ストリームに次のメッセージを送信します:
+```javascript
+{
+  type: 'init-form',
+  body: [フォームコントロールの配列]
+}
+```
+
+フォームコントロールの配列については今から説明します。 フォームコントロールは、次のようなオブジェクトです:
+```javascript
+{
+  id: 'switch1',
+  type: 'switch',
+  label: 'Enable hoge',
+  value: false
+}
+```
+`id` ... コントロールのID。 `type` ... コントロールの種類。後述します。 `label` ... コントロールと一緒に表記するテキスト。 `value` ... コントロールのデフォルト値。
+
+### フォームの操作を受け取る
+ユーザーがフォームを操作すると、ストリームから`update-form`イベントが流れてきます。 イベントの中身には、コントロールのIDと、ユーザーが設定した値が含まれています。 例えば、上で示したスイッチをユーザーがオンにしたとすると、次のイベントが流れてきます:
+```javascript
+{
+  id: 'switch1',
+  value: true
+}
+```
+
+### フォームコントロールの種類
+#### スイッチ
+type: `switch` スイッチを表示します。何かの機能をオン/オフさせたい場合に有用です。
+
+##### プロパティ
+`label` ... スイッチに表記するテキスト。
+
+#### ラジオボタン
+type: `radio` ラジオボタンを表示します。選択肢を提示するのに有用です。例えば、Botの強さを設定させるなどです。
+
+##### プロパティ
+`items` ... ラジオボタンの選択肢。例:
+```javascript
+items: [{
+  label: 'å¼±',
+  value: 1
+}, {
+  label: '中',
+  value: 2
+}, {
+  label: 'å¼·',
+  value: 3
+}]
+```
+
+#### スライダー
+type: `slider` スライダーを表示します。
+
+##### プロパティ
+`min` ... スライダーの下限。 `max` ... スライダーの上限。 `step` ... 入力欄で刻むステップ値。
+
+#### テキストボックス
+type: `textbox` テキストボックスを表示します。ユーザーになにか入力させる一般的な用途に利用できます。
+
+## ユーザーにメッセージを表示する
+設定画面でユーザーと対話する、フォーム以外のもうひとつの方法がこれです。ユーザーになにかメッセージを表示することができます。 例えば、ユーザーがBotの対応していないモードやマップを選択したとき、警告を表示するなどです。 メッセージを表示するには、次のメッセージをストリームに送信します:
+```javascript
+{
+  type: 'message',
+  body: {
+    text: 'メッセージ内容',
+    type: 'メッセージの種類'
+  }
+}
+```
+メッセージの種類: `success`, `info`, `warning`, `error`。
+
+## 投了する
+投了をするには、<a href="./api/endpoints/games/reversi/games/surrender">このエンドポイント</a>にリクエストします。
diff --git a/src/docs/ar-SA/advanced/stream.md b/src/docs/ar-SA/advanced/stream.md
new file mode 100644
index 0000000000..0e5edd2b0c
--- /dev/null
+++ b/src/docs/ar-SA/advanced/stream.md
@@ -0,0 +1,350 @@
+# ストリーミングAPI
+
+ストリーミングAPIを使うと、リアルタイムで様々な情報(例えばタイムラインに新しい投稿が流れてきた、メッセージが届いた、フォローされた、など)を受け取ったり、様々な操作を行ったりすることができます。
+
+## ストリームに接続する
+
+ストリーミングAPIを利用するには、まずMisskeyサーバーに**websocket**接続する必要があります。
+
+以下のURLに、`i`というパラメータ名で認証情報を含めて、websocket接続してください。例:
+```
+%WS_URL%/streaming?i=xxxxxxxxxxxxxxx
+```
+
+認証情報は、自分のAPIキーや、アプリケーションからストリームに接続する際はユーザーのアクセストークンのことを指します。
+
+<div class="info">ℹ️ 認証情報の取得については、<a href="./api">こちらのドキュメント</a>をご確認ください。</div>
+
+---
+
+認証情報は省略することもできますが、その場合非ログインでの利用ということになり、受信できる情報や可能な操作は限られます。例:
+
+```
+%WS_URL%/streaming
+```
+
+---
+
+ストリームに接続すると、後述するAPI操作や、投稿の購読を行ったりすることができます。 しかしまだこの段階では、例えばタイムラインへの新しい投稿を受信したりすることはできません。 それを行うには、ストリーム上で、後述する**チャンネル**に接続する必要があります。
+
+**ストリームでのやり取りはすべてJSONです。**
+
+## チャンネル
+MisskeyのストリーミングAPIにはチャンネルという概念があります。これは、送受信する情報を分離するための仕組みです。 Misskeyのストリームに接続しただけでは、まだリアルタイムでタイムラインの投稿を受信したりはできません。 ストリーム上でチャンネルに接続することで、様々な情報を受け取ったり情報を送信したりすることができるようになります。
+
+ひとつのストリーム上で、同時に複数のチャンネルに接続することができます。
+
+### チャンネルに接続する
+チャンネルに接続するには、次のようなデータをJSONでストリームに送信します:
+
+```json
+{
+    type: 'connect',
+    body: {
+        channel: 'xxxxxxxx',
+        id: 'foobar',
+        params: {
+            ...
+        }
+    }
+}
+```
+
+ここで、
+* `channel`には接続したいチャンネル名を設定します。チャンネルの種類については後述します。
+* `id`にはそのチャンネルとやり取りするための任意のIDを設定します。ストリームでは様々なメッセージが流れるので、そのメッセージがどのチャンネルからのものなのか識別する必要があるからです。このIDは、UUIDや、乱数のようなもので構いません。
+* `params`はチャンネルに接続する際のパラメータです。チャンネルによって接続時に必要とされるパラメータは異なります。パラメータ不要のチャンネルに接続する際は、このプロパティは省略可能です。
+
+<div class="info">ℹ️ IDはチャンネルごとではなく「チャンネルの接続ごと」です。なぜなら、同じチャンネルに異なるパラメータで複数接続するケースもあるからです。</div>
+
+### チャンネルからのメッセージを受け取る
+例えばタイムラインのチャンネルなら、新しい投稿があった時にメッセージを発します。そのメッセージを受け取ることで、タイムラインに新しい投稿がされたことをリアルタイムで知ることができます。
+
+チャンネルがメッセージを発すると、次のようなデータがJSONでストリームに流れてきます:
+```json
+{
+    type: 'channel',
+    body: {
+        id: 'foobar',
+        type: 'something',
+        body: {
+            some: 'thing'
+        }
+    }
+}
+```
+
+ここで、
+* `id`には前述したそのチャンネルに接続する際に設定したIDが設定されています。これで、このメッセージがどのチャンネルからのものなのか知ることができます。
+* `type`にはメッセージの種類が設定されます。チャンネルによって、どのような種類のメッセージが流れてくるかは異なります。
+* `body`にはメッセージの内容が設定されます。チャンネルによって、どのような内容のメッセージが流れてくるかは異なります。
+
+### チャンネルに向けてメッセージを送信する
+チャンネルによっては、メッセージを受け取るだけでなく、こちらから何かメッセージを送信し、何らかの操作を行える場合があります。
+
+チャンネルにメッセージを送信するには、次のようなデータをJSONでストリームに送信します:
+```json
+{
+    type: 'channel',
+    body: {
+        id: 'foobar',
+        type: 'something',
+        body: {
+            some: 'thing'
+        }
+    }
+}
+```
+
+ここで、
+* `id`には前述したそのチャンネルに接続する際に設定したIDを設定します。これで、このメッセージがどのチャンネルに向けたものなのか識別させることができます。
+* `type`にはメッセージの種類を設定します。チャンネルによって、どのような種類のメッセージを受け付けるかは異なります。
+* `body`にはメッセージの内容を設定します。チャンネルによって、どのような内容のメッセージを受け付けるかは異なります。
+
+### チャンネルから切断する
+チャンネルから切断するには、次のようなデータをJSONでストリームに送信します:
+
+```json
+{
+    type: 'disconnect',
+    body: {
+        id: 'foobar'
+    }
+}
+```
+
+ここで、
+* `id`には前述したそのチャンネルに接続する際に設定したIDを設定します。
+
+## ストリームを経由してAPIリクエストする
+
+ストリームを経由してAPIリクエストすると、HTTPリクエストを発生させずにAPIを利用できます。そのため、コードを簡潔にできたり、パフォーマンスの向上を見込めるかもしれません。
+
+ストリームを経由してAPIリクエストするには、次のようなデータをJSONでストリームに送信します:
+```json
+{
+    type: 'api',
+    body: {
+        id: 'xxxxxxxxxxxxxxxx',
+        endpoint: 'notes/create',
+        data: {
+            text: 'yee haw!'
+        }
+    }
+}
+```
+
+ここで、
+* `id`には、APIのレスポンスを識別するための、APIリクエストごとの一意なIDを設定する必要があります。UUIDや、簡単な乱数のようなもので構いません。
+* `endpoint`には、あなたがリクエストしたいAPIのエンドポイントを指定します。
+* `data`には、エンドポイントのパラメータを含めます。
+
+<div class="info">ℹ️ APIのエンドポイントやパラメータについてはAPIリファレンスをご確認ください。</div>
+
+### レスポンスの受信
+
+APIへリクエストすると、レスポンスがストリームから次のような形式で流れてきます。
+
+```json
+{
+    type: 'api:xxxxxxxxxxxxxxxx',
+    body: {
+        ...
+    }
+}
+```
+
+ここで、
+* `xxxxxxxxxxxxxxxx`の部分には、リクエストの際に設定された`id`が含まれています。これにより、どのリクエストに対するレスポンスなのか判別することができます。
+* `body`には、レスポンスが含まれています。
+
+## 投稿のキャプチャ
+
+Misskeyは投稿のキャプチャと呼ばれる仕組みを提供しています。これは、指定した投稿のイベントをストリームで受け取る機能です。
+
+例えばタイムラインを取得してユーザーに表示したとします。ここで誰かがそのタイムラインに含まれるどれかの投稿に対してリアクションしたとします。
+
+しかし、クライアントからするとある投稿にリアクションが付いたことなどは知る由がないため、リアルタイムでリアクションをタイムライン上の投稿に反映して表示するといったことができません。
+
+この問題を解決するために、Misskeyは投稿のキャプチャ機構を用意しています。投稿をキャプチャすると、その投稿に関するイベントを受け取ることができるため、リアルタイムでリアクションを反映させたりすることが可能になります。
+
+### 投稿をキャプチャする
+
+投稿をキャプチャするには、ストリームに次のようなメッセージを送信します:
+
+```json
+{
+    type: 'subNote',
+    body: {
+        id: 'xxxxxxxxxxxxxxxx'
+    }
+}
+```
+
+ここで、
+* `id`にキャプチャしたい投稿の`id`を設定します。
+
+このメッセージを送信すると、Misskeyにキャプチャを要請したことになり、以後、その投稿に関するイベントが流れてくるようになります。
+
+例えば投稿にリアクションが付いたとすると、次のようなメッセージが流れてきます:
+
+```json
+{
+    type: 'noteUpdated',
+    body: {
+        id: 'xxxxxxxxxxxxxxxx',
+        type: 'reacted',
+        body: {
+            reaction: 'like',
+            userId: 'yyyyyyyyyyyyyyyy'
+        }
+    }
+}
+```
+
+ここで、
+* `body`内の`id`に、イベントを発生させた投稿のIDが設定されます。
+* `body`内の`type`に、イベントの種類が設定されます。
+* `body`内の`body`に、イベントの詳細が設定されます。
+
+#### イベントの種類
+
+##### `reacted`
+その投稿にリアクションがされた時に発生します。
+
+* `reaction`に、リアクションの種類が設定されます。
+* `userId`に、リアクションを行ったユーザーのIDが設定されます。
+
+例:
+```json
+{
+    type: 'noteUpdated',
+    body: {
+        id: 'xxxxxxxxxxxxxxxx',
+        type: 'reacted',
+        body: {
+            reaction: 'like',
+            userId: 'yyyyyyyyyyyyyyyy'
+        }
+    }
+}
+```
+
+##### `deleted`
+その投稿が削除された時に発生します。
+
+* `deletedAt`に、削除日時が設定されます。
+
+例:
+```json
+{
+    type: 'noteUpdated',
+    body: {
+        id: 'xxxxxxxxxxxxxxxx',
+        type: 'deleted',
+        body: {
+            deletedAt: '2018-10-22T02:17:09.703Z'
+        }
+    }
+}
+```
+
+##### `pollVoted`
+その投稿に添付されたアンケートに投票された時に発生します。
+
+* `choice`に、選択肢IDが設定されます。
+* `userId`に、投票を行ったユーザーのIDが設定されます。
+
+例:
+```json
+{
+    type: 'noteUpdated',
+    body: {
+        id: 'xxxxxxxxxxxxxxxx',
+        type: 'pollVoted',
+        body: {
+            choice: 2,
+            userId: 'yyyyyyyyyyyyyyyy'
+        }
+    }
+}
+```
+
+### 投稿のキャプチャを解除する
+
+その投稿がもう画面に表示されなくなったりして、その投稿に関するイベントをもう受け取る必要がなくなったときは、キャプチャの解除を申請してください。
+
+次のメッセージを送信します:
+
+```json
+{
+    type: 'unsubNote',
+    body: {
+        id: 'xxxxxxxxxxxxxxxx'
+    }
+}
+```
+
+ここで、
+* `id`にキャプチャを解除したい投稿の`id`を設定します。
+
+このメッセージを送信すると、以後、その投稿に関するイベントは流れてこないようになります。
+
+# チャンネル一覧
+## `main`
+アカウントに関する基本的な情報が流れてきます。このチャンネルにパラメータはありません。
+
+### 流れてくるイベント一覧
+
+#### `renote`
+自分の投稿がRenoteされた時に発生するイベントです。自分自身の投稿をRenoteしたときは発生しません。
+
+#### `mention`
+誰かからメンションされたときに発生するイベントです。
+
+#### `readAllNotifications`
+自分宛ての通知がすべて既読になったことを表すイベントです。このイベントを利用して、「通知があることを示すアイコン」のようなものをオフにしたりする等のケースが想定されます。
+
+#### `meUpdated`
+自分の情報が更新されたことを表すイベントです。
+
+#### `follow`
+自分が誰かをフォローしたときに発生するイベントです。
+
+#### `unfollow`
+自分が誰かのフォローを解除したときに発生するイベントです。
+
+#### `followed`
+自分が誰かにフォローされたときに発生するイベントです。
+
+## `homeTimeline`
+ホームタイムラインの投稿情報が流れてきます。このチャンネルにパラメータはありません。
+
+### 流れてくるイベント一覧
+
+#### `note`
+タイムラインに新しい投稿が流れてきたときに発生するイベントです。
+
+## `localTimeline`
+ローカルタイムラインの投稿情報が流れてきます。このチャンネルにパラメータはありません。
+
+### 流れてくるイベント一覧
+
+#### `note`
+ローカルタイムラインに新しい投稿が流れてきたときに発生するイベントです。
+
+## `hybridTimeline`
+ソーシャルタイムラインの投稿情報が流れてきます。このチャンネルにパラメータはありません。
+
+### 流れてくるイベント一覧
+
+#### `note`
+ソーシャルタイムラインに新しい投稿が流れてきたときに発生するイベントです。
+
+## `globalTimeline`
+グローバルタイムラインの投稿情報が流れてきます。このチャンネルにパラメータはありません。
+
+### 流れてくるイベント一覧
+
+#### `note`
+グローバルタイムラインに新しい投稿が流れてきたときに発生するイベントです。
diff --git a/src/docs/ar-SA/features/antenna.md b/src/docs/ar-SA/features/antenna.md
new file mode 100644
index 0000000000..0cb6db82c5
--- /dev/null
+++ b/src/docs/ar-SA/features/antenna.md
@@ -0,0 +1,4 @@
+# الهوائيات
+アンテナは、自由に条件を設定して、合致するノートを自動で収集することができる機能です。
+
+条件を設定したアンテナが作成された状態で、条件に合致するノートが投稿されると、リアルタイムでそのアンテナのタイムラインにノートが追加されます。
diff --git a/src/docs/ar-SA/features/custom-emoji.md b/src/docs/ar-SA/features/custom-emoji.md
new file mode 100644
index 0000000000..b86b191d19
--- /dev/null
+++ b/src/docs/ar-SA/features/custom-emoji.md
@@ -0,0 +1,2 @@
+# إيموجي مخصص
+カスタム絵文字は、インスタンスで用意された画像を絵文字のように使える機能です。 ノート、リアクション、チャット、自己紹介、名前などの場所で使うことができます。 カスタム絵文字をそれらの場所で使うには、絵文字ピッカーボタン(ある場合)を押すか、`:`を入力して絵文字サジェストを表示します。 テキスト内に`:foo:`のような形式の文字列が見つかると、`foo`の部分がカスタム絵文字名と解釈され、表示時には対応したカスタム絵文字に置き換わります。
diff --git a/src/docs/ar-SA/features/deck.md b/src/docs/ar-SA/features/deck.md
new file mode 100644
index 0000000000..8057e262fd
--- /dev/null
+++ b/src/docs/ar-SA/features/deck.md
@@ -0,0 +1,18 @@
+# デッキ
+
+デッキは利用可能なUIのひとつです。「カラム」と呼ばれるビューを複数並べて表示させることで、カスタマイズ性が高く、情報量の多いUIが構築できることが特徴です。
+
+## カラムの追加
+デッキの背景を右クリックし、「カラムを追加」して任意のカラムを追加できます。
+
+## カラムの移動
+カラムは、ドラッグアンドドロップで他のカラムと位置を入れ替えることが出来るほか、カラムメニュー(カラムのヘッダー右クリック)から位置を移動させることもできます。
+
+## カラムの水平分割
+カラムは左右だけでなく、上下に並べることもできます。 カラムメニューを開き、「左に重ねる」を選択すると、左のカラムの下に現在のカラムが移動します。 上下分割を解除するには、カラムメニューの「右に出す」を選択します。
+
+## カラムの設定
+カラムメニューの「編集」を選択するとカラムの設定を編集できます。カラムの名前を変えたり、幅を変えたりできます。
+
+## デッキの設定
+デッキに関する設定は、[settings/deck](/settings/deck)で行えます。
diff --git a/src/docs/ar-SA/features/drive.md b/src/docs/ar-SA/features/drive.md
new file mode 100644
index 0000000000..f107cb8c56
--- /dev/null
+++ b/src/docs/ar-SA/features/drive.md
@@ -0,0 +1,17 @@
+# قرص التخرين
+ドライブは、Misskey上でファイルを管理できる機能です。
+
+[ドライブのページ](/my/drive)から任意のファイルをアップロードできるほか、アバターに設定した画像や、ノートに添付したファイルなどもすべてドライブにアップロードされます。
+
+<div class="warn">⚠️ ドライブからファイルを削除すると、そのファイルが添付されたノートも消えます。</div>
+
+ドライブにアップロードされたファイルは、いつでもダウンロードすることができるほか、ノート作成時に「ドライブからファイルを添付」することでファイルを再利用することもできます。
+
+ドライブ内にフォルダを作り、複数のファイルをまとめて整理することもできます。
+
+## 閲覧注意 (NSFW)
+<div class="info">ℹ️ この項目が閲覧注意なわけではありません</div>
+
+閲覧注意またはNSFW (Not safe for work) は、ドライブのファイルに設定することができるフラグです。 閲覧注意フラグを設定されたファイルは、表示される際に閲覧者の操作なしには表示されなくなります。 このフラグは、例えば職場や公共の場で閲覧するのに適切でないと思われる画像などに設定し、そのような画像が突然表示されてしまうことを防ぐ目的で使われます。
+
+このフラグは手動でオンオフを切り替えられるほか、モデレーターの判断で設定される場合もあります。
diff --git a/src/docs/ar-SA/features/favorite.md b/src/docs/ar-SA/features/favorite.md
new file mode 100644
index 0000000000..1554291f1b
--- /dev/null
+++ b/src/docs/ar-SA/features/favorite.md
@@ -0,0 +1,4 @@
+# إضافة إلى المفضلة
+[ノート](./node)をお気に入りとして登録できる機能です。 お気に入り登録したノートは、[お気に入りページ](./my/favorites)で一覧することができます。 お気に入りに登録したことは相手に通知されず、お気に入りは自分しか見ることができません。
+
+ノートをお気に入り登録するには、ノートメニューの「お気に入り」を押します。お気に入り解除するには、ノートメニューの「お気に入り解除」を押します。
diff --git a/src/docs/ar-SA/features/follow.md b/src/docs/ar-SA/features/follow.md
new file mode 100644
index 0000000000..9b6562be94
--- /dev/null
+++ b/src/docs/ar-SA/features/follow.md
@@ -0,0 +1,2 @@
+# المتابَعون
+ユーザーをフォローすると、タイムラインにそのユーザーの投稿が表示されるようになります。ただし、他のユーザーに対する返信は含まれません。 ユーザーをフォローするには、ユーザーページの「フォロー」ボタンをクリックします。フォローを解除するには、もう一度クリックします。
diff --git a/src/docs/ar-SA/features/keyboard-shortcut.md b/src/docs/ar-SA/features/keyboard-shortcut.md
new file mode 100644
index 0000000000..3c73013c03
--- /dev/null
+++ b/src/docs/ar-SA/features/keyboard-shortcut.md
@@ -0,0 +1,66 @@
+# キーボードショートカット
+
+## الشامل
+これらのショートカットは基本的にどこでも使えます。
+<table>
+    <thead>
+        <tr><th>ショートカット</th><th>効果</th><th>由来</th></tr>
+    </thead>
+    <tbody>
+        <tr><td><kbd class="key">P</kbd>, <kbd class="key">N</kbd></td><td>新規投稿</td><td><b>P</b>ost, <b>N</b>ew, <b>N</b>ote</td></tr>
+        <tr><td><kbd class="key">T</kbd></td><td>タイムラインの最も新しい投稿にフォーカス</td><td><b>T</b>imeline, <b>T</b>op</td></tr>
+        <tr><td><kbd class="group"><kbd class="key">Shift</kbd> + <kbd class="key">N</kbd></kbd></td><td>通知を表示/隠す</td><td><b>N</b>otifications</td></tr>
+        <tr><td><kbd class="key">S</kbd></td><td>البحث</td><td><b>S</b>earch</td></tr>
+        <tr><td><kbd class="key">H</kbd>, <kbd class="key">?</kbd></td><td>ヘルプを表示</td><td><b>H</b>elp</td></tr>
+    </tbody>
+</table>
+
+## 投稿にフォーカスされた状態
+<table>
+    <thead>
+        <tr><th>ショートカット</th><th>効果</th><th>由来</th></tr>
+    </thead>
+    <tbody>
+        <tr><td><kbd class="key">↑</kbd>, <kbd class="key">K</kbd>, <kbd class="group"><kbd class="key">Shift</kbd> + <kbd class="key">Tab</kbd></kbd></td><td>上の投稿にフォーカスを移動</td><td>-</td></tr>
+        <tr><td><kbd class="key">↓</kbd>, <kbd class="key">J</kbd>, <kbd class="key">Tab</kbd></td><td>下の投稿にフォーカスを移動</td><td>-</td></tr>
+        <tr><td><kbd class="key">R</kbd></td><td>返信フォームを開く</td><td><b>R</b>eply</td></tr>
+        <tr><td><kbd class="key">Q</kbd></td><td>Renoteフォームを開く</td><td><b>Q</b>uote</td></tr>
+        <tr><td><kbd class="group"><kbd class="key">Ctrl</kbd> + <kbd class="key">Q</kbd></kbd></td><td>即刻Renoteする(フォームを開かずに)</td><td>-</td></tr>
+        <tr><td><kbd class="key">E</kbd>, <kbd class="key">A</kbd>, <kbd class="key">+</kbd></td><td>リアクションフォームを開く</td><td><b>E</b>mote, re<b>A</b>ction</td></tr>
+        <tr><td><kbd class="key">0</kbd>~<kbd class="key">9</kbd></td><td>数字に対応したリアクションをする(対応については後述)</td><td>-</td></tr>
+        <tr><td><kbd class="key">F</kbd>, <kbd class="key">B</kbd></td><td>お気に入りに登録</td><td><b>F</b>avorite, <b>B</b>ookmark</td></tr>
+        <tr><td><kbd class="key">Del</kbd>, <kbd class="group"><kbd class="key">Ctrl</kbd> + <kbd class="key">D</kbd></kbd></td><td>投稿を削除</td><td><b>D</b>elete</tr>
+        <tr><td><kbd class="key">M</kbd>, <kbd class="key">O</kbd></td><td>投稿に対するメニューを開く</td><td><b>M</b>ore, <b>O</b>ther</td></tr>
+        <tr><td><kbd class="key">S</kbd></td><td>CWで隠された部分を表示 or 隠す</td><td><b>S</b>how, <b>S</b>ee</td></tr>
+        <tr><td><kbd class="key">Esc</kbd></td><td>フォーカスを外す</td><td>-</td></tr>
+    </tbody>
+</table>
+
+## Renoteフォーム
+<table>
+    <thead>
+        <tr><th>ショートカット</th><th>効果</th><th>由来</th></tr>
+    </thead>
+    <tbody>
+        <tr><td><kbd class="key">Enter</kbd></td><td>Renoteする</td><td>-</td></tr>
+        <tr><td><kbd class="key">Q</kbd></td><td>フォームを展開する</td><td><b>Q</b>uote</td></tr>
+        <tr><td><kbd class="key">Esc</kbd></td><td>フォームを閉じる</td><td>-</td></tr>
+    </tbody>
+</table>
+
+## リアクションフォーム
+デフォルトで「👍」にフォーカスが当たっている状態です。
+<table>
+    <thead>
+        <tr><th>ショートカット</th><th>効果</th><th>由来</th></tr>
+    </thead>
+    <tbody>
+        <tr><td><kbd class="key">↑</kbd>, <kbd class="key">K</kbd></td><td>上のリアクションにフォーカスを移動</td><td>-</td></tr>
+        <tr><td><kbd class="key">↓</kbd>, <kbd class="key">J</kbd></td><td>下のリアクションにフォーカスを移動</td><td>-</td></tr>
+        <tr><td><kbd class="key">←</kbd>, <kbd class="key">H</kbd>, <kbd class="group"><kbd class="key">Shift</kbd> + <kbd class="key">Tab</kbd></kbd></td><td>左のリアクションにフォーカスを移動</td><td>-</td></tr>
+        <tr><td><kbd class="key">→</kbd>, <kbd class="key">L</kbd>, <kbd class="key">Tab</kbd></td><td>右のリアクションにフォーカスを移動</td><td>-</td></tr>
+        <tr><td><kbd class="key">Enter</kbd>, <kbd class="key">Space</kbd>, <kbd class="key">+</kbd></td><td>リアクション確定</td><td>-</td></tr>
+        <tr><td><kbd class="key">0</kbd>~<kbd class="key">9</kbd></td><td>数字に対応したリアクションで確定</td><td>-</td></tr>
+        <tr><td><kbd class="key">Esc</kbd></td><td>リアクションするのをやめる</td><td>-</td></tr>
+    </tbody>
+</table>
diff --git a/src/docs/ar-SA/features/mfm.md b/src/docs/ar-SA/features/mfm.md
new file mode 100644
index 0000000000..5be2df4f30
--- /dev/null
+++ b/src/docs/ar-SA/features/mfm.md
@@ -0,0 +1,12 @@
+# MFM
+MFMは、Misskey Flavored Markdownの略で、Misskeyの様々な場所で使用できる専用のマークアップ言語です。 MFMで使用可能な構文は[MFMチートシート](/mfm-cheat-sheet)で確認できます。
+
+## MFMが使用可能な場所の例
+- ノート本文
+- CW注釈
+- ユーザーの名前
+- ユーザーの自己紹介
+
+## 開発者向け情報
+MFMのパーサー実装はライブラリとして公開されており、簡単にクライアントにMFMを組み込むことが可能です。
+- [misskey-dev/mfm.js](https://github.com/misskey-dev/mfm.js) - JavaScriptパーサー実装
diff --git a/src/docs/ar-SA/features/mute.md b/src/docs/ar-SA/features/mute.md
new file mode 100644
index 0000000000..c04ebcfd72
--- /dev/null
+++ b/src/docs/ar-SA/features/mute.md
@@ -0,0 +1,13 @@
+# اكتم
+
+ユーザーをミュートすると、そのユーザーに関する次のコンテンツがMisskeyに表示されなくなります:
+
+* タイムラインや投稿の検索結果内の、そのユーザーの投稿(およびそれらの投稿に対する返信やRenote)
+* そのユーザーからの通知
+* メッセージ履歴一覧内の、そのユーザーとのメッセージ履歴
+
+ユーザーをミュートするには、対象のユーザーのユーザーページに表示されている「ミュート」ボタンを押します。
+
+ミュートを行ったことは相手に通知されず、ミュートされていることを知ることもできません。
+
+設定>ミュート から、自分がミュートしているユーザー一覧を確認することができます。
diff --git a/src/docs/ar-SA/features/note.md b/src/docs/ar-SA/features/note.md
new file mode 100644
index 0000000000..38f0697372
--- /dev/null
+++ b/src/docs/ar-SA/features/note.md
@@ -0,0 +1,51 @@
+# الملاحظات
+ノートは、Misskeyに投稿される、文章、ファイル、アンケートなどを含むコンテンツで、Misskeyの中心的概念です。また、そのノートを作成する行為自体もノートと呼ばれます。
+
+ノートが作成されると、[タイムライン](./timeline)に追加され、自分の[フォロワー](./follow)やサーバーのユーザーが見れるようになります。
+
+ノートには、[リアクション](./reaction)を行うことができます。また、返信や引用もできます。
+
+ノートを[お気に入り](./favorite)登録することで、後で簡単に見返すことができます。
+
+## ノートを作成する
+ノートを作成するには、画面上にある鉛筆マークのボタンを押して、作成フォームを開きます。作成フォームに内容を入力し、「ノート」ボタンを押すことでノートが作成されます。 ノートには、画像、動画など任意のファイルや、[アンケート](./poll)を添付することができます。また、本文中には[MFM](./mfm)が使用でき、[メンション](./mention)や[ハッシュタグ](./hashtag)を含めることもできます。 他にも、CWや公開範囲といった設定も行えます(詳細は後述)。
+<div class="info">ℹ️ コンピューターのクリップボードに画像データがある状態で、フォーム内のテキストボックスにペーストするとその画像を添付することができます。</div>
+<div class="info">ℹ️ テキストボックス内で<kbd class="key">Ctrl + Enter</kbd>を押すことでも投稿できます。</div>
+
+## Renote
+既にあるノートを引用、もしくはそのノートを新しいノートとして共有する行為、またそれによって作成されたノートをRenoteと呼びます。 自分がフォローしているユーザーの、気に入ったノートを自分のフォロワーに共有したい場合や、過去の自分のノートを再度共有したい場合に使います。 同じノートに対して無制限にRenoteを行うことができますが、あまり連続して使用すると迷惑になる場合もあるので、注意しましょう。
+<div class="warn">⚠️ 公開範囲がフォロワーやダイレクトのノートはRenoteできません</div>
+
+Renoteを削除するには、Renoteの時刻表示の隣にある「...」を押し、「Renote解除」を選択します。
+
+## CW
+Contents Warningの略で、ノートの内容を、閲覧者の操作なしには表示しないようにできる機能です。主に長大な内容を隠すためや、ネタバレ防止などに使うことができます。 設定するには、フォームの「内容を隠す」ボタン(目のアイコン)を押します。すると新しい入力エリアが表れるので、そこに内容の要約を記入します。
+
+## 公開範囲
+ノートごとに、そのノートが公開される範囲を設定することができます。フォームの「ノート」ボタンの左にあるアイコンを押すと公開範囲を以下から選択できます。
+
+### للعامة
+全ての人に対してノートが公開されるほか、サーバーの全てのタイムライン(ホームタイムライン、ローカルタイムライン、ソーシャルタイムライン、グローバルタイムライン)にノートが流れます。
+<div class="warn">⚠️ アカウントが<a href="./silence">サイレンス</a>状態の時は、この公開範囲は使用できません。</div>
+
+### الرئيسي
+全ての人に対してノートが公開されますが、フォロワー以外のローカルタイムライン、ソーシャルタイムライン、グローバルタイムラインにはノートは流れません。
+
+### المتابِعين
+自分のフォロワーに対してのみノートを公開します。フォロワーの全てのタイムラインに流れます。
+
+### مباشرة
+指定したユーザーに対してのみノートを公開します。指定したユーザーの全てのタイムラインに流れます。
+
+### 「ローカルのみ」オプション
+このオプションを有効にすると、リモートにノートを連合しなくなります。
+
+### 公開範囲の比較
+<table>
+    <tr><th></th><th>للعامة</th><th>الرئيسي</th><th>المتابِعين</th><th>مباشرة</th></tr>
+    <tr><th>フォロワーのLTL/STL/GTL</th><td>✔</td><td>✔</td><td>✔</td><td></td></tr>
+    <tr><th>非フォロワーのLTL/STL/GTL</th><td>✔</td><td></td><td></td><td></td></tr>
+</table>
+
+## دبّسها على الصفحة الشخصية
+ノートをピン留めすると、ユーザーページに常にそのノートを表示しておくことができます。 ノートのメニューを開き、「ピン留め」を選択してピン留めできます。 複数のノートをピン留めできます。
diff --git a/src/docs/ar-SA/features/pages.md b/src/docs/ar-SA/features/pages.md
new file mode 100644
index 0000000000..a7311b95e6
--- /dev/null
+++ b/src/docs/ar-SA/features/pages.md
@@ -0,0 +1,10 @@
+# Pages
+
+## 変数
+変数を使うことで動的なページを作成できます。テキスト内で <b>{ 変数名 }</b> と書くとそこに変数の値を埋め込めます。例えば <b>Hello { thing } world!</b> というテキストで、変数(thing)の値が <b>ai</b> だった場合、テキストは <b>Hello ai world!</b> になります。
+
+変数の評価(値を算出すること)は上から下に行われるので、ある変数の中で自分より下の変数を参照することはできません。例えば上から <b>A、B、C</b> と3つの変数を定義したとき、<b>C</b>の中で<b>A</b>や<b>B</b>を参照することはできますが、<b>A</b>の中で<b>B</b>や<b>C</b>を参照することはできません。
+
+ユーザーからの入力を受け取るには、ページに「ユーザー入力」ブロックを設置し、「変数名」に入力を格納したい変数名を設定します(変数は自動で作成されます)。その変数を使ってユーザー入力に応じた動作を行えます。
+
+関数を使うと、値の算出処理を再利用可能な形にまとめることができます。関数を作るには、「関数」タイプの変数を作成します。関数にはスロット(引数)を設定することができ、スロットの値は関数内で変数として利用可能です。また、関数を引数に取る関数(高階関数と呼ばれます)も存在します。関数は予め定義しておくほかに、このような高階関数のスロットに即席でセットすることもできます。
diff --git a/src/docs/ar-SA/features/reaction.md b/src/docs/ar-SA/features/reaction.md
new file mode 100644
index 0000000000..305bfd25eb
--- /dev/null
+++ b/src/docs/ar-SA/features/reaction.md
@@ -0,0 +1,11 @@
+# تفاعل
+他の人のノートに、絵文字を付けて簡単にあなたの反応を伝えられる機能です。 リアクションするには、ノートの + アイコンをクリックしてピッカーを表示し、絵文字を選択します。 リアクションには[カスタム絵文字](./custom-emoji)も使用できます。
+
+## リアクションピッカーのカスタマイズ
+ピッカーに表示される絵文字を自分好みにカスタマイズすることができます。 設定の「リアクション」で設定します。
+
+## リモート投稿へのリアクションについて
+リアクションはMisskeyオリジナルの機能であるため、リモートインスタンスがMisskeyでない限りは、ほとんどの場合「Like」としてアクティビティが送信されます。一般的にはLikeは「お気に入り」として実装されているようです。
+
+## リモートからのリアクションについて
+リモートから「Like」アクティビティを受信したとき、Misskeyでは「👍」のリアクションとして解釈されます。
diff --git a/src/docs/ar-SA/features/silence.md b/src/docs/ar-SA/features/silence.md
new file mode 100644
index 0000000000..617ba64dc4
--- /dev/null
+++ b/src/docs/ar-SA/features/silence.md
@@ -0,0 +1,6 @@
+# اكتم
+サイレンスは、アカウントに設定される状態のひとつです。
+
+アカウントがサイレンス状態になると、ノートの公開範囲をパブリックにできなくなります。 ホーム、フォロワー、ダイレクトは選択可能なため、サイレンスを受けた場合でもフォロワーやあなたのユーザーページを直接訪れた場合は投稿を閲覧できますが、GTL(連合タイムライン)やLTL(ローカルタイムライン)には投稿が流れません。
+
+アカウントのサイレンス状態は、サーバーのモデレーターによって有効化/無効化されます。
diff --git a/src/docs/ar-SA/features/theme.md b/src/docs/ar-SA/features/theme.md
new file mode 100644
index 0000000000..59b582fa29
--- /dev/null
+++ b/src/docs/ar-SA/features/theme.md
@@ -0,0 +1,68 @@
+# المظهر
+
+テーマを設定して、Misskeyクライアントの見た目を変更できます。
+
+## テーマの設定
+設定 > テーマ
+
+## テーマを作成する
+テーマコードはJSON5で記述されたテーマオブジェクトです。 テーマは以下のようなオブジェクトです。
+``` js
+{
+    id: '17587283-dd92-4a2c-a22c-be0637c9e22a',
+
+    name: 'Danboard',
+    author: 'syuilo',
+
+    base: 'light',
+
+    props: {
+        accent: 'rgb(218, 141, 49)',
+        bg: 'rgb(218, 212, 190)',
+        fg: 'rgb(115, 108, 92)',
+        panel: 'rgb(236, 232, 220)',
+        renote: 'rgb(100, 152, 106)',
+        link: 'rgb(100, 152, 106)',
+        mention: '@accent',
+        hashtag: 'rgb(100, 152, 106)',
+        header: 'rgba(239, 227, 213, 0.75)',
+        navBg: 'rgb(216, 206, 182)',
+        inputBorder: 'rgba(0, 0, 0, 0.1)',
+    },
+}
+
+```
+
+* `id` ... テーマの一意なID。UUIDをおすすめします。
+* `name` ... テーマ名
+* `author` ... テーマの作者
+* `desc` ... テーマの説明(オプション)
+* `base` ... 明るいテーマか、暗いテーマか
+    * `light`にすると明るいテーマになり、`dark`にすると暗いテーマになります。
+    * テーマはここで設定されたベーステーマを継承します。
+* `props` ... テーマのスタイル定義。これから説明します。
+
+### テーマのスタイル定義
+`props`下にはテーマのスタイルを定義します。 キーがCSSの変数名になり、バリューで中身を指定します。 なお、この`props`オブジェクトはベーステーマから継承されます。 ベーステーマは、このテーマの`base`が`light`なら[_light.json5](https://github.com/misskey-dev/misskey/blob/develop/src/client/themes/_light.json5)で、`dark`なら[_dark.json5](https://github.com/misskey-dev/misskey/blob/develop/src/client/themes/_dark.json5)です。 つまり、このテーマ内の`props`に`panel`というキーが無くても、そこにはベーステーマの`panel`があると見なされます。
+
+#### バリューで使える構文
+* 16進数で表された色
+    * 例: `#00ff00`
+* `rgb(r, g, b)`形式で表された色
+    * 例: `rgb(0, 255, 0)`
+* `rgb(r, g, b, a)`形式で表された透明度を含む色
+    * 例: `rgba(0, 255, 0, 0.5)`
+* 他のキーの値の参照
+    * `@{キー名}`と書くと他のキーの値の参照になります。`{キー名}`は参照したいキーの名前に置き換えます。
+    * 例: `@panel`
+* 定数(後述)の参照
+    * `${定数名}`と書くと定数の参照になります。`{定数名}`は参照したい定数の名前に置き換えます。
+    * 例: `$main`
+* 関数(後述)
+    * `:{関数名}<{引数}<{色}`
+
+#### 定数
+「CSS変数として出力はしたくないが、他のCSS変数の値として使いまわしたい」値があるときは、定数を使うと便利です。 キー名を`$`で始めると、そのキーはCSS変数として出力されません。
+
+#### 関数
+wip
diff --git a/src/docs/ar-SA/features/timeline.md b/src/docs/ar-SA/features/timeline.md
new file mode 100644
index 0000000000..988040538e
--- /dev/null
+++ b/src/docs/ar-SA/features/timeline.md
@@ -0,0 +1,31 @@
+# الخيط الزمني
+タイムラインは、[ノート](./note)が時系列で表示される機能です。 タイムラインには以下で示す種類があり、種類によって表示されるノートも異なります。 なお、タイムラインの種類によってはサーバーにより無効になっている場合があります。
+
+## الرئيسي
+自分のフォローしているユーザーの投稿が流れます。HTLと略されます。
+
+## المحلي
+全てのローカルユーザーの「ホーム」指定されていない投稿が流れます。LTLと略されます。
+
+## الاجتماعي
+自分のフォローしているユーザーの投稿と、全てのローカルユーザーの「ホーム」指定されていない投稿が流れます。STLと略されます。
+
+## الشامل
+全てのローカルユーザーの「ホーム」指定されていない投稿と、サーバーに届いた全てのリモートユーザーの「ホーム」指定されていない投稿が流れます。GTLと略されます。
+
+## 比較
+| ソース          |            |         | الخيط الزمني |           |        |
+| ------------ | ---------- | ------- | ------------ | --------- | ------ |
+| المستخدمون   | 公開範囲       | الرئيسي | المحلي       | الاجتماعي | الشامل |
+| ローカル (フォロー)  | 公開         | ✔       | ✔            | ✔         | ✔      |
+|              | الرئيسي    | ✔       |              | ✔         |        |
+|              | المتابِعين | ✔       | ✔            | ✔         | ✔      |
+| リモート (フォロー)  | 公開         | ✔       |              | ✔         | ✔      |
+|              | الرئيسي    | ✔       |              | ✔         |        |
+|              | المتابِعين | ✔       |              | ✔         | ✔      |
+| ローカル (未フォロー) | 公開         |         | ✔            | ✔         | ✔      |
+|              | الرئيسي    |         |              |           |        |
+|              | المتابِعين |         |              |           |        |
+| リモート (未フォロー) | 公開         |         |              |           | ✔      |
+|              | الرئيسي    |         |              |           |        |
+|              | المتابِعين |         |              |           |        |
diff --git a/src/docs/ar-SA/features/widgets.md b/src/docs/ar-SA/features/widgets.md
new file mode 100644
index 0000000000..a7c2c1d1d6
--- /dev/null
+++ b/src/docs/ar-SA/features/widgets.md
@@ -0,0 +1,7 @@
+# ウィジェット
+ウィジェットは、MisskeyのUI上に設置できる小型の情報表示、操作が行えるパーツです。
+
+ウィジェットを編集するには、ウィジェット編集モードに切り替えます。切り替え方法はUIによって異なります。 ウィジェット編集モードでは、ウィジェットの追加、削除、並び替え、およびそれぞれのウィジェットの設定を行えます。
+
+## 利用可能なウィジェット一覧
+todo
diff --git a/src/docs/ar-SA/general/apps.md b/src/docs/ar-SA/general/apps.md
new file mode 100644
index 0000000000..1f4c85fe8f
--- /dev/null
+++ b/src/docs/ar-SA/general/apps.md
@@ -0,0 +1,6 @@
+# サードパーティアプリのリスト
+## クライアント
+todo
+
+## 連携サービス
+todo
diff --git a/src/docs/ar-SA/general/faq.md b/src/docs/ar-SA/general/faq.md
new file mode 100644
index 0000000000..ecb664e32e
--- /dev/null
+++ b/src/docs/ar-SA/general/faq.md
@@ -0,0 +1,22 @@
+# よくある質問
+ここでは利用上のよくある質問について掲載しています。 Misskeyのプロジェクト自体についてのよくある質問は[こちら](./misskey)に掲載されています。
+
+### iOS/Androidのアプリはありますか?
+公式にはそういったOSのネイティブアプリを開発していませんが、サードパーティ製のアプリがいくつかあります。 詳しくは[こちら](./apps)をご覧ください。
+
+ただ、サードパーティ製アプリはどうしても機能への対応が遅れてしまうため、とくに拘りがなければ公式のWebクライアントの利用をおすすめします。 なお、MisskeyのWebクライアントはPWAに対応しているので、ネイティブアプリのように動作させることも可能です。 詳しくは[こちら](todo)をご覧ください。
+
+## 他のサーバーのユーザーをフォローするときは?
+メニューから検索を選び、ユーザー名をホスト込みで入力します。例: `@syuilo@misskey.io`
+
+## Renoteを削除するには?
+Renoteの時刻表示の隣にある「...」を押し、「Renote解除」を選択します。 Renoteについては[こちら](../features/note)をご確認ください。
+
+## URLのプレビューを表示させたくない
+MFMには、そのURLのプレビューを無効にする構文があります。詳細は[MFMチートシート](/mfm-cheat-sheet)をご確認ください。
+
+## カスタム絵文字を追加したい
+運営者のみがカスタム絵文字を追加、編集、削除できます。それらを希望する場合は運営者に依頼してください。
+
+## Botを開発したい
+Misskey APIを利用してBotの開発が可能です。[こちら](../advanced/develop-bot)をご確認ください。
diff --git a/src/docs/ar-SA/general/glossary.md b/src/docs/ar-SA/general/glossary.md
new file mode 100644
index 0000000000..c538367f27
--- /dev/null
+++ b/src/docs/ar-SA/general/glossary.md
@@ -0,0 +1,83 @@
+# 用語集
+Misskeyに関する用語集です。
+
+## AcitivityPub
+(読み: あくてぃびてぃぱぶ) 分散型を実現するために用いられるプロトコル(仕様)。このプロトコルに則ってサーバー同士通信を行うことで、連合が行われ、Fediverseを形成しています。
+
+## AiScript
+(読み: あいすくりぷと) Misskey上で使用できるプログラミング言語です。詳細は[こちら。](../advanced/aiscript)
+
+## API
+(読み: えーぴーあい) Misskeyのサーバーが公開している、プログラムからMisskeyを扱うためのインターフェース。詳細は[こちら。](../advanced/api)
+
+## Bot
+(読み: ぼっと) プログラムによって動作しているアカウント。
+
+## CW
+(読み: こんてんつわーにんぐ) Contents Warningの略。ノートの内容を、操作なしには表示しないようにできる機能。主に長大な内容を隠すためや、ネタバレ防止などに使われます。
+
+## Fediverse
+(読み: ふぇでぃばーす) Misskeyを含む様々な分散型ソフトウェアのサーバーで構成されたネットワーク。
+
+## GTL
+グローバルタイムライン(Global TimeLine)の略。タイムラインの詳細は[こちら。](../features/timeline)
+
+## HTL
+ホームタイムライン(Home TimeLine)の略。タイムラインの詳細は[こちら。](../features/timeline)
+
+## LTL
+ローカルタイムライン(Local TimeLine)の略。タイムラインの詳細は[こちら。](../features/timeline)
+
+## MFM
+(読み: えむえふえむ) Misskey Flavored Markdownの略で、Misskey上で使用できるマークアップ言語です。詳細は[こちら。](../features/mfm)
+
+## NSFW
+(読み: のっとせーふふぉーわーく) Not Safe For Workの略。画像を「閲覧注意」扱いにし、操作なしには表示しないようにすることができる機能。
+
+## Renote
+(読み: りのーと) 既にあるノートを引用、もしくはそのノートを新しいノートとして共有する行為、またそれによって作成されたノート。詳細は[こちら。](../features/note)
+
+## STL
+ソーシャルタイムライン(Social TimeLine)の略。タイムラインの詳細は[こちら。](../features/timeline)
+
+## 藍
+(読み: あい) Misskeyの看板娘(公式キャラクター)です。
+
+## アクティブユーザー
+インスタンスにアカウントを作っているユーザーのうち、現在も実際にサービスを利用しているユーザーのこと。
+
+## مثيل الخادم
+todo
+
+## コントロールパネル
+インスタンスの設定画面のこと。
+
+## サーバー
+todo
+
+## اكتم
+ノートをパブリックな公開範囲で投稿できなくされている状態。モデレーターの判断でユーザーごとに設定されます。詳細は[こちら。](../features/silence)
+
+## علِق
+アカウントが使用不可に設定されている状態。
+
+## قرص التخرين
+Misskeyにアップロードしたファイルを管理する機能。詳細は[こちら。](../features/drive)
+
+## الملاحظات
+Misskeyに投稿される、文章、ファイル、アンケートなどを含めることができるコンテンツ。詳細は[こちら。](../features/note)
+
+## ミスキスト
+Misskeyを使う人のこと。
+
+## مشرِف
+スパムの凍結およびサイレンスや不適切な投稿の削除など、コミュニティ運営に関する権限を持つユーザー。
+
+## بُعدي
+他サーバーのことを指します。リモートユーザーといったように接頭辞としても使われます。ローカルの逆です。
+
+## الفديرالية
+サーバー上で作成された情報が他のサーバーに伝わること。
+
+## المحلي
+自サーバーのことを指します。ローカルユーザー、ローカルタイムラインといったように接頭辞としても使われます。リモートの逆です。
diff --git a/src/docs/ar-SA/general/links.md b/src/docs/ar-SA/general/links.md
new file mode 100644
index 0000000000..d6b16856fb
--- /dev/null
+++ b/src/docs/ar-SA/general/links.md
@@ -0,0 +1,5 @@
+# リンク集
+
+## ライブラリ
+- [misskey-dev/misskey.js](https://github.com/misskey-dev/misskey.js) - JavaScriptのMisskey SDK
+- [misskey-dev/mfm.js](https://github.com/misskey-dev/mfm.js) - JavaScriptのMFMパーサー実装
diff --git a/src/docs/ar-SA/general/misskey.md b/src/docs/ar-SA/general/misskey.md
new file mode 100644
index 0000000000..addeeffaeb
--- /dev/null
+++ b/src/docs/ar-SA/general/misskey.md
@@ -0,0 +1,87 @@
+# عن Misskey
+
+Misskeyはオープンソースの分散型マイクロブログプラットフォームプロジェクトです。 開発は日本でsyuiloによって2014年から開始されました。 ドライブ、リアクションなどの豊富な機能や、高いカスタマイズ性を備えたUIを持つことが特徴です。
+
+## 歴史
+開発当初は掲示板がメインのサービスでしたが、ユーザーが短文を投稿し、それを時系列で流れるタイムライン機能を追加したところ人気が高まり、徐々にそれがメインとして開発が進むようになりました。 当初は分散型ではありませんでしたが、2018年にAcitivityPubを実装し分散型になったことで、より多くの方に認知され利用されるサービスになり、現在に至ります。
+<div class="info">ℹ️ Misskeyという名前は、syuiloが当時聴いていたMay'nというアーティストの楽曲、Brain Diverの歌詞に由来します。</div>
+
+誰でも開発に参加することができ、現在でも活発に開発が続いています。
+
+## 分散型とは何か?
+
+<b>分散(distributed)型</b>とは、<b>非中央集権(decentralized)</b>とも呼ばれ、コミュニティが多数のサーバーに分散して存在し、それらが相互に<b>通信(連合、federation)</b>することでコンテンツ共有<b>ネットワーク(Fediverse)</b>を形成していることが特徴のサービスです。 単一のサーバーしか存在しない、もしくは複数存在しても互いに独立している場合は中央集権なサービスと言われ、例えばTwitterやFacebookなどほとんどのサービスがそれに該当します。 分散型のメリットは、自分に合った運営者やテーマのサーバーを選択できることです。自分でサーバーを作成することもできます。連合するおかげで、どのサーバーを選んでも、同じコミュニティにアクセスできます。
+
+## 常にオープンソース
+Misskeyはこれまでもこれからも、オープンソースであり続けます。オープンソースとは、簡単に言うと<b>ソフトウェアのソースコード(プログラム)が公開されている</b>ことです。ソースコードの修正や再配布が可能であることを定義に含めることもあります。 Misskeyのすべてのソースコードは[AGPL](https://github.com/misskey-dev/misskey/blob/develop/LICENSE)というオープンソースライセンスの下に[公開](https://github.com/misskey-dev)されていて、誰でも自由に閲覧、使用、修正、改変、再配布をすることができます。 オープンソースは、自分で好きなように変えたり、有害な処理が含まれていないことを確認することができたり、誰でも開発に参加できるなどの、様々なメリットがあります。 上述の分散型を実現するためにも、オープンソースであるということは必要不可欠な要素です。 再び引き合いに出しますが、TwitterやFacebookなどの利益を得ているほとんどのサービスはオープンソースではありません。
+
+<div class="info">ℹ️ 技術的に言うと、MisskeyのソースコードはGitで管理されていて、リポジトリは<a href="https://github.com/misskey-dev" target="_blank">GitHub上でホスティングされています。</a></div>
+
+## 開発に参加する、プロジェクトを支援する
+Misskeyを気に入っていただけたら、ぜひプロジェクトを支援してください。プロジェクトに貢献するには、以下で紹介するようにいろいろな方法があります。方法によっては開発のスキルは不要なので、誰でも気軽に参加し貢献することができます。いつでもお待ちしています。
+
+### 機能を追加したり、バグを修正する
+ソフトウェアエンジニアのスキルをお持ちの方であれば、ソースコードを編集する形でプロジェクトに貢献することができます。 貢献についてのガイドは[こちら](https://github.com/misskey-dev/misskey/blob/develop/CONTRIBUTING.md)です。
+
+### 議論に参加する
+新しい機能、または既存の機能について意見を述べたり、不具合を報告したりすることでも貢献できます。 そのようなディスカッションは[GitHub](https://github.com/misskey-dev)上か、[フォーラム](https://forum.misskey.io/)等で行われます。
+
+### テキストを翻訳する
+Misskeyは様々な言語に対応しています(i18n -internationalizationの略- と呼ばれます)。元の言語は基本的に日本語ですが、有志によって他の言語へと翻訳されています。 その翻訳作業に加わっていただくことでもMisskeyに貢献できます。 Misskeyは[Crowdinというサービスを使用して翻訳の管理を行っています。](https://crowdin.com/project/misskey)
+
+### 感想を投稿する
+不具合報告等だけではなく、Misskeyの良い点、楽しい点といったポジティブな意見もぜひ共有してください。開発の励みになり、それは間接的ですがプロジェクトへの貢献です。
+
+### ミスキストを増やす
+ミスキストとは、Misskeyを使用する人のことです。 知り合いに紹介するなどしてMisskeyを広めていただければ、ミスキストが増え開発のモチベーションが上がります。
+
+### 寄付をする
+Misskeyはビジネスではなく、利用は無料であるため、収益は皆様からの寄付のみです。(インスタンスによっては広告収入を得ているような場合もありますが、それは運営者の収入であり直接開発者への収入にはなりません) 寄付をしていただければ、今後も開発を続けることが可能になり、プロジェクトへの貢献になります。 寄付は基本的には[Patreon](https://www.patreon.com/syuilo)で受け付けています。 一定額寄付していただけると、Misskeyの[情報ページ](/about-misskey)に名前を記載することができます。
+
+また、サーバーの運営者も、基本的には収益を得ていません。サーバーの運営にはコストがかかるので、運営者の支援をすることもご検討ください。 開発には直接関係しませんが、サーバーがあってこそのプロジェクトなので、運営が維持されるというのは開発と同じくらい重要なことです。
+
+## クレジット
+Misskeyの開発者や、Misskeyに寄付をしてくださった方の一覧は[こちら](/about-misskey)で見ることができます。
+
+## よくある質問
+### プロジェクトは何を目指していますか?
+強いて言うと、漠然的になりますが広く使われる汎用的なプラットフォームになることを目指しています。 Misskeyは他のプロジェクトとは違い、何らかの思想(例えば、反中央集権)やビジョンに基づいて開発が行われているわけではなく、その点ではフラットです。 それが逆に、特定の方向性に縛られないフレキシブルさを生み出すことに繋がっていると感じています。
+<!-- TODO: ここにロードマップへのリンク -->
+
+### 企業によって開発されていますか?
+いいえ。Misskeyの開発は個人で行われており、商業的でもないため、特定の企業の関りはありません。 開発メンバーも基本的にはボランティアです。 また、開発に対し企業のスポンサーがつくこともありますが、その場合でもやはり開発は個人のコミュニティが主体です。
+
+### 誰が運営していますか?
+Misskeyは分散型なため、各サーバーにそれぞれ異なった運営者がいます。従って、特定の個人や企業によって、Misskeyの全てが運営されているわけではありません。 また、開発チームが運営を行うわけでもないため、運営に関する連絡は、お使いのサーバーの運営者に行ってください。 サーバーの運営者は、[このページ](/about)で確認することができます。 あなたがサーバーを作成すれば、あなたが運営者になります。
+
+### どのサーバーを選べばいいですか?
+[サーバー一覧が公開されています。](https://join.misskey.page/ja-JP/instances) サーバーによってコミュニティのテーマ(特定のこと、ものが好き 等)が決められている場合があるので、自分に合ったテーマのサーバーがあれば、そこを選ぶと良いかもしれません。 他にも、サーバーの規模、ユーザー層、国および言語、運営者が信頼できるかどうか、などの観点があります。 なお、Misskey公式のサーバーというものはありません。自身で新しくサーバーを作成するという選択肢もあります。
+
+基本的にどのサーバーを選んだとしても、他の全てのサーバーのユーザーと繋がることができます。
+
+### サーバーを建てるにはどうしたらいいですか?
+Misskeyサーバーの作成に興味を持っていただきありがとうございます。 2021年現在、Misskeyのホスティングサービスは存在しないため、サーバーの作成にはある程度の知識が必要です。 サーバーの作成方法については[こちら](todo)をご覧ください。
+
+### どのような技術を使用していますか?
+Misskeyは開発が進むにつれ使用する技術も大きく変わってきました。開発当初はMySQL + PHP + jQueryといった構成でしたが、現在は以下のようになっています。
+- サーバーサイド: Node.js
+- データベース: PostgreSQL、Redis
+- UIフレームワーク: Vue.js
+- プログラミング言語: TypeScript
+
+また、MFMやAiScriptなどの、Misskeyから派生して独自の技術も開発しています。
+
+### Mastodonのフォークですか?
+いいえ。MisskeyはMastodonやその他のプロジェクトとは全く別のプロジェクトです。 開発に関しても、Misskeyの方が昔から開発されています。ただし、分散型になったのはMastodonの登場より後です。 同じAcitivityPubという分散のためのプロトコルを実装しているという点以外、両者に特に関りがあるわけでもありません。
+
+### iOS/Androidのアプリはありますか?
+公式にはそういったOSのネイティブアプリを開発していませんが、サードパーティ製のアプリがいくつかあります。 詳しくは[こちら](./apps)をご覧ください。
+
+ただ、サードパーティ製アプリはどうしても機能への対応が遅れてしまうため、とくに拘りがなければ公式のWebクライアントの利用をおすすめします。 なお、MisskeyのWebクライアントはPWAに対応しているので、ネイティブアプリのように動作させることも可能です。 詳しくは[こちら](todo)をご覧ください。
+
+### Misskeyのロゴ、アイコンはどこで入手できますか?
+(準備中)
+
+### 時折目にする猫耳の可愛い女の子は?
+Misskeyの守り神、藍ちゃんです。アイチャンカワイイヤッター!
+<div class="info">ℹ️ 藍ちゃんについては<a href="https://xn--931a.moe/" target="_blank">こちら</a>です。</div>
diff --git a/src/docs/ar-SA/general/report-issue.md b/src/docs/ar-SA/general/report-issue.md
new file mode 100644
index 0000000000..63527e32af
--- /dev/null
+++ b/src/docs/ar-SA/general/report-issue.md
@@ -0,0 +1,8 @@
+# 不具合の報告
+不具合と思われる状況に遭遇したときは、まず[トラブルシューティング](./troubleshooting)をご一読ください。 それでも問題が解決しないときは、以下の情報を含めて[フォーラム](https://forum.misskey.io/)に投稿してください。 投稿することで、解決策が見つかったり、不具合と判断されれば開発チームによって修正が行われます。
+
+## 含める情報
+- Misskeyのバージョン([情報ページ](/about)で確認できます)
+- お使いのブラウザの種類とバージョン
+- お使いのOSの種類とバージョン
+- 問題の再現手順
diff --git a/src/docs/ar-SA/general/troubleshooting.md b/src/docs/ar-SA/general/troubleshooting.md
new file mode 100644
index 0000000000..4a35091299
--- /dev/null
+++ b/src/docs/ar-SA/general/troubleshooting.md
@@ -0,0 +1,36 @@
+# トラブルシューティング
+<div class="info">ℹ️ <a href="./faq">よくある質問</a>も合わせてお役立てください。</div>
+
+問題が発生したときは、まずこちらをご確認ください。 該当する項目が無い、もしくは手順を試しても効果がない場合は、サーバーの管理者に連絡するか[不具合を報告](./report-issue)してください。
+
+## クライアントが起動しない
+ほとんどの場合、お使いのブラウザまたはOSのバージョンが古いことが原因です。 ブラウザおよびOSのバージョンを最新のものに更新してから、再度試してみてください。
+
+これは稀ですが、それでも起動しない場合は、キャッシュが原因の場合があります。ブラウザのキャッシュをクリアして、再度試してみてください。
+
+## ページが読み込めない
+クライアントが起動するもののページが読み込めないというエラーが出る場合は、ネットワークに問題がないか確認してください。また、サーバーがダウンしていないか確認してください。
+
+これは稀ですが、キャッシュが原因の場合があります。ブラウザのキャッシュをクリアして、再度試してみてください。
+
+まだ問題がある場合は、サーバーの問題と思われるのでサーバーの管理者に連絡してください。
+
+## クライアントの動作が遅い
+以下を試してみてください:
+
+- クライアント設定で「UIのアニメーションを減らす」を有効にする
+- クライアント設定で「モーダルにぼかし効果を使用」を無効にする
+- お使いのブラウザの設定でハードウェアアクセラレーションを有効にする
+- お使いのデバイスのスペックを上げる
+
+## 通知やアンテナ等の点滅が消えない
+点滅は、未読のコンテンツがあることを示しています。通常点滅が消えない場合は、コンテンツを遡ると未読なコンテンツが残っています。 すべて既読にしたと思われるのに、それでもなお点滅が続く場合(おそらく不具合と思われます)は設定から強制的にすべて既読扱いにすることができます。
+
+## Renoteができない
+フォロワー限定のノートはRenoteすることはできません。
+
+## UI上で特定の要素が表示されない
+広告ブロッカーを使用しているとそのような不具合が発生することがあります。Misskeyではオフにしてご利用ください。
+
+## UI上で未翻訳の部分がある
+ほとんどの場合、単に翻訳が間に合っていないだけで、不具合ではありません。翻訳が終わるまでお待ちください。 [翻訳に参加](./misskey)していただくことも可能です。
diff --git a/src/docs/cs-CZ/admin/disable-timelines.md b/src/docs/cs-CZ/admin/disable-timelines.md
new file mode 100644
index 0000000000..b081e35ab0
--- /dev/null
+++ b/src/docs/cs-CZ/admin/disable-timelines.md
@@ -0,0 +1,8 @@
+# LTL/STL/GTLの無効化
+Misskeyでは、LTL/STL/GTLをそれぞれ無効化することができます。有効/無効を切り替えるには、インスタンスコントロールパネルで設定します。
+
+LTLやSTLは、そのインスタンス全員の投稿が見れるため、新規のユーザーにとってはユーザーを探す必要がなくなり、興味のあるユーザーを見つけやすいという利点があります。 しかし同時に、フォロー機能が活用されなくなったり、不適切な投稿が目につきやすくなったり、チャットのようになることで内輪感が生じて逆に新規ユーザーが参加しにくくなるといったデメリットも持ち合わせています。 サーバーによってメリット/デメリットどちらが優勢かは異なるので、オプションとして無効にできるようになっています。 もしデメリットの方が上回っていると感じたら、それらのタイムラインを無効化することも検討してください。
+
+<div class="warn">⚠️ 無効化を行うと、ユーザーが困惑し、短期的に見て利用者が減る可能性があります。そのため、無効化の際は影響を慎重に検討し、事前に説明してフォローを整える期間を一定程度設けることを推奨します。</div>
+
+なお、管理者/モデレーターは、これらのタイムラインの無効化状態は適用されず、引き続き利用することが可能です。
diff --git a/src/docs/cs-CZ/admin/faq.md b/src/docs/cs-CZ/admin/faq.md
new file mode 100644
index 0000000000..317b4e0655
--- /dev/null
+++ b/src/docs/cs-CZ/admin/faq.md
@@ -0,0 +1,5 @@
+# よくある質問
+ここでは、サーバー管理者向けのよくある質問を掲載しています。
+
+## デフォルトテーマを設定したい
+現在、デフォルトテーマ設定機能は実装されていません。
diff --git a/src/docs/cs-CZ/advanced/aiscript.md b/src/docs/cs-CZ/advanced/aiscript.md
new file mode 100644
index 0000000000..604d17daa8
--- /dev/null
+++ b/src/docs/cs-CZ/advanced/aiscript.md
@@ -0,0 +1,7 @@
+# AiScript
+AiScriptは、Misskeyで使用できるスクリプト言語です。
+
+<div class="info">ℹ️ AiScript実装はMisskeyとは別リポジトリで、<a href="https://github.com/syuilo/aiscript" target="_blank">オープンソースで公開されています。</a></div>
+
+## 使い方
+AiScriptの構文や組み込み関数などのドキュメントは、[こちら](https://github.com/syuilo/aiscript/tree/master/docs)で公開されています。
diff --git a/src/docs/cs-CZ/advanced/api.md b/src/docs/cs-CZ/advanced/api.md
new file mode 100644
index 0000000000..76019b6145
--- /dev/null
+++ b/src/docs/cs-CZ/advanced/api.md
@@ -0,0 +1,58 @@
+# Misskey API
+
+MisskeyAPIを使ってMisskeyクライアント、Misskey連携Webサービス、Bot等(以下「アプリケーション」と呼びます)を開発できます。 ストリーミングAPIもあるので、リアルタイム性のあるアプリケーションを作ることも可能です。
+
+APIを使い始めるには、まずアクセストークンを取得する必要があります。 このドキュメントでは、アクセストークンを取得する手順を説明した後、基本的なAPIの使い方を説明します。
+
+## アクセストークンの取得
+基本的に、APIはリクエストにはアクセストークンが必要となります。 APIにリクエストするのが自分自身なのか、不特定の利用者に使ってもらうアプリケーションなのかによって取得手順は異なります。
+
+* 前者の場合: [「自分自身のアクセストークンを手動発行する」](#自分自身のアクセストークンを手動発行する)に進む
+* 後者の場合: [「アプリケーション利用者にアクセストークンの発行をリクエストする」](#アプリケーション利用者にアクセストークンの発行をリクエストする)に進む
+
+### 自分自身のアクセストークンを手動発行する
+「設定 > API」で、自分のアクセストークンを発行できます。
+
+[「APIの使い方」へ進む](#APIの使い方)
+
+### アプリケーション利用者にアクセストークンの発行をリクエストする
+アプリケーション利用者のアクセストークンを取得するには、以下の手順で発行をリクエストします。
+
+#### Step 1
+
+UUIDを生成する。以後これをセッションIDと呼びます。
+
+> このセッションIDは毎回生成し、使いまわさないようにしてください。
+
+#### Step 2
+
+`{_URL_}/miauth/{session}`をユーザーのブラウザで表示させる。`{session}`の部分は、セッションIDに置き換えてください。
+> 例: `{_URL_}/miauth/c1f6d42b-468b-4fd2-8274-e58abdedef6f`
+
+表示する際、URLにクエリパラメータとしていくつかのオプションを設定できます:
+* `name` ... アプリケーション名
+    * > 例: `MissDeck`
+* `icon` ... アプリケーションのアイコン画像URL
+    * > 例: `https://missdeck.example.com/icon.png`
+* `callback` ... 認証が終わった後にリダイレクトするURL
+    * > 例: `https://missdeck.example.com/callback`
+    * リダイレクト時には、`session`というクエリパラメータでセッションIDが付きます
+* `permission` ... アプリケーションが要求する権限
+    * > 例: `write:notes,write:following,read:drive`
+    * 要求する権限を`,`で区切って列挙します
+    * どのような権限があるかは[APIリファレンス](/api-doc)で確認できます
+
+#### Step 3
+ユーザーが発行を許可した後、`{_URL_}/api/miauth/{session}/check`にPOSTリクエストすると、レスポンスとしてアクセストークンを含むJSONが返ります。
+
+レスポンスに含まれるプロパティ:
+* `token` ... ユーザーのアクセストークン
+* `user` ... ユーザーの情報
+
+[「APIの使い方」へ進む](#APIの使い方)
+
+## APIの使い方
+**APIはすべてPOSTで、リクエスト/レスポンスともにJSON形式です。RESTではありません。** アクセストークンは、`i`というパラメータ名でリクエストに含めます。
+
+* [APIリファレンス](/api-doc)
+* [ストリーミングAPI](./stream)
diff --git a/src/docs/cs-CZ/advanced/create-plugin.md b/src/docs/cs-CZ/advanced/create-plugin.md
new file mode 100644
index 0000000000..ec17b95186
--- /dev/null
+++ b/src/docs/cs-CZ/advanced/create-plugin.md
@@ -0,0 +1,74 @@
+# プラグインの作成
+Misskey Webクライアントのプラグイン機能を使うと、クライアントを拡張し、様々な機能を追加できます。 ここではプラグインの作成にあたってのメタデータ定義や、AiScript APIリファレンスを掲載します。
+
+## Metadata
+プラグインは、AiScriptのメタデータ埋め込み機能を使って、デフォルトとしてプラグインのメタデータを定義する必要があります。 メタデータは次のプロパティを含むオブジェクトです。
+
+### name
+プラグイン名
+
+### author
+プラグイン作者
+
+### version
+プラグインバージョン。数値を指定してください。
+
+### description
+プラグインの説明
+
+### permissions
+プラグインが要求する権限。MisskeyAPIにリクエストする際に用いられます。
+
+### config
+プラグインの設定情報を表すオブジェクト。 キーに設定名、値に以下のプロパティを含めます。
+
+#### type
+設定値の種類を表す文字列。以下から選択します。 string number boolean
+
+#### label
+ユーザーに表示する設定名
+
+#### description
+設定の説明
+
+#### default
+設定のデフォルト値
+
+## APIリファレンス
+AiScript標準で組み込まれているAPIは掲載しません。
+
+### Mk:dialog(title text type)
+ダイアログを表示します。typeには以下の値が設定できます。 info success warn error question 省略すると info になります。
+
+### Mk:confirm(title text type)
+確認ダイアログを表示します。typeには以下の値が設定できます。 info success warn error question 省略すると question になります。 ユーザーが"OK"を選択した場合は true を、"キャンセル"を選択した場合は false が返ります。
+
+### Mk:api(endpoint params)
+Misskey APIにリクエストします。第一引数にエンドポイント名、第二引数にパラメータオブジェクトを渡します。
+
+### Mk:save(key value)
+任意の値に任意の名前を付けて永続化します。永続化した値は、AiScriptコンテキストが終了しても残り、Mk:loadで読み取ることができます。
+
+### Mk:load(key)
+Mk:saveで永続化した指定の名前の値を読み取ります。
+
+### Plugin:register_post_form_action(title fn)
+投稿フォームにアクションを追加します。第一引数にアクション名、第二引数にアクションが選択された際のコールバック関数を渡します。 コールバック関数には、第一引数に投稿フォームオブジェクトが渡されます。
+
+### Plugin:register_note_action(title fn)
+ノートメニューに項目を追加します。第一引数に項目名、第二引数に項目が選択された際のコールバック関数を渡します。 コールバック関数には、第一引数に対象のノートオブジェクトが渡されます。
+
+### Plugin:register_user_action(title fn)
+ユーザーメニューに項目を追加します。第一引数に項目名、第二引数に項目が選択された際のコールバック関数を渡します。 コールバック関数には、第一引数に対象のユーザーオブジェクトが渡されます。
+
+### Plugin:register_note_view_interruptor(fn)
+UIに表示されるノート情報を書き換えます。 コールバック関数には、第一引数に対象のノートオブジェクトが渡されます。 コールバック関数の返り値でノートが書き換えられます。
+
+### Plugin:register_note_post_interruptor(fn)
+ノート投稿時にノート情報を書き換えます。 コールバック関数には、第一引数に対象のノートオブジェクトが渡されます。 コールバック関数の返り値でノートが書き換えられます。
+
+### Plugin:open_url(url)
+第一引数に渡されたURLをブラウザの新しいタブで開きます。
+
+### Plugin:config
+プラグインの設定が格納されるオブジェクト。プラグイン定義のconfigで設定したキーで値が入ります。
diff --git a/src/docs/cs-CZ/advanced/develop-bot.md b/src/docs/cs-CZ/advanced/develop-bot.md
new file mode 100644
index 0000000000..7f825e9bc4
--- /dev/null
+++ b/src/docs/cs-CZ/advanced/develop-bot.md
@@ -0,0 +1,6 @@
+# Botの作成
+[Misskey API](./api)を利用してBotの開発が可能です。 また、いくつかのBot実装が公開されているため、ぜひ参考にしてください。
+
+- [syuilo/ai](https://github.com/syuilo/ai) ... Node.js上で動く、TypeScript製Bot実装
+
+Botを作成したときは、プロフィール設定からBotフラグをオンにしておくことを強くおすすめします。
diff --git a/src/docs/cs-CZ/advanced/reversi-bot.md b/src/docs/cs-CZ/advanced/reversi-bot.md
new file mode 100644
index 0000000000..7ab2a7212e
--- /dev/null
+++ b/src/docs/cs-CZ/advanced/reversi-bot.md
@@ -0,0 +1,160 @@
+# MisskeyリバーシBotの開発
+Misskeyのリバーシ機能に対応したBotの開発方法をここに記します。
+
+1. `games/reversi`ストリームに以下のパラメータを付けて接続する:
+    * `i`: botアカウントのAPIキー
+
+2. 対局への招待が来たら、ストリームから`invited`イベントが流れてくる
+    * イベントの中身に、`parent`という名前で対局へ誘ってきたユーザーの情報が含まれている
+
+3. `games/reversi/match`へ、`user_id`として`parent`の`id`が含まれたリクエストを送信する
+
+4. 上手くいくとゲーム情報が返ってくるので、`games/reversi-game`ストリームへ、以下のパラメータを付けて接続する:
+    * `i`: botアカウントのAPIキー
+    * `game`: `game`の`id`
+
+5. この間、相手がゲームの設定を変更するとその都度`update-settings`イベントが流れてくるので、必要であれば何かしらの処理を行う
+
+6. 設定に満足したら、`{ type: 'accept' }`メッセージをストリームに送信する
+
+7. ゲームが開始すると、`started`イベントが流れてくる
+    * イベントの中身にはゲーム情報が含まれている
+
+8. 石を打つには、ストリームに`{ type: 'set', pos: <位置> }`を送信する(位置の計算方法は後述)
+
+9. 相手または自分が石を打つと、ストリームから`set`イベントが流れてくる
+    * `color`として石の色が含まれている
+    * `pos`として位置情報が含まれている
+
+## 位置の計算法
+8x8のマップを考える場合、各マスの位置(インデックスと呼びます)は次のようになっています:
+```
++--+--+--+--+--+--+--+--+
+| 0| 1| 2| 3| 4| 5| 6| 7|
++--+--+--+--+--+--+--+--+
+| 8| 9|10|11|12|13|14|15|
++--+--+--+--+--+--+--+--+
+|16|17|18|19|20|21|22|23|
+...
+```
+
+### X,Y座標 から インデックス に変換する
+```
+pos = x + (y * mapWidth)
+```
+`mapWidth`は、ゲーム情報の`map`から、次のようにして計算できます:
+```
+mapWidth = map[0].length
+```
+
+### インデックス から X,Y座標 に変換する
+```
+x = pos % mapWidth
+y = Math.floor(pos / mapWidth)
+```
+
+## マップ情報
+マップ情報は、ゲーム情報の`map`に入っています。 文字列の配列になっており、ひとつひとつの文字がマス情報を表しています。 それをもとにマップのデザインを知る事が出来ます:
+* `(スペース)` ... マス無し
+* `-` ... マス
+* `b` ... 初期配置される黒石
+* `w` ... 初期配置される白石
+
+例えば、4*4の次のような単純なマップがあるとします:
+```text
++---+---+---+---+
+|   |   |   |   |
++---+---+---+---+
+|   | ○ | ● |   |
++---+---+---+---+
+|   | ● | ○ |   |
++---+---+---+---+
+|   |   |   |   |
++---+---+---+---+
+```
+
+この場合、マップデータはこのようになります:
+```javascript
+['----', '-wb-', '-bw-', '----']
+```
+
+## ユーザーにフォームを提示して対話可能Botを作成する
+ユーザーとのコミュニケーションを行うため、ゲームの設定画面でユーザーにフォームを提示することができます。 例えば、Botの強さをユーザーが設定できるようにする、といったシナリオが考えられます。
+
+フォームを提示するには、`reversi-game`ストリームに次のメッセージを送信します:
+```javascript
+{
+  type: 'init-form',
+  body: [フォームコントロールの配列]
+}
+```
+
+フォームコントロールの配列については今から説明します。 フォームコントロールは、次のようなオブジェクトです:
+```javascript
+{
+  id: 'switch1',
+  type: 'switch',
+  label: 'Enable hoge',
+  value: false
+}
+```
+`id` ... コントロールのID。 `type` ... コントロールの種類。後述します。 `label` ... コントロールと一緒に表記するテキスト。 `value` ... コントロールのデフォルト値。
+
+### フォームの操作を受け取る
+ユーザーがフォームを操作すると、ストリームから`update-form`イベントが流れてきます。 イベントの中身には、コントロールのIDと、ユーザーが設定した値が含まれています。 例えば、上で示したスイッチをユーザーがオンにしたとすると、次のイベントが流れてきます:
+```javascript
+{
+  id: 'switch1',
+  value: true
+}
+```
+
+### フォームコントロールの種類
+#### スイッチ
+type: `switch` スイッチを表示します。何かの機能をオン/オフさせたい場合に有用です。
+
+##### プロパティ
+`label` ... スイッチに表記するテキスト。
+
+#### ラジオボタン
+type: `radio` ラジオボタンを表示します。選択肢を提示するのに有用です。例えば、Botの強さを設定させるなどです。
+
+##### プロパティ
+`items` ... ラジオボタンの選択肢。例:
+```javascript
+items: [{
+  label: 'å¼±',
+  value: 1
+}, {
+  label: '中',
+  value: 2
+}, {
+  label: 'å¼·',
+  value: 3
+}]
+```
+
+#### スライダー
+type: `slider` スライダーを表示します。
+
+##### プロパティ
+`min` ... スライダーの下限。 `max` ... スライダーの上限。 `step` ... 入力欄で刻むステップ値。
+
+#### テキストボックス
+type: `textbox` テキストボックスを表示します。ユーザーになにか入力させる一般的な用途に利用できます。
+
+## ユーザーにメッセージを表示する
+設定画面でユーザーと対話する、フォーム以外のもうひとつの方法がこれです。ユーザーになにかメッセージを表示することができます。 例えば、ユーザーがBotの対応していないモードやマップを選択したとき、警告を表示するなどです。 メッセージを表示するには、次のメッセージをストリームに送信します:
+```javascript
+{
+  type: 'message',
+  body: {
+    text: 'メッセージ内容',
+    type: 'メッセージの種類'
+  }
+}
+```
+メッセージの種類: `success`, `info`, `warning`, `error`。
+
+## 投了する
+投了をするには、<a href="./api/endpoints/games/reversi/games/surrender">このエンドポイント</a>にリクエストします。
diff --git a/src/docs/cs-CZ/advanced/stream.md b/src/docs/cs-CZ/advanced/stream.md
new file mode 100644
index 0000000000..0e5edd2b0c
--- /dev/null
+++ b/src/docs/cs-CZ/advanced/stream.md
@@ -0,0 +1,350 @@
+# ストリーミングAPI
+
+ストリーミングAPIを使うと、リアルタイムで様々な情報(例えばタイムラインに新しい投稿が流れてきた、メッセージが届いた、フォローされた、など)を受け取ったり、様々な操作を行ったりすることができます。
+
+## ストリームに接続する
+
+ストリーミングAPIを利用するには、まずMisskeyサーバーに**websocket**接続する必要があります。
+
+以下のURLに、`i`というパラメータ名で認証情報を含めて、websocket接続してください。例:
+```
+%WS_URL%/streaming?i=xxxxxxxxxxxxxxx
+```
+
+認証情報は、自分のAPIキーや、アプリケーションからストリームに接続する際はユーザーのアクセストークンのことを指します。
+
+<div class="info">ℹ️ 認証情報の取得については、<a href="./api">こちらのドキュメント</a>をご確認ください。</div>
+
+---
+
+認証情報は省略することもできますが、その場合非ログインでの利用ということになり、受信できる情報や可能な操作は限られます。例:
+
+```
+%WS_URL%/streaming
+```
+
+---
+
+ストリームに接続すると、後述するAPI操作や、投稿の購読を行ったりすることができます。 しかしまだこの段階では、例えばタイムラインへの新しい投稿を受信したりすることはできません。 それを行うには、ストリーム上で、後述する**チャンネル**に接続する必要があります。
+
+**ストリームでのやり取りはすべてJSONです。**
+
+## チャンネル
+MisskeyのストリーミングAPIにはチャンネルという概念があります。これは、送受信する情報を分離するための仕組みです。 Misskeyのストリームに接続しただけでは、まだリアルタイムでタイムラインの投稿を受信したりはできません。 ストリーム上でチャンネルに接続することで、様々な情報を受け取ったり情報を送信したりすることができるようになります。
+
+ひとつのストリーム上で、同時に複数のチャンネルに接続することができます。
+
+### チャンネルに接続する
+チャンネルに接続するには、次のようなデータをJSONでストリームに送信します:
+
+```json
+{
+    type: 'connect',
+    body: {
+        channel: 'xxxxxxxx',
+        id: 'foobar',
+        params: {
+            ...
+        }
+    }
+}
+```
+
+ここで、
+* `channel`には接続したいチャンネル名を設定します。チャンネルの種類については後述します。
+* `id`にはそのチャンネルとやり取りするための任意のIDを設定します。ストリームでは様々なメッセージが流れるので、そのメッセージがどのチャンネルからのものなのか識別する必要があるからです。このIDは、UUIDや、乱数のようなもので構いません。
+* `params`はチャンネルに接続する際のパラメータです。チャンネルによって接続時に必要とされるパラメータは異なります。パラメータ不要のチャンネルに接続する際は、このプロパティは省略可能です。
+
+<div class="info">ℹ️ IDはチャンネルごとではなく「チャンネルの接続ごと」です。なぜなら、同じチャンネルに異なるパラメータで複数接続するケースもあるからです。</div>
+
+### チャンネルからのメッセージを受け取る
+例えばタイムラインのチャンネルなら、新しい投稿があった時にメッセージを発します。そのメッセージを受け取ることで、タイムラインに新しい投稿がされたことをリアルタイムで知ることができます。
+
+チャンネルがメッセージを発すると、次のようなデータがJSONでストリームに流れてきます:
+```json
+{
+    type: 'channel',
+    body: {
+        id: 'foobar',
+        type: 'something',
+        body: {
+            some: 'thing'
+        }
+    }
+}
+```
+
+ここで、
+* `id`には前述したそのチャンネルに接続する際に設定したIDが設定されています。これで、このメッセージがどのチャンネルからのものなのか知ることができます。
+* `type`にはメッセージの種類が設定されます。チャンネルによって、どのような種類のメッセージが流れてくるかは異なります。
+* `body`にはメッセージの内容が設定されます。チャンネルによって、どのような内容のメッセージが流れてくるかは異なります。
+
+### チャンネルに向けてメッセージを送信する
+チャンネルによっては、メッセージを受け取るだけでなく、こちらから何かメッセージを送信し、何らかの操作を行える場合があります。
+
+チャンネルにメッセージを送信するには、次のようなデータをJSONでストリームに送信します:
+```json
+{
+    type: 'channel',
+    body: {
+        id: 'foobar',
+        type: 'something',
+        body: {
+            some: 'thing'
+        }
+    }
+}
+```
+
+ここで、
+* `id`には前述したそのチャンネルに接続する際に設定したIDを設定します。これで、このメッセージがどのチャンネルに向けたものなのか識別させることができます。
+* `type`にはメッセージの種類を設定します。チャンネルによって、どのような種類のメッセージを受け付けるかは異なります。
+* `body`にはメッセージの内容を設定します。チャンネルによって、どのような内容のメッセージを受け付けるかは異なります。
+
+### チャンネルから切断する
+チャンネルから切断するには、次のようなデータをJSONでストリームに送信します:
+
+```json
+{
+    type: 'disconnect',
+    body: {
+        id: 'foobar'
+    }
+}
+```
+
+ここで、
+* `id`には前述したそのチャンネルに接続する際に設定したIDを設定します。
+
+## ストリームを経由してAPIリクエストする
+
+ストリームを経由してAPIリクエストすると、HTTPリクエストを発生させずにAPIを利用できます。そのため、コードを簡潔にできたり、パフォーマンスの向上を見込めるかもしれません。
+
+ストリームを経由してAPIリクエストするには、次のようなデータをJSONでストリームに送信します:
+```json
+{
+    type: 'api',
+    body: {
+        id: 'xxxxxxxxxxxxxxxx',
+        endpoint: 'notes/create',
+        data: {
+            text: 'yee haw!'
+        }
+    }
+}
+```
+
+ここで、
+* `id`には、APIのレスポンスを識別するための、APIリクエストごとの一意なIDを設定する必要があります。UUIDや、簡単な乱数のようなもので構いません。
+* `endpoint`には、あなたがリクエストしたいAPIのエンドポイントを指定します。
+* `data`には、エンドポイントのパラメータを含めます。
+
+<div class="info">ℹ️ APIのエンドポイントやパラメータについてはAPIリファレンスをご確認ください。</div>
+
+### レスポンスの受信
+
+APIへリクエストすると、レスポンスがストリームから次のような形式で流れてきます。
+
+```json
+{
+    type: 'api:xxxxxxxxxxxxxxxx',
+    body: {
+        ...
+    }
+}
+```
+
+ここで、
+* `xxxxxxxxxxxxxxxx`の部分には、リクエストの際に設定された`id`が含まれています。これにより、どのリクエストに対するレスポンスなのか判別することができます。
+* `body`には、レスポンスが含まれています。
+
+## 投稿のキャプチャ
+
+Misskeyは投稿のキャプチャと呼ばれる仕組みを提供しています。これは、指定した投稿のイベントをストリームで受け取る機能です。
+
+例えばタイムラインを取得してユーザーに表示したとします。ここで誰かがそのタイムラインに含まれるどれかの投稿に対してリアクションしたとします。
+
+しかし、クライアントからするとある投稿にリアクションが付いたことなどは知る由がないため、リアルタイムでリアクションをタイムライン上の投稿に反映して表示するといったことができません。
+
+この問題を解決するために、Misskeyは投稿のキャプチャ機構を用意しています。投稿をキャプチャすると、その投稿に関するイベントを受け取ることができるため、リアルタイムでリアクションを反映させたりすることが可能になります。
+
+### 投稿をキャプチャする
+
+投稿をキャプチャするには、ストリームに次のようなメッセージを送信します:
+
+```json
+{
+    type: 'subNote',
+    body: {
+        id: 'xxxxxxxxxxxxxxxx'
+    }
+}
+```
+
+ここで、
+* `id`にキャプチャしたい投稿の`id`を設定します。
+
+このメッセージを送信すると、Misskeyにキャプチャを要請したことになり、以後、その投稿に関するイベントが流れてくるようになります。
+
+例えば投稿にリアクションが付いたとすると、次のようなメッセージが流れてきます:
+
+```json
+{
+    type: 'noteUpdated',
+    body: {
+        id: 'xxxxxxxxxxxxxxxx',
+        type: 'reacted',
+        body: {
+            reaction: 'like',
+            userId: 'yyyyyyyyyyyyyyyy'
+        }
+    }
+}
+```
+
+ここで、
+* `body`内の`id`に、イベントを発生させた投稿のIDが設定されます。
+* `body`内の`type`に、イベントの種類が設定されます。
+* `body`内の`body`に、イベントの詳細が設定されます。
+
+#### イベントの種類
+
+##### `reacted`
+その投稿にリアクションがされた時に発生します。
+
+* `reaction`に、リアクションの種類が設定されます。
+* `userId`に、リアクションを行ったユーザーのIDが設定されます。
+
+例:
+```json
+{
+    type: 'noteUpdated',
+    body: {
+        id: 'xxxxxxxxxxxxxxxx',
+        type: 'reacted',
+        body: {
+            reaction: 'like',
+            userId: 'yyyyyyyyyyyyyyyy'
+        }
+    }
+}
+```
+
+##### `deleted`
+その投稿が削除された時に発生します。
+
+* `deletedAt`に、削除日時が設定されます。
+
+例:
+```json
+{
+    type: 'noteUpdated',
+    body: {
+        id: 'xxxxxxxxxxxxxxxx',
+        type: 'deleted',
+        body: {
+            deletedAt: '2018-10-22T02:17:09.703Z'
+        }
+    }
+}
+```
+
+##### `pollVoted`
+その投稿に添付されたアンケートに投票された時に発生します。
+
+* `choice`に、選択肢IDが設定されます。
+* `userId`に、投票を行ったユーザーのIDが設定されます。
+
+例:
+```json
+{
+    type: 'noteUpdated',
+    body: {
+        id: 'xxxxxxxxxxxxxxxx',
+        type: 'pollVoted',
+        body: {
+            choice: 2,
+            userId: 'yyyyyyyyyyyyyyyy'
+        }
+    }
+}
+```
+
+### 投稿のキャプチャを解除する
+
+その投稿がもう画面に表示されなくなったりして、その投稿に関するイベントをもう受け取る必要がなくなったときは、キャプチャの解除を申請してください。
+
+次のメッセージを送信します:
+
+```json
+{
+    type: 'unsubNote',
+    body: {
+        id: 'xxxxxxxxxxxxxxxx'
+    }
+}
+```
+
+ここで、
+* `id`にキャプチャを解除したい投稿の`id`を設定します。
+
+このメッセージを送信すると、以後、その投稿に関するイベントは流れてこないようになります。
+
+# チャンネル一覧
+## `main`
+アカウントに関する基本的な情報が流れてきます。このチャンネルにパラメータはありません。
+
+### 流れてくるイベント一覧
+
+#### `renote`
+自分の投稿がRenoteされた時に発生するイベントです。自分自身の投稿をRenoteしたときは発生しません。
+
+#### `mention`
+誰かからメンションされたときに発生するイベントです。
+
+#### `readAllNotifications`
+自分宛ての通知がすべて既読になったことを表すイベントです。このイベントを利用して、「通知があることを示すアイコン」のようなものをオフにしたりする等のケースが想定されます。
+
+#### `meUpdated`
+自分の情報が更新されたことを表すイベントです。
+
+#### `follow`
+自分が誰かをフォローしたときに発生するイベントです。
+
+#### `unfollow`
+自分が誰かのフォローを解除したときに発生するイベントです。
+
+#### `followed`
+自分が誰かにフォローされたときに発生するイベントです。
+
+## `homeTimeline`
+ホームタイムラインの投稿情報が流れてきます。このチャンネルにパラメータはありません。
+
+### 流れてくるイベント一覧
+
+#### `note`
+タイムラインに新しい投稿が流れてきたときに発生するイベントです。
+
+## `localTimeline`
+ローカルタイムラインの投稿情報が流れてきます。このチャンネルにパラメータはありません。
+
+### 流れてくるイベント一覧
+
+#### `note`
+ローカルタイムラインに新しい投稿が流れてきたときに発生するイベントです。
+
+## `hybridTimeline`
+ソーシャルタイムラインの投稿情報が流れてきます。このチャンネルにパラメータはありません。
+
+### 流れてくるイベント一覧
+
+#### `note`
+ソーシャルタイムラインに新しい投稿が流れてきたときに発生するイベントです。
+
+## `globalTimeline`
+グローバルタイムラインの投稿情報が流れてきます。このチャンネルにパラメータはありません。
+
+### 流れてくるイベント一覧
+
+#### `note`
+グローバルタイムラインに新しい投稿が流れてきたときに発生するイベントです。
diff --git a/src/docs/cs-CZ/features/antenna.md b/src/docs/cs-CZ/features/antenna.md
new file mode 100644
index 0000000000..395327fd5f
--- /dev/null
+++ b/src/docs/cs-CZ/features/antenna.md
@@ -0,0 +1,4 @@
+# Antény
+アンテナは、自由に条件を設定して、合致するノートを自動で収集することができる機能です。
+
+条件を設定したアンテナが作成された状態で、条件に合致するノートが投稿されると、リアルタイムでそのアンテナのタイムラインにノートが追加されます。
diff --git a/src/docs/cs-CZ/features/custom-emoji.md b/src/docs/cs-CZ/features/custom-emoji.md
new file mode 100644
index 0000000000..39f490037d
--- /dev/null
+++ b/src/docs/cs-CZ/features/custom-emoji.md
@@ -0,0 +1,2 @@
+# Vlastní emoji
+カスタム絵文字は、インスタンスで用意された画像を絵文字のように使える機能です。 ノート、リアクション、チャット、自己紹介、名前などの場所で使うことができます。 カスタム絵文字をそれらの場所で使うには、絵文字ピッカーボタン(ある場合)を押すか、`:`を入力して絵文字サジェストを表示します。 テキスト内に`:foo:`のような形式の文字列が見つかると、`foo`の部分がカスタム絵文字名と解釈され、表示時には対応したカスタム絵文字に置き換わります。
diff --git a/src/docs/cs-CZ/features/deck.md b/src/docs/cs-CZ/features/deck.md
new file mode 100644
index 0000000000..8057e262fd
--- /dev/null
+++ b/src/docs/cs-CZ/features/deck.md
@@ -0,0 +1,18 @@
+# デッキ
+
+デッキは利用可能なUIのひとつです。「カラム」と呼ばれるビューを複数並べて表示させることで、カスタマイズ性が高く、情報量の多いUIが構築できることが特徴です。
+
+## カラムの追加
+デッキの背景を右クリックし、「カラムを追加」して任意のカラムを追加できます。
+
+## カラムの移動
+カラムは、ドラッグアンドドロップで他のカラムと位置を入れ替えることが出来るほか、カラムメニュー(カラムのヘッダー右クリック)から位置を移動させることもできます。
+
+## カラムの水平分割
+カラムは左右だけでなく、上下に並べることもできます。 カラムメニューを開き、「左に重ねる」を選択すると、左のカラムの下に現在のカラムが移動します。 上下分割を解除するには、カラムメニューの「右に出す」を選択します。
+
+## カラムの設定
+カラムメニューの「編集」を選択するとカラムの設定を編集できます。カラムの名前を変えたり、幅を変えたりできます。
+
+## デッキの設定
+デッキに関する設定は、[settings/deck](/settings/deck)で行えます。
diff --git a/src/docs/cs-CZ/features/drive.md b/src/docs/cs-CZ/features/drive.md
new file mode 100644
index 0000000000..a09eb0384c
--- /dev/null
+++ b/src/docs/cs-CZ/features/drive.md
@@ -0,0 +1,17 @@
+# Úložiště
+ドライブは、Misskey上でファイルを管理できる機能です。
+
+[ドライブのページ](/my/drive)から任意のファイルをアップロードできるほか、アバターに設定した画像や、ノートに添付したファイルなどもすべてドライブにアップロードされます。
+
+<div class="warn">⚠️ ドライブからファイルを削除すると、そのファイルが添付されたノートも消えます。</div>
+
+ドライブにアップロードされたファイルは、いつでもダウンロードすることができるほか、ノート作成時に「ドライブからファイルを添付」することでファイルを再利用することもできます。
+
+ドライブ内にフォルダを作り、複数のファイルをまとめて整理することもできます。
+
+## 閲覧注意 (NSFW)
+<div class="info">ℹ️ この項目が閲覧注意なわけではありません</div>
+
+閲覧注意またはNSFW (Not safe for work) は、ドライブのファイルに設定することができるフラグです。 閲覧注意フラグを設定されたファイルは、表示される際に閲覧者の操作なしには表示されなくなります。 このフラグは、例えば職場や公共の場で閲覧するのに適切でないと思われる画像などに設定し、そのような画像が突然表示されてしまうことを防ぐ目的で使われます。
+
+このフラグは手動でオンオフを切り替えられるほか、モデレーターの判断で設定される場合もあります。
diff --git a/src/docs/cs-CZ/features/favorite.md b/src/docs/cs-CZ/features/favorite.md
new file mode 100644
index 0000000000..b5134ffaa8
--- /dev/null
+++ b/src/docs/cs-CZ/features/favorite.md
@@ -0,0 +1,4 @@
+# Oblíbené
+[ノート](./node)をお気に入りとして登録できる機能です。 お気に入り登録したノートは、[お気に入りページ](./my/favorites)で一覧することができます。 お気に入りに登録したことは相手に通知されず、お気に入りは自分しか見ることができません。
+
+ノートをお気に入り登録するには、ノートメニューの「お気に入り」を押します。お気に入り解除するには、ノートメニューの「お気に入り解除」を押します。
diff --git a/src/docs/cs-CZ/features/follow.md b/src/docs/cs-CZ/features/follow.md
new file mode 100644
index 0000000000..61acb28956
--- /dev/null
+++ b/src/docs/cs-CZ/features/follow.md
@@ -0,0 +1,2 @@
+# Sledovaní
+ユーザーをフォローすると、タイムラインにそのユーザーの投稿が表示されるようになります。ただし、他のユーザーに対する返信は含まれません。 ユーザーをフォローするには、ユーザーページの「フォロー」ボタンをクリックします。フォローを解除するには、もう一度クリックします。
diff --git a/src/docs/cs-CZ/features/keyboard-shortcut.md b/src/docs/cs-CZ/features/keyboard-shortcut.md
new file mode 100644
index 0000000000..22b1797839
--- /dev/null
+++ b/src/docs/cs-CZ/features/keyboard-shortcut.md
@@ -0,0 +1,66 @@
+# キーボードショートカット
+
+## グローバル
+これらのショートカットは基本的にどこでも使えます。
+<table>
+    <thead>
+        <tr><th>ショートカット</th><th>効果</th><th>由来</th></tr>
+    </thead>
+    <tbody>
+        <tr><td><kbd class="key">P</kbd>, <kbd class="key">N</kbd></td><td>新規投稿</td><td><b>P</b>ost, <b>N</b>ew, <b>N</b>ote</td></tr>
+        <tr><td><kbd class="key">T</kbd></td><td>タイムラインの最も新しい投稿にフォーカス</td><td><b>T</b>imeline, <b>T</b>op</td></tr>
+        <tr><td><kbd class="group"><kbd class="key">Shift</kbd> + <kbd class="key">N</kbd></kbd></td><td>通知を表示/隠す</td><td><b>N</b>otifications</td></tr>
+        <tr><td><kbd class="key">S</kbd></td><td>Vyhledávání</td><td><b>S</b>earch</td></tr>
+        <tr><td><kbd class="key">H</kbd>, <kbd class="key">?</kbd></td><td>ヘルプを表示</td><td><b>H</b>elp</td></tr>
+    </tbody>
+</table>
+
+## 投稿にフォーカスされた状態
+<table>
+    <thead>
+        <tr><th>ショートカット</th><th>効果</th><th>由来</th></tr>
+    </thead>
+    <tbody>
+        <tr><td><kbd class="key">↑</kbd>, <kbd class="key">K</kbd>, <kbd class="group"><kbd class="key">Shift</kbd> + <kbd class="key">Tab</kbd></kbd></td><td>上の投稿にフォーカスを移動</td><td>-</td></tr>
+        <tr><td><kbd class="key">↓</kbd>, <kbd class="key">J</kbd>, <kbd class="key">Tab</kbd></td><td>下の投稿にフォーカスを移動</td><td>-</td></tr>
+        <tr><td><kbd class="key">R</kbd></td><td>返信フォームを開く</td><td><b>R</b>eply</td></tr>
+        <tr><td><kbd class="key">Q</kbd></td><td>Renoteフォームを開く</td><td><b>Q</b>uote</td></tr>
+        <tr><td><kbd class="group"><kbd class="key">Ctrl</kbd> + <kbd class="key">Q</kbd></kbd></td><td>即刻Renoteする(フォームを開かずに)</td><td>-</td></tr>
+        <tr><td><kbd class="key">E</kbd>, <kbd class="key">A</kbd>, <kbd class="key">+</kbd></td><td>リアクションフォームを開く</td><td><b>E</b>mote, re<b>A</b>ction</td></tr>
+        <tr><td><kbd class="key">0</kbd>~<kbd class="key">9</kbd></td><td>数字に対応したリアクションをする(対応については後述)</td><td>-</td></tr>
+        <tr><td><kbd class="key">F</kbd>, <kbd class="key">B</kbd></td><td>お気に入りに登録</td><td><b>F</b>avorite, <b>B</b>ookmark</td></tr>
+        <tr><td><kbd class="key">Del</kbd>, <kbd class="group"><kbd class="key">Ctrl</kbd> + <kbd class="key">D</kbd></kbd></td><td>投稿を削除</td><td><b>D</b>elete</tr>
+        <tr><td><kbd class="key">M</kbd>, <kbd class="key">O</kbd></td><td>投稿に対するメニューを開く</td><td><b>M</b>ore, <b>O</b>ther</td></tr>
+        <tr><td><kbd class="key">S</kbd></td><td>CWで隠された部分を表示 or 隠す</td><td><b>S</b>how, <b>S</b>ee</td></tr>
+        <tr><td><kbd class="key">Esc</kbd></td><td>フォーカスを外す</td><td>-</td></tr>
+    </tbody>
+</table>
+
+## Renoteフォーム
+<table>
+    <thead>
+        <tr><th>ショートカット</th><th>効果</th><th>由来</th></tr>
+    </thead>
+    <tbody>
+        <tr><td><kbd class="key">Enter</kbd></td><td>Renoteする</td><td>-</td></tr>
+        <tr><td><kbd class="key">Q</kbd></td><td>フォームを展開する</td><td><b>Q</b>uote</td></tr>
+        <tr><td><kbd class="key">Esc</kbd></td><td>フォームを閉じる</td><td>-</td></tr>
+    </tbody>
+</table>
+
+## リアクションフォーム
+デフォルトで「👍」にフォーカスが当たっている状態です。
+<table>
+    <thead>
+        <tr><th>ショートカット</th><th>効果</th><th>由来</th></tr>
+    </thead>
+    <tbody>
+        <tr><td><kbd class="key">↑</kbd>, <kbd class="key">K</kbd></td><td>上のリアクションにフォーカスを移動</td><td>-</td></tr>
+        <tr><td><kbd class="key">↓</kbd>, <kbd class="key">J</kbd></td><td>下のリアクションにフォーカスを移動</td><td>-</td></tr>
+        <tr><td><kbd class="key">←</kbd>, <kbd class="key">H</kbd>, <kbd class="group"><kbd class="key">Shift</kbd> + <kbd class="key">Tab</kbd></kbd></td><td>左のリアクションにフォーカスを移動</td><td>-</td></tr>
+        <tr><td><kbd class="key">→</kbd>, <kbd class="key">L</kbd>, <kbd class="key">Tab</kbd></td><td>右のリアクションにフォーカスを移動</td><td>-</td></tr>
+        <tr><td><kbd class="key">Enter</kbd>, <kbd class="key">Space</kbd>, <kbd class="key">+</kbd></td><td>リアクション確定</td><td>-</td></tr>
+        <tr><td><kbd class="key">0</kbd>~<kbd class="key">9</kbd></td><td>数字に対応したリアクションで確定</td><td>-</td></tr>
+        <tr><td><kbd class="key">Esc</kbd></td><td>リアクションするのをやめる</td><td>-</td></tr>
+    </tbody>
+</table>
diff --git a/src/docs/cs-CZ/features/mfm.md b/src/docs/cs-CZ/features/mfm.md
new file mode 100644
index 0000000000..5be2df4f30
--- /dev/null
+++ b/src/docs/cs-CZ/features/mfm.md
@@ -0,0 +1,12 @@
+# MFM
+MFMは、Misskey Flavored Markdownの略で、Misskeyの様々な場所で使用できる専用のマークアップ言語です。 MFMで使用可能な構文は[MFMチートシート](/mfm-cheat-sheet)で確認できます。
+
+## MFMが使用可能な場所の例
+- ノート本文
+- CW注釈
+- ユーザーの名前
+- ユーザーの自己紹介
+
+## 開発者向け情報
+MFMのパーサー実装はライブラリとして公開されており、簡単にクライアントにMFMを組み込むことが可能です。
+- [misskey-dev/mfm.js](https://github.com/misskey-dev/mfm.js) - JavaScriptパーサー実装
diff --git a/src/docs/cs-CZ/features/mute.md b/src/docs/cs-CZ/features/mute.md
new file mode 100644
index 0000000000..fb4ef68d5c
--- /dev/null
+++ b/src/docs/cs-CZ/features/mute.md
@@ -0,0 +1,13 @@
+# Ztlumit
+
+ユーザーをミュートすると、そのユーザーに関する次のコンテンツがMisskeyに表示されなくなります:
+
+* タイムラインや投稿の検索結果内の、そのユーザーの投稿(およびそれらの投稿に対する返信やRenote)
+* そのユーザーからの通知
+* メッセージ履歴一覧内の、そのユーザーとのメッセージ履歴
+
+ユーザーをミュートするには、対象のユーザーのユーザーページに表示されている「ミュート」ボタンを押します。
+
+ミュートを行ったことは相手に通知されず、ミュートされていることを知ることもできません。
+
+設定>ミュート から、自分がミュートしているユーザー一覧を確認することができます。
diff --git a/src/docs/cs-CZ/features/note.md b/src/docs/cs-CZ/features/note.md
new file mode 100644
index 0000000000..55bb8e6ec0
--- /dev/null
+++ b/src/docs/cs-CZ/features/note.md
@@ -0,0 +1,51 @@
+# Poznámky
+ノートは、Misskeyに投稿される、文章、ファイル、アンケートなどを含むコンテンツで、Misskeyの中心的概念です。また、そのノートを作成する行為自体もノートと呼ばれます。
+
+ノートが作成されると、[タイムライン](./timeline)に追加され、自分の[フォロワー](./follow)やサーバーのユーザーが見れるようになります。
+
+ノートには、[リアクション](./reaction)を行うことができます。また、返信や引用もできます。
+
+ノートを[お気に入り](./favorite)登録することで、後で簡単に見返すことができます。
+
+## ノートを作成する
+ノートを作成するには、画面上にある鉛筆マークのボタンを押して、作成フォームを開きます。作成フォームに内容を入力し、「ノート」ボタンを押すことでノートが作成されます。 ノートには、画像、動画など任意のファイルや、[アンケート](./poll)を添付することができます。また、本文中には[MFM](./mfm)が使用でき、[メンション](./mention)や[ハッシュタグ](./hashtag)を含めることもできます。 他にも、CWや公開範囲といった設定も行えます(詳細は後述)。
+<div class="info">ℹ️ コンピューターのクリップボードに画像データがある状態で、フォーム内のテキストボックスにペーストするとその画像を添付することができます。</div>
+<div class="info">ℹ️ テキストボックス内で<kbd class="key">Ctrl + Enter</kbd>を押すことでも投稿できます。</div>
+
+## Přeposlat
+既にあるノートを引用、もしくはそのノートを新しいノートとして共有する行為、またそれによって作成されたノートをRenoteと呼びます。 自分がフォローしているユーザーの、気に入ったノートを自分のフォロワーに共有したい場合や、過去の自分のノートを再度共有したい場合に使います。 同じノートに対して無制限にRenoteを行うことができますが、あまり連続して使用すると迷惑になる場合もあるので、注意しましょう。
+<div class="warn">⚠️ 公開範囲がフォロワーやダイレクトのノートはRenoteできません</div>
+
+Renoteを削除するには、Renoteの時刻表示の隣にある「...」を押し、「Renote解除」を選択します。
+
+## CW
+Contents Warningの略で、ノートの内容を、閲覧者の操作なしには表示しないようにできる機能です。主に長大な内容を隠すためや、ネタバレ防止などに使うことができます。 設定するには、フォームの「内容を隠す」ボタン(目のアイコン)を押します。すると新しい入力エリアが表れるので、そこに内容の要約を記入します。
+
+## 公開範囲
+ノートごとに、そのノートが公開される範囲を設定することができます。フォームの「ノート」ボタンの左にあるアイコンを押すと公開範囲を以下から選択できます。
+
+### パブリック
+全ての人に対してノートが公開されるほか、サーバーの全てのタイムライン(ホームタイムライン、ローカルタイムライン、ソーシャルタイムライン、グローバルタイムライン)にノートが流れます。
+<div class="warn">⚠️ アカウントが<a href="./silence">サイレンス</a>状態の時は、この公開範囲は使用できません。</div>
+
+### Domů
+全ての人に対してノートが公開されますが、フォロワー以外のローカルタイムライン、ソーシャルタイムライン、グローバルタイムラインにはノートは流れません。
+
+### Sledující
+自分のフォロワーに対してのみノートを公開します。フォロワーの全てのタイムラインに流れます。
+
+### ダイレクト
+指定したユーザーに対してのみノートを公開します。指定したユーザーの全てのタイムラインに流れます。
+
+### 「ローカルのみ」オプション
+このオプションを有効にすると、リモートにノートを連合しなくなります。
+
+### 公開範囲の比較
+<table>
+    <tr><th></th><th>パブリック</th><th>Domů</th><th>Sledující</th><th>ダイレクト</th></tr>
+    <tr><th>フォロワーのLTL/STL/GTL</th><td>✔</td><td>✔</td><td>✔</td><td></td></tr>
+    <tr><th>非フォロワーのLTL/STL/GTL</th><td>✔</td><td></td><td></td><td></td></tr>
+</table>
+
+## Připnout
+ノートをピン留めすると、ユーザーページに常にそのノートを表示しておくことができます。 ノートのメニューを開き、「ピン留め」を選択してピン留めできます。 複数のノートをピン留めできます。
diff --git a/src/docs/cs-CZ/features/pages.md b/src/docs/cs-CZ/features/pages.md
new file mode 100644
index 0000000000..a7311b95e6
--- /dev/null
+++ b/src/docs/cs-CZ/features/pages.md
@@ -0,0 +1,10 @@
+# Pages
+
+## 変数
+変数を使うことで動的なページを作成できます。テキスト内で <b>{ 変数名 }</b> と書くとそこに変数の値を埋め込めます。例えば <b>Hello { thing } world!</b> というテキストで、変数(thing)の値が <b>ai</b> だった場合、テキストは <b>Hello ai world!</b> になります。
+
+変数の評価(値を算出すること)は上から下に行われるので、ある変数の中で自分より下の変数を参照することはできません。例えば上から <b>A、B、C</b> と3つの変数を定義したとき、<b>C</b>の中で<b>A</b>や<b>B</b>を参照することはできますが、<b>A</b>の中で<b>B</b>や<b>C</b>を参照することはできません。
+
+ユーザーからの入力を受け取るには、ページに「ユーザー入力」ブロックを設置し、「変数名」に入力を格納したい変数名を設定します(変数は自動で作成されます)。その変数を使ってユーザー入力に応じた動作を行えます。
+
+関数を使うと、値の算出処理を再利用可能な形にまとめることができます。関数を作るには、「関数」タイプの変数を作成します。関数にはスロット(引数)を設定することができ、スロットの値は関数内で変数として利用可能です。また、関数を引数に取る関数(高階関数と呼ばれます)も存在します。関数は予め定義しておくほかに、このような高階関数のスロットに即席でセットすることもできます。
diff --git a/src/docs/cs-CZ/features/reaction.md b/src/docs/cs-CZ/features/reaction.md
new file mode 100644
index 0000000000..91bec9b9bb
--- /dev/null
+++ b/src/docs/cs-CZ/features/reaction.md
@@ -0,0 +1,11 @@
+# Reakce
+他の人のノートに、絵文字を付けて簡単にあなたの反応を伝えられる機能です。 リアクションするには、ノートの + アイコンをクリックしてピッカーを表示し、絵文字を選択します。 リアクションには[カスタム絵文字](./custom-emoji)も使用できます。
+
+## リアクションピッカーのカスタマイズ
+ピッカーに表示される絵文字を自分好みにカスタマイズすることができます。 設定の「リアクション」で設定します。
+
+## リモート投稿へのリアクションについて
+リアクションはMisskeyオリジナルの機能であるため、リモートインスタンスがMisskeyでない限りは、ほとんどの場合「Like」としてアクティビティが送信されます。一般的にはLikeは「お気に入り」として実装されているようです。
+
+## リモートからのリアクションについて
+リモートから「Like」アクティビティを受信したとき、Misskeyでは「👍」のリアクションとして解釈されます。
diff --git a/src/docs/cs-CZ/features/silence.md b/src/docs/cs-CZ/features/silence.md
new file mode 100644
index 0000000000..7e26feab0d
--- /dev/null
+++ b/src/docs/cs-CZ/features/silence.md
@@ -0,0 +1,6 @@
+# サイレンス
+サイレンスは、アカウントに設定される状態のひとつです。
+
+アカウントがサイレンス状態になると、ノートの公開範囲をパブリックにできなくなります。 ホーム、フォロワー、ダイレクトは選択可能なため、サイレンスを受けた場合でもフォロワーやあなたのユーザーページを直接訪れた場合は投稿を閲覧できますが、GTL(連合タイムライン)やLTL(ローカルタイムライン)には投稿が流れません。
+
+アカウントのサイレンス状態は、サーバーのモデレーターによって有効化/無効化されます。
diff --git a/src/docs/cs-CZ/features/theme.md b/src/docs/cs-CZ/features/theme.md
new file mode 100644
index 0000000000..f8827662e1
--- /dev/null
+++ b/src/docs/cs-CZ/features/theme.md
@@ -0,0 +1,68 @@
+# Vzhled
+
+テーマを設定して、Misskeyクライアントの見た目を変更できます。
+
+## テーマの設定
+設定 > テーマ
+
+## テーマを作成する
+テーマコードはJSON5で記述されたテーマオブジェクトです。 テーマは以下のようなオブジェクトです。
+``` js
+{
+    id: '17587283-dd92-4a2c-a22c-be0637c9e22a',
+
+    name: 'Danboard',
+    author: 'syuilo',
+
+    base: 'light',
+
+    props: {
+        accent: 'rgb(218, 141, 49)',
+        bg: 'rgb(218, 212, 190)',
+        fg: 'rgb(115, 108, 92)',
+        panel: 'rgb(236, 232, 220)',
+        renote: 'rgb(100, 152, 106)',
+        link: 'rgb(100, 152, 106)',
+        mention: '@accent',
+        hashtag: 'rgb(100, 152, 106)',
+        header: 'rgba(239, 227, 213, 0.75)',
+        navBg: 'rgb(216, 206, 182)',
+        inputBorder: 'rgba(0, 0, 0, 0.1)',
+    },
+}
+
+```
+
+* `id` ... テーマの一意なID。UUIDをおすすめします。
+* `name` ... テーマ名
+* `author` ... テーマの作者
+* `desc` ... テーマの説明(オプション)
+* `base` ... 明るいテーマか、暗いテーマか
+    * `light`にすると明るいテーマになり、`dark`にすると暗いテーマになります。
+    * テーマはここで設定されたベーステーマを継承します。
+* `props` ... テーマのスタイル定義。これから説明します。
+
+### テーマのスタイル定義
+`props`下にはテーマのスタイルを定義します。 キーがCSSの変数名になり、バリューで中身を指定します。 なお、この`props`オブジェクトはベーステーマから継承されます。 ベーステーマは、このテーマの`base`が`light`なら[_light.json5](https://github.com/misskey-dev/misskey/blob/develop/src/client/themes/_light.json5)で、`dark`なら[_dark.json5](https://github.com/misskey-dev/misskey/blob/develop/src/client/themes/_dark.json5)です。 つまり、このテーマ内の`props`に`panel`というキーが無くても、そこにはベーステーマの`panel`があると見なされます。
+
+#### バリューで使える構文
+* 16進数で表された色
+    * 例: `#00ff00`
+* `rgb(r, g, b)`形式で表された色
+    * 例: `rgb(0, 255, 0)`
+* `rgb(r, g, b, a)`形式で表された透明度を含む色
+    * 例: `rgba(0, 255, 0, 0.5)`
+* 他のキーの値の参照
+    * `@{キー名}`と書くと他のキーの値の参照になります。`{キー名}`は参照したいキーの名前に置き換えます。
+    * 例: `@panel`
+* 定数(後述)の参照
+    * `${定数名}`と書くと定数の参照になります。`{定数名}`は参照したい定数の名前に置き換えます。
+    * 例: `$main`
+* 関数(後述)
+    * `:{関数名}<{引数}<{色}`
+
+#### 定数
+「CSS変数として出力はしたくないが、他のCSS変数の値として使いまわしたい」値があるときは、定数を使うと便利です。 キー名を`$`で始めると、そのキーはCSS変数として出力されません。
+
+#### 関数
+wip
diff --git a/src/docs/cs-CZ/features/timeline.md b/src/docs/cs-CZ/features/timeline.md
new file mode 100644
index 0000000000..f7381f12a6
--- /dev/null
+++ b/src/docs/cs-CZ/features/timeline.md
@@ -0,0 +1,31 @@
+# Časová osa
+タイムラインは、[ノート](./note)が時系列で表示される機能です。 タイムラインには以下で示す種類があり、種類によって表示されるノートも異なります。 なお、タイムラインの種類によってはサーバーにより無効になっている場合があります。
+
+## Domů
+自分のフォローしているユーザーの投稿が流れます。HTLと略されます。
+
+## ローカル
+全てのローカルユーザーの「ホーム」指定されていない投稿が流れます。LTLと略されます。
+
+## ソーシャル
+自分のフォローしているユーザーの投稿と、全てのローカルユーザーの「ホーム」指定されていない投稿が流れます。STLと略されます。
+
+## グローバル
+全てのローカルユーザーの「ホーム」指定されていない投稿と、サーバーに届いた全てのリモートユーザーの「ホーム」指定されていない投稿が流れます。GTLと略されます。
+
+## 比較
+| ソース          |           |      | Časová osa |       |       |
+| ------------ | --------- | ---- | ---------- | ----- | ----- |
+| Uživatelé    | 公開範囲      | Domů | ローカル       | ソーシャル | グローバル |
+| ローカル (フォロー)  | 公開        | ✔    | ✔          | ✔     | ✔     |
+|              | Domů      | ✔    |            | ✔     |       |
+|              | Sledující | ✔    | ✔          | ✔     | ✔     |
+| リモート (フォロー)  | 公開        | ✔    |            | ✔     | ✔     |
+|              | Domů      | ✔    |            | ✔     |       |
+|              | Sledující | ✔    |            | ✔     | ✔     |
+| ローカル (未フォロー) | 公開        |      | ✔          | ✔     | ✔     |
+|              | Domů      |      |            |       |       |
+|              | Sledující |      |            |       |       |
+| リモート (未フォロー) | 公開        |      |            |       | ✔     |
+|              | Domů      |      |            |       |       |
+|              | Sledující |      |            |       |       |
diff --git a/src/docs/cs-CZ/features/widgets.md b/src/docs/cs-CZ/features/widgets.md
new file mode 100644
index 0000000000..a7c2c1d1d6
--- /dev/null
+++ b/src/docs/cs-CZ/features/widgets.md
@@ -0,0 +1,7 @@
+# ウィジェット
+ウィジェットは、MisskeyのUI上に設置できる小型の情報表示、操作が行えるパーツです。
+
+ウィジェットを編集するには、ウィジェット編集モードに切り替えます。切り替え方法はUIによって異なります。 ウィジェット編集モードでは、ウィジェットの追加、削除、並び替え、およびそれぞれのウィジェットの設定を行えます。
+
+## 利用可能なウィジェット一覧
+todo
diff --git a/src/docs/cs-CZ/general/apps.md b/src/docs/cs-CZ/general/apps.md
new file mode 100644
index 0000000000..1f4c85fe8f
--- /dev/null
+++ b/src/docs/cs-CZ/general/apps.md
@@ -0,0 +1,6 @@
+# サードパーティアプリのリスト
+## クライアント
+todo
+
+## 連携サービス
+todo
diff --git a/src/docs/cs-CZ/general/faq.md b/src/docs/cs-CZ/general/faq.md
new file mode 100644
index 0000000000..ecb664e32e
--- /dev/null
+++ b/src/docs/cs-CZ/general/faq.md
@@ -0,0 +1,22 @@
+# よくある質問
+ここでは利用上のよくある質問について掲載しています。 Misskeyのプロジェクト自体についてのよくある質問は[こちら](./misskey)に掲載されています。
+
+### iOS/Androidのアプリはありますか?
+公式にはそういったOSのネイティブアプリを開発していませんが、サードパーティ製のアプリがいくつかあります。 詳しくは[こちら](./apps)をご覧ください。
+
+ただ、サードパーティ製アプリはどうしても機能への対応が遅れてしまうため、とくに拘りがなければ公式のWebクライアントの利用をおすすめします。 なお、MisskeyのWebクライアントはPWAに対応しているので、ネイティブアプリのように動作させることも可能です。 詳しくは[こちら](todo)をご覧ください。
+
+## 他のサーバーのユーザーをフォローするときは?
+メニューから検索を選び、ユーザー名をホスト込みで入力します。例: `@syuilo@misskey.io`
+
+## Renoteを削除するには?
+Renoteの時刻表示の隣にある「...」を押し、「Renote解除」を選択します。 Renoteについては[こちら](../features/note)をご確認ください。
+
+## URLのプレビューを表示させたくない
+MFMには、そのURLのプレビューを無効にする構文があります。詳細は[MFMチートシート](/mfm-cheat-sheet)をご確認ください。
+
+## カスタム絵文字を追加したい
+運営者のみがカスタム絵文字を追加、編集、削除できます。それらを希望する場合は運営者に依頼してください。
+
+## Botを開発したい
+Misskey APIを利用してBotの開発が可能です。[こちら](../advanced/develop-bot)をご確認ください。
diff --git a/src/docs/cs-CZ/general/glossary.md b/src/docs/cs-CZ/general/glossary.md
new file mode 100644
index 0000000000..8596303efb
--- /dev/null
+++ b/src/docs/cs-CZ/general/glossary.md
@@ -0,0 +1,83 @@
+# 用語集
+Misskeyに関する用語集です。
+
+## AcitivityPub
+(読み: あくてぃびてぃぱぶ) 分散型を実現するために用いられるプロトコル(仕様)。このプロトコルに則ってサーバー同士通信を行うことで、連合が行われ、Fediverseを形成しています。
+
+## AiScript
+(読み: あいすくりぷと) Misskey上で使用できるプログラミング言語です。詳細は[こちら。](../advanced/aiscript)
+
+## API
+(読み: えーぴーあい) Misskeyのサーバーが公開している、プログラムからMisskeyを扱うためのインターフェース。詳細は[こちら。](../advanced/api)
+
+## Bot
+(読み: ぼっと) プログラムによって動作しているアカウント。
+
+## CW
+(読み: こんてんつわーにんぐ) Contents Warningの略。ノートの内容を、操作なしには表示しないようにできる機能。主に長大な内容を隠すためや、ネタバレ防止などに使われます。
+
+## Fediverse
+(読み: ふぇでぃばーす) Misskeyを含む様々な分散型ソフトウェアのサーバーで構成されたネットワーク。
+
+## GTL
+グローバルタイムライン(Global TimeLine)の略。タイムラインの詳細は[こちら。](../features/timeline)
+
+## HTL
+ホームタイムライン(Home TimeLine)の略。タイムラインの詳細は[こちら。](../features/timeline)
+
+## LTL
+ローカルタイムライン(Local TimeLine)の略。タイムラインの詳細は[こちら。](../features/timeline)
+
+## MFM
+(読み: えむえふえむ) Misskey Flavored Markdownの略で、Misskey上で使用できるマークアップ言語です。詳細は[こちら。](../features/mfm)
+
+## NSFW
+(読み: のっとせーふふぉーわーく) Not Safe For Workの略。画像を「閲覧注意」扱いにし、操作なしには表示しないようにすることができる機能。
+
+## Přeposlat
+(読み: りのーと) 既にあるノートを引用、もしくはそのノートを新しいノートとして共有する行為、またそれによって作成されたノート。詳細は[こちら。](../features/note)
+
+## STL
+ソーシャルタイムライン(Social TimeLine)の略。タイムラインの詳細は[こちら。](../features/timeline)
+
+## 藍
+(読み: あい) Misskeyの看板娘(公式キャラクター)です。
+
+## アクティブユーザー
+インスタンスにアカウントを作っているユーザーのうち、現在も実際にサービスを利用しているユーザーのこと。
+
+## Instance
+todo
+
+## コントロールパネル
+インスタンスの設定画面のこと。
+
+## サーバー
+todo
+
+## サイレンス
+ノートをパブリックな公開範囲で投稿できなくされている状態。モデレーターの判断でユーザーごとに設定されます。詳細は[こちら。](../features/silence)
+
+## Zmrazit
+アカウントが使用不可に設定されている状態。
+
+## Úložiště
+Misskeyにアップロードしたファイルを管理する機能。詳細は[こちら。](../features/drive)
+
+## Poznámky
+Misskeyに投稿される、文章、ファイル、アンケートなどを含めることができるコンテンツ。詳細は[こちら。](../features/note)
+
+## ミスキスト
+Misskeyを使う人のこと。
+
+## Moderátor
+スパムの凍結およびサイレンスや不適切な投稿の削除など、コミュニティ運営に関する権限を持つユーザー。
+
+## リモート
+他サーバーのことを指します。リモートユーザーといったように接頭辞としても使われます。ローカルの逆です。
+
+## 連合
+サーバー上で作成された情報が他のサーバーに伝わること。
+
+## ローカル
+自サーバーのことを指します。ローカルユーザー、ローカルタイムラインといったように接頭辞としても使われます。リモートの逆です。
diff --git a/src/docs/cs-CZ/general/links.md b/src/docs/cs-CZ/general/links.md
new file mode 100644
index 0000000000..d6b16856fb
--- /dev/null
+++ b/src/docs/cs-CZ/general/links.md
@@ -0,0 +1,5 @@
+# リンク集
+
+## ライブラリ
+- [misskey-dev/misskey.js](https://github.com/misskey-dev/misskey.js) - JavaScriptのMisskey SDK
+- [misskey-dev/mfm.js](https://github.com/misskey-dev/mfm.js) - JavaScriptのMFMパーサー実装
diff --git a/src/docs/cs-CZ/general/misskey.md b/src/docs/cs-CZ/general/misskey.md
new file mode 100644
index 0000000000..2ad7e0da66
--- /dev/null
+++ b/src/docs/cs-CZ/general/misskey.md
@@ -0,0 +1,87 @@
+# O Misskey
+
+Misskeyはオープンソースの分散型マイクロブログプラットフォームプロジェクトです。 開発は日本でsyuiloによって2014年から開始されました。 ドライブ、リアクションなどの豊富な機能や、高いカスタマイズ性を備えたUIを持つことが特徴です。
+
+## 歴史
+開発当初は掲示板がメインのサービスでしたが、ユーザーが短文を投稿し、それを時系列で流れるタイムライン機能を追加したところ人気が高まり、徐々にそれがメインとして開発が進むようになりました。 当初は分散型ではありませんでしたが、2018年にAcitivityPubを実装し分散型になったことで、より多くの方に認知され利用されるサービスになり、現在に至ります。
+<div class="info">ℹ️ Misskeyという名前は、syuiloが当時聴いていたMay'nというアーティストの楽曲、Brain Diverの歌詞に由来します。</div>
+
+誰でも開発に参加することができ、現在でも活発に開発が続いています。
+
+## 分散型とは何か?
+
+<b>分散(distributed)型</b>とは、<b>非中央集権(decentralized)</b>とも呼ばれ、コミュニティが多数のサーバーに分散して存在し、それらが相互に<b>通信(連合、federation)</b>することでコンテンツ共有<b>ネットワーク(Fediverse)</b>を形成していることが特徴のサービスです。 単一のサーバーしか存在しない、もしくは複数存在しても互いに独立している場合は中央集権なサービスと言われ、例えばTwitterやFacebookなどほとんどのサービスがそれに該当します。 分散型のメリットは、自分に合った運営者やテーマのサーバーを選択できることです。自分でサーバーを作成することもできます。連合するおかげで、どのサーバーを選んでも、同じコミュニティにアクセスできます。
+
+## 常にオープンソース
+Misskeyはこれまでもこれからも、オープンソースであり続けます。オープンソースとは、簡単に言うと<b>ソフトウェアのソースコード(プログラム)が公開されている</b>ことです。ソースコードの修正や再配布が可能であることを定義に含めることもあります。 Misskeyのすべてのソースコードは[AGPL](https://github.com/misskey-dev/misskey/blob/develop/LICENSE)というオープンソースライセンスの下に[公開](https://github.com/misskey-dev)されていて、誰でも自由に閲覧、使用、修正、改変、再配布をすることができます。 オープンソースは、自分で好きなように変えたり、有害な処理が含まれていないことを確認することができたり、誰でも開発に参加できるなどの、様々なメリットがあります。 上述の分散型を実現するためにも、オープンソースであるということは必要不可欠な要素です。 再び引き合いに出しますが、TwitterやFacebookなどの利益を得ているほとんどのサービスはオープンソースではありません。
+
+<div class="info">ℹ️ 技術的に言うと、MisskeyのソースコードはGitで管理されていて、リポジトリは<a href="https://github.com/misskey-dev" target="_blank">GitHub上でホスティングされています。</a></div>
+
+## 開発に参加する、プロジェクトを支援する
+Misskeyを気に入っていただけたら、ぜひプロジェクトを支援してください。プロジェクトに貢献するには、以下で紹介するようにいろいろな方法があります。方法によっては開発のスキルは不要なので、誰でも気軽に参加し貢献することができます。いつでもお待ちしています。
+
+### 機能を追加したり、バグを修正する
+ソフトウェアエンジニアのスキルをお持ちの方であれば、ソースコードを編集する形でプロジェクトに貢献することができます。 貢献についてのガイドは[こちら](https://github.com/misskey-dev/misskey/blob/develop/CONTRIBUTING.md)です。
+
+### 議論に参加する
+新しい機能、または既存の機能について意見を述べたり、不具合を報告したりすることでも貢献できます。 そのようなディスカッションは[GitHub](https://github.com/misskey-dev)上か、[フォーラム](https://forum.misskey.io/)等で行われます。
+
+### テキストを翻訳する
+Misskeyは様々な言語に対応しています(i18n -internationalizationの略- と呼ばれます)。元の言語は基本的に日本語ですが、有志によって他の言語へと翻訳されています。 その翻訳作業に加わっていただくことでもMisskeyに貢献できます。 Misskeyは[Crowdinというサービスを使用して翻訳の管理を行っています。](https://crowdin.com/project/misskey)
+
+### 感想を投稿する
+不具合報告等だけではなく、Misskeyの良い点、楽しい点といったポジティブな意見もぜひ共有してください。開発の励みになり、それは間接的ですがプロジェクトへの貢献です。
+
+### ミスキストを増やす
+ミスキストとは、Misskeyを使用する人のことです。 知り合いに紹介するなどしてMisskeyを広めていただければ、ミスキストが増え開発のモチベーションが上がります。
+
+### 寄付をする
+Misskeyはビジネスではなく、利用は無料であるため、収益は皆様からの寄付のみです。(インスタンスによっては広告収入を得ているような場合もありますが、それは運営者の収入であり直接開発者への収入にはなりません) 寄付をしていただければ、今後も開発を続けることが可能になり、プロジェクトへの貢献になります。 寄付は基本的には[Patreon](https://www.patreon.com/syuilo)で受け付けています。 一定額寄付していただけると、Misskeyの[情報ページ](/about-misskey)に名前を記載することができます。
+
+また、サーバーの運営者も、基本的には収益を得ていません。サーバーの運営にはコストがかかるので、運営者の支援をすることもご検討ください。 開発には直接関係しませんが、サーバーがあってこそのプロジェクトなので、運営が維持されるというのは開発と同じくらい重要なことです。
+
+## クレジット
+Misskeyの開発者や、Misskeyに寄付をしてくださった方の一覧は[こちら](/about-misskey)で見ることができます。
+
+## よくある質問
+### プロジェクトは何を目指していますか?
+強いて言うと、漠然的になりますが広く使われる汎用的なプラットフォームになることを目指しています。 Misskeyは他のプロジェクトとは違い、何らかの思想(例えば、反中央集権)やビジョンに基づいて開発が行われているわけではなく、その点ではフラットです。 それが逆に、特定の方向性に縛られないフレキシブルさを生み出すことに繋がっていると感じています。
+<!-- TODO: ここにロードマップへのリンク -->
+
+### 企業によって開発されていますか?
+いいえ。Misskeyの開発は個人で行われており、商業的でもないため、特定の企業の関りはありません。 開発メンバーも基本的にはボランティアです。 また、開発に対し企業のスポンサーがつくこともありますが、その場合でもやはり開発は個人のコミュニティが主体です。
+
+### 誰が運営していますか?
+Misskeyは分散型なため、各サーバーにそれぞれ異なった運営者がいます。従って、特定の個人や企業によって、Misskeyの全てが運営されているわけではありません。 また、開発チームが運営を行うわけでもないため、運営に関する連絡は、お使いのサーバーの運営者に行ってください。 サーバーの運営者は、[このページ](/about)で確認することができます。 あなたがサーバーを作成すれば、あなたが運営者になります。
+
+### どのサーバーを選べばいいですか?
+[サーバー一覧が公開されています。](https://join.misskey.page/ja-JP/instances) サーバーによってコミュニティのテーマ(特定のこと、ものが好き 等)が決められている場合があるので、自分に合ったテーマのサーバーがあれば、そこを選ぶと良いかもしれません。 他にも、サーバーの規模、ユーザー層、国および言語、運営者が信頼できるかどうか、などの観点があります。 なお、Misskey公式のサーバーというものはありません。自身で新しくサーバーを作成するという選択肢もあります。
+
+基本的にどのサーバーを選んだとしても、他の全てのサーバーのユーザーと繋がることができます。
+
+### サーバーを建てるにはどうしたらいいですか?
+Misskeyサーバーの作成に興味を持っていただきありがとうございます。 2021年現在、Misskeyのホスティングサービスは存在しないため、サーバーの作成にはある程度の知識が必要です。 サーバーの作成方法については[こちら](todo)をご覧ください。
+
+### どのような技術を使用していますか?
+Misskeyは開発が進むにつれ使用する技術も大きく変わってきました。開発当初はMySQL + PHP + jQueryといった構成でしたが、現在は以下のようになっています。
+- サーバーサイド: Node.js
+- データベース: PostgreSQL、Redis
+- UIフレームワーク: Vue.js
+- プログラミング言語: TypeScript
+
+また、MFMやAiScriptなどの、Misskeyから派生して独自の技術も開発しています。
+
+### Mastodonのフォークですか?
+いいえ。MisskeyはMastodonやその他のプロジェクトとは全く別のプロジェクトです。 開発に関しても、Misskeyの方が昔から開発されています。ただし、分散型になったのはMastodonの登場より後です。 同じAcitivityPubという分散のためのプロトコルを実装しているという点以外、両者に特に関りがあるわけでもありません。
+
+### iOS/Androidのアプリはありますか?
+公式にはそういったOSのネイティブアプリを開発していませんが、サードパーティ製のアプリがいくつかあります。 詳しくは[こちら](./apps)をご覧ください。
+
+ただ、サードパーティ製アプリはどうしても機能への対応が遅れてしまうため、とくに拘りがなければ公式のWebクライアントの利用をおすすめします。 なお、MisskeyのWebクライアントはPWAに対応しているので、ネイティブアプリのように動作させることも可能です。 詳しくは[こちら](todo)をご覧ください。
+
+### Misskeyのロゴ、アイコンはどこで入手できますか?
+(準備中)
+
+### 時折目にする猫耳の可愛い女の子は?
+Misskeyの守り神、藍ちゃんです。アイチャンカワイイヤッター!
+<div class="info">ℹ️ 藍ちゃんについては<a href="https://xn--931a.moe/" target="_blank">こちら</a>です。</div>
diff --git a/src/docs/cs-CZ/general/report-issue.md b/src/docs/cs-CZ/general/report-issue.md
new file mode 100644
index 0000000000..63527e32af
--- /dev/null
+++ b/src/docs/cs-CZ/general/report-issue.md
@@ -0,0 +1,8 @@
+# 不具合の報告
+不具合と思われる状況に遭遇したときは、まず[トラブルシューティング](./troubleshooting)をご一読ください。 それでも問題が解決しないときは、以下の情報を含めて[フォーラム](https://forum.misskey.io/)に投稿してください。 投稿することで、解決策が見つかったり、不具合と判断されれば開発チームによって修正が行われます。
+
+## 含める情報
+- Misskeyのバージョン([情報ページ](/about)で確認できます)
+- お使いのブラウザの種類とバージョン
+- お使いのOSの種類とバージョン
+- 問題の再現手順
diff --git a/src/docs/cs-CZ/general/troubleshooting.md b/src/docs/cs-CZ/general/troubleshooting.md
new file mode 100644
index 0000000000..4a35091299
--- /dev/null
+++ b/src/docs/cs-CZ/general/troubleshooting.md
@@ -0,0 +1,36 @@
+# トラブルシューティング
+<div class="info">ℹ️ <a href="./faq">よくある質問</a>も合わせてお役立てください。</div>
+
+問題が発生したときは、まずこちらをご確認ください。 該当する項目が無い、もしくは手順を試しても効果がない場合は、サーバーの管理者に連絡するか[不具合を報告](./report-issue)してください。
+
+## クライアントが起動しない
+ほとんどの場合、お使いのブラウザまたはOSのバージョンが古いことが原因です。 ブラウザおよびOSのバージョンを最新のものに更新してから、再度試してみてください。
+
+これは稀ですが、それでも起動しない場合は、キャッシュが原因の場合があります。ブラウザのキャッシュをクリアして、再度試してみてください。
+
+## ページが読み込めない
+クライアントが起動するもののページが読み込めないというエラーが出る場合は、ネットワークに問題がないか確認してください。また、サーバーがダウンしていないか確認してください。
+
+これは稀ですが、キャッシュが原因の場合があります。ブラウザのキャッシュをクリアして、再度試してみてください。
+
+まだ問題がある場合は、サーバーの問題と思われるのでサーバーの管理者に連絡してください。
+
+## クライアントの動作が遅い
+以下を試してみてください:
+
+- クライアント設定で「UIのアニメーションを減らす」を有効にする
+- クライアント設定で「モーダルにぼかし効果を使用」を無効にする
+- お使いのブラウザの設定でハードウェアアクセラレーションを有効にする
+- お使いのデバイスのスペックを上げる
+
+## 通知やアンテナ等の点滅が消えない
+点滅は、未読のコンテンツがあることを示しています。通常点滅が消えない場合は、コンテンツを遡ると未読なコンテンツが残っています。 すべて既読にしたと思われるのに、それでもなお点滅が続く場合(おそらく不具合と思われます)は設定から強制的にすべて既読扱いにすることができます。
+
+## Renoteができない
+フォロワー限定のノートはRenoteすることはできません。
+
+## UI上で特定の要素が表示されない
+広告ブロッカーを使用しているとそのような不具合が発生することがあります。Misskeyではオフにしてご利用ください。
+
+## UI上で未翻訳の部分がある
+ほとんどの場合、単に翻訳が間に合っていないだけで、不具合ではありません。翻訳が終わるまでお待ちください。 [翻訳に参加](./misskey)していただくことも可能です。
diff --git a/src/docs/da-DK/admin/disable-timelines.md b/src/docs/da-DK/admin/disable-timelines.md
new file mode 100644
index 0000000000..b081e35ab0
--- /dev/null
+++ b/src/docs/da-DK/admin/disable-timelines.md
@@ -0,0 +1,8 @@
+# LTL/STL/GTLの無効化
+Misskeyでは、LTL/STL/GTLをそれぞれ無効化することができます。有効/無効を切り替えるには、インスタンスコントロールパネルで設定します。
+
+LTLやSTLは、そのインスタンス全員の投稿が見れるため、新規のユーザーにとってはユーザーを探す必要がなくなり、興味のあるユーザーを見つけやすいという利点があります。 しかし同時に、フォロー機能が活用されなくなったり、不適切な投稿が目につきやすくなったり、チャットのようになることで内輪感が生じて逆に新規ユーザーが参加しにくくなるといったデメリットも持ち合わせています。 サーバーによってメリット/デメリットどちらが優勢かは異なるので、オプションとして無効にできるようになっています。 もしデメリットの方が上回っていると感じたら、それらのタイムラインを無効化することも検討してください。
+
+<div class="warn">⚠️ 無効化を行うと、ユーザーが困惑し、短期的に見て利用者が減る可能性があります。そのため、無効化の際は影響を慎重に検討し、事前に説明してフォローを整える期間を一定程度設けることを推奨します。</div>
+
+なお、管理者/モデレーターは、これらのタイムラインの無効化状態は適用されず、引き続き利用することが可能です。
diff --git a/src/docs/da-DK/admin/faq.md b/src/docs/da-DK/admin/faq.md
new file mode 100644
index 0000000000..317b4e0655
--- /dev/null
+++ b/src/docs/da-DK/admin/faq.md
@@ -0,0 +1,5 @@
+# よくある質問
+ここでは、サーバー管理者向けのよくある質問を掲載しています。
+
+## デフォルトテーマを設定したい
+現在、デフォルトテーマ設定機能は実装されていません。
diff --git a/src/docs/da-DK/advanced/aiscript.md b/src/docs/da-DK/advanced/aiscript.md
new file mode 100644
index 0000000000..604d17daa8
--- /dev/null
+++ b/src/docs/da-DK/advanced/aiscript.md
@@ -0,0 +1,7 @@
+# AiScript
+AiScriptは、Misskeyで使用できるスクリプト言語です。
+
+<div class="info">ℹ️ AiScript実装はMisskeyとは別リポジトリで、<a href="https://github.com/syuilo/aiscript" target="_blank">オープンソースで公開されています。</a></div>
+
+## 使い方
+AiScriptの構文や組み込み関数などのドキュメントは、[こちら](https://github.com/syuilo/aiscript/tree/master/docs)で公開されています。
diff --git a/src/docs/da-DK/advanced/api.md b/src/docs/da-DK/advanced/api.md
new file mode 100644
index 0000000000..76019b6145
--- /dev/null
+++ b/src/docs/da-DK/advanced/api.md
@@ -0,0 +1,58 @@
+# Misskey API
+
+MisskeyAPIを使ってMisskeyクライアント、Misskey連携Webサービス、Bot等(以下「アプリケーション」と呼びます)を開発できます。 ストリーミングAPIもあるので、リアルタイム性のあるアプリケーションを作ることも可能です。
+
+APIを使い始めるには、まずアクセストークンを取得する必要があります。 このドキュメントでは、アクセストークンを取得する手順を説明した後、基本的なAPIの使い方を説明します。
+
+## アクセストークンの取得
+基本的に、APIはリクエストにはアクセストークンが必要となります。 APIにリクエストするのが自分自身なのか、不特定の利用者に使ってもらうアプリケーションなのかによって取得手順は異なります。
+
+* 前者の場合: [「自分自身のアクセストークンを手動発行する」](#自分自身のアクセストークンを手動発行する)に進む
+* 後者の場合: [「アプリケーション利用者にアクセストークンの発行をリクエストする」](#アプリケーション利用者にアクセストークンの発行をリクエストする)に進む
+
+### 自分自身のアクセストークンを手動発行する
+「設定 > API」で、自分のアクセストークンを発行できます。
+
+[「APIの使い方」へ進む](#APIの使い方)
+
+### アプリケーション利用者にアクセストークンの発行をリクエストする
+アプリケーション利用者のアクセストークンを取得するには、以下の手順で発行をリクエストします。
+
+#### Step 1
+
+UUIDを生成する。以後これをセッションIDと呼びます。
+
+> このセッションIDは毎回生成し、使いまわさないようにしてください。
+
+#### Step 2
+
+`{_URL_}/miauth/{session}`をユーザーのブラウザで表示させる。`{session}`の部分は、セッションIDに置き換えてください。
+> 例: `{_URL_}/miauth/c1f6d42b-468b-4fd2-8274-e58abdedef6f`
+
+表示する際、URLにクエリパラメータとしていくつかのオプションを設定できます:
+* `name` ... アプリケーション名
+    * > 例: `MissDeck`
+* `icon` ... アプリケーションのアイコン画像URL
+    * > 例: `https://missdeck.example.com/icon.png`
+* `callback` ... 認証が終わった後にリダイレクトするURL
+    * > 例: `https://missdeck.example.com/callback`
+    * リダイレクト時には、`session`というクエリパラメータでセッションIDが付きます
+* `permission` ... アプリケーションが要求する権限
+    * > 例: `write:notes,write:following,read:drive`
+    * 要求する権限を`,`で区切って列挙します
+    * どのような権限があるかは[APIリファレンス](/api-doc)で確認できます
+
+#### Step 3
+ユーザーが発行を許可した後、`{_URL_}/api/miauth/{session}/check`にPOSTリクエストすると、レスポンスとしてアクセストークンを含むJSONが返ります。
+
+レスポンスに含まれるプロパティ:
+* `token` ... ユーザーのアクセストークン
+* `user` ... ユーザーの情報
+
+[「APIの使い方」へ進む](#APIの使い方)
+
+## APIの使い方
+**APIはすべてPOSTで、リクエスト/レスポンスともにJSON形式です。RESTではありません。** アクセストークンは、`i`というパラメータ名でリクエストに含めます。
+
+* [APIリファレンス](/api-doc)
+* [ストリーミングAPI](./stream)
diff --git a/src/docs/da-DK/advanced/create-plugin.md b/src/docs/da-DK/advanced/create-plugin.md
new file mode 100644
index 0000000000..0d2fa19178
--- /dev/null
+++ b/src/docs/da-DK/advanced/create-plugin.md
@@ -0,0 +1,74 @@
+# プラグインの作成
+Misskey Webクライアントのプラグイン機能を使うと、クライアントを拡張し、様々な機能を追加できます。 ここではプラグインの作成にあたってのメタデータ定義や、AiScript APIリファレンスを掲載します。
+
+## メタデータ
+プラグインは、AiScriptのメタデータ埋め込み機能を使って、デフォルトとしてプラグインのメタデータを定義する必要があります。 メタデータは次のプロパティを含むオブジェクトです。
+
+### name
+プラグイン名
+
+### author
+プラグイン作者
+
+### version
+プラグインバージョン。数値を指定してください。
+
+### description
+プラグインの説明
+
+### permissions
+プラグインが要求する権限。MisskeyAPIにリクエストする際に用いられます。
+
+### config
+プラグインの設定情報を表すオブジェクト。 キーに設定名、値に以下のプロパティを含めます。
+
+#### type
+設定値の種類を表す文字列。以下から選択します。 string number boolean
+
+#### label
+ユーザーに表示する設定名
+
+#### description
+設定の説明
+
+#### default
+設定のデフォルト値
+
+## APIリファレンス
+AiScript標準で組み込まれているAPIは掲載しません。
+
+### Mk:dialog(title text type)
+ダイアログを表示します。typeには以下の値が設定できます。 info success warn error question 省略すると info になります。
+
+### Mk:confirm(title text type)
+確認ダイアログを表示します。typeには以下の値が設定できます。 info success warn error question 省略すると question になります。 ユーザーが"OK"を選択した場合は true を、"キャンセル"を選択した場合は false が返ります。
+
+### Mk:api(endpoint params)
+Misskey APIにリクエストします。第一引数にエンドポイント名、第二引数にパラメータオブジェクトを渡します。
+
+### Mk:save(key value)
+任意の値に任意の名前を付けて永続化します。永続化した値は、AiScriptコンテキストが終了しても残り、Mk:loadで読み取ることができます。
+
+### Mk:load(key)
+Mk:saveで永続化した指定の名前の値を読み取ります。
+
+### Plugin:register_post_form_action(title fn)
+投稿フォームにアクションを追加します。第一引数にアクション名、第二引数にアクションが選択された際のコールバック関数を渡します。 コールバック関数には、第一引数に投稿フォームオブジェクトが渡されます。
+
+### Plugin:register_note_action(title fn)
+ノートメニューに項目を追加します。第一引数に項目名、第二引数に項目が選択された際のコールバック関数を渡します。 コールバック関数には、第一引数に対象のノートオブジェクトが渡されます。
+
+### Plugin:register_user_action(title fn)
+ユーザーメニューに項目を追加します。第一引数に項目名、第二引数に項目が選択された際のコールバック関数を渡します。 コールバック関数には、第一引数に対象のユーザーオブジェクトが渡されます。
+
+### Plugin:register_note_view_interruptor(fn)
+UIに表示されるノート情報を書き換えます。 コールバック関数には、第一引数に対象のノートオブジェクトが渡されます。 コールバック関数の返り値でノートが書き換えられます。
+
+### Plugin:register_note_post_interruptor(fn)
+ノート投稿時にノート情報を書き換えます。 コールバック関数には、第一引数に対象のノートオブジェクトが渡されます。 コールバック関数の返り値でノートが書き換えられます。
+
+### Plugin:open_url(url)
+第一引数に渡されたURLをブラウザの新しいタブで開きます。
+
+### Plugin:config
+プラグインの設定が格納されるオブジェクト。プラグイン定義のconfigで設定したキーで値が入ります。
diff --git a/src/docs/da-DK/advanced/develop-bot.md b/src/docs/da-DK/advanced/develop-bot.md
new file mode 100644
index 0000000000..7f825e9bc4
--- /dev/null
+++ b/src/docs/da-DK/advanced/develop-bot.md
@@ -0,0 +1,6 @@
+# Botの作成
+[Misskey API](./api)を利用してBotの開発が可能です。 また、いくつかのBot実装が公開されているため、ぜひ参考にしてください。
+
+- [syuilo/ai](https://github.com/syuilo/ai) ... Node.js上で動く、TypeScript製Bot実装
+
+Botを作成したときは、プロフィール設定からBotフラグをオンにしておくことを強くおすすめします。
diff --git a/src/docs/da-DK/advanced/reversi-bot.md b/src/docs/da-DK/advanced/reversi-bot.md
new file mode 100644
index 0000000000..7ab2a7212e
--- /dev/null
+++ b/src/docs/da-DK/advanced/reversi-bot.md
@@ -0,0 +1,160 @@
+# MisskeyリバーシBotの開発
+Misskeyのリバーシ機能に対応したBotの開発方法をここに記します。
+
+1. `games/reversi`ストリームに以下のパラメータを付けて接続する:
+    * `i`: botアカウントのAPIキー
+
+2. 対局への招待が来たら、ストリームから`invited`イベントが流れてくる
+    * イベントの中身に、`parent`という名前で対局へ誘ってきたユーザーの情報が含まれている
+
+3. `games/reversi/match`へ、`user_id`として`parent`の`id`が含まれたリクエストを送信する
+
+4. 上手くいくとゲーム情報が返ってくるので、`games/reversi-game`ストリームへ、以下のパラメータを付けて接続する:
+    * `i`: botアカウントのAPIキー
+    * `game`: `game`の`id`
+
+5. この間、相手がゲームの設定を変更するとその都度`update-settings`イベントが流れてくるので、必要であれば何かしらの処理を行う
+
+6. 設定に満足したら、`{ type: 'accept' }`メッセージをストリームに送信する
+
+7. ゲームが開始すると、`started`イベントが流れてくる
+    * イベントの中身にはゲーム情報が含まれている
+
+8. 石を打つには、ストリームに`{ type: 'set', pos: <位置> }`を送信する(位置の計算方法は後述)
+
+9. 相手または自分が石を打つと、ストリームから`set`イベントが流れてくる
+    * `color`として石の色が含まれている
+    * `pos`として位置情報が含まれている
+
+## 位置の計算法
+8x8のマップを考える場合、各マスの位置(インデックスと呼びます)は次のようになっています:
+```
++--+--+--+--+--+--+--+--+
+| 0| 1| 2| 3| 4| 5| 6| 7|
++--+--+--+--+--+--+--+--+
+| 8| 9|10|11|12|13|14|15|
++--+--+--+--+--+--+--+--+
+|16|17|18|19|20|21|22|23|
+...
+```
+
+### X,Y座標 から インデックス に変換する
+```
+pos = x + (y * mapWidth)
+```
+`mapWidth`は、ゲーム情報の`map`から、次のようにして計算できます:
+```
+mapWidth = map[0].length
+```
+
+### インデックス から X,Y座標 に変換する
+```
+x = pos % mapWidth
+y = Math.floor(pos / mapWidth)
+```
+
+## マップ情報
+マップ情報は、ゲーム情報の`map`に入っています。 文字列の配列になっており、ひとつひとつの文字がマス情報を表しています。 それをもとにマップのデザインを知る事が出来ます:
+* `(スペース)` ... マス無し
+* `-` ... マス
+* `b` ... 初期配置される黒石
+* `w` ... 初期配置される白石
+
+例えば、4*4の次のような単純なマップがあるとします:
+```text
++---+---+---+---+
+|   |   |   |   |
++---+---+---+---+
+|   | ○ | ● |   |
++---+---+---+---+
+|   | ● | ○ |   |
++---+---+---+---+
+|   |   |   |   |
++---+---+---+---+
+```
+
+この場合、マップデータはこのようになります:
+```javascript
+['----', '-wb-', '-bw-', '----']
+```
+
+## ユーザーにフォームを提示して対話可能Botを作成する
+ユーザーとのコミュニケーションを行うため、ゲームの設定画面でユーザーにフォームを提示することができます。 例えば、Botの強さをユーザーが設定できるようにする、といったシナリオが考えられます。
+
+フォームを提示するには、`reversi-game`ストリームに次のメッセージを送信します:
+```javascript
+{
+  type: 'init-form',
+  body: [フォームコントロールの配列]
+}
+```
+
+フォームコントロールの配列については今から説明します。 フォームコントロールは、次のようなオブジェクトです:
+```javascript
+{
+  id: 'switch1',
+  type: 'switch',
+  label: 'Enable hoge',
+  value: false
+}
+```
+`id` ... コントロールのID。 `type` ... コントロールの種類。後述します。 `label` ... コントロールと一緒に表記するテキスト。 `value` ... コントロールのデフォルト値。
+
+### フォームの操作を受け取る
+ユーザーがフォームを操作すると、ストリームから`update-form`イベントが流れてきます。 イベントの中身には、コントロールのIDと、ユーザーが設定した値が含まれています。 例えば、上で示したスイッチをユーザーがオンにしたとすると、次のイベントが流れてきます:
+```javascript
+{
+  id: 'switch1',
+  value: true
+}
+```
+
+### フォームコントロールの種類
+#### スイッチ
+type: `switch` スイッチを表示します。何かの機能をオン/オフさせたい場合に有用です。
+
+##### プロパティ
+`label` ... スイッチに表記するテキスト。
+
+#### ラジオボタン
+type: `radio` ラジオボタンを表示します。選択肢を提示するのに有用です。例えば、Botの強さを設定させるなどです。
+
+##### プロパティ
+`items` ... ラジオボタンの選択肢。例:
+```javascript
+items: [{
+  label: 'å¼±',
+  value: 1
+}, {
+  label: '中',
+  value: 2
+}, {
+  label: 'å¼·',
+  value: 3
+}]
+```
+
+#### スライダー
+type: `slider` スライダーを表示します。
+
+##### プロパティ
+`min` ... スライダーの下限。 `max` ... スライダーの上限。 `step` ... 入力欄で刻むステップ値。
+
+#### テキストボックス
+type: `textbox` テキストボックスを表示します。ユーザーになにか入力させる一般的な用途に利用できます。
+
+## ユーザーにメッセージを表示する
+設定画面でユーザーと対話する、フォーム以外のもうひとつの方法がこれです。ユーザーになにかメッセージを表示することができます。 例えば、ユーザーがBotの対応していないモードやマップを選択したとき、警告を表示するなどです。 メッセージを表示するには、次のメッセージをストリームに送信します:
+```javascript
+{
+  type: 'message',
+  body: {
+    text: 'メッセージ内容',
+    type: 'メッセージの種類'
+  }
+}
+```
+メッセージの種類: `success`, `info`, `warning`, `error`。
+
+## 投了する
+投了をするには、<a href="./api/endpoints/games/reversi/games/surrender">このエンドポイント</a>にリクエストします。
diff --git a/src/docs/da-DK/advanced/stream.md b/src/docs/da-DK/advanced/stream.md
new file mode 100644
index 0000000000..0e5edd2b0c
--- /dev/null
+++ b/src/docs/da-DK/advanced/stream.md
@@ -0,0 +1,350 @@
+# ストリーミングAPI
+
+ストリーミングAPIを使うと、リアルタイムで様々な情報(例えばタイムラインに新しい投稿が流れてきた、メッセージが届いた、フォローされた、など)を受け取ったり、様々な操作を行ったりすることができます。
+
+## ストリームに接続する
+
+ストリーミングAPIを利用するには、まずMisskeyサーバーに**websocket**接続する必要があります。
+
+以下のURLに、`i`というパラメータ名で認証情報を含めて、websocket接続してください。例:
+```
+%WS_URL%/streaming?i=xxxxxxxxxxxxxxx
+```
+
+認証情報は、自分のAPIキーや、アプリケーションからストリームに接続する際はユーザーのアクセストークンのことを指します。
+
+<div class="info">ℹ️ 認証情報の取得については、<a href="./api">こちらのドキュメント</a>をご確認ください。</div>
+
+---
+
+認証情報は省略することもできますが、その場合非ログインでの利用ということになり、受信できる情報や可能な操作は限られます。例:
+
+```
+%WS_URL%/streaming
+```
+
+---
+
+ストリームに接続すると、後述するAPI操作や、投稿の購読を行ったりすることができます。 しかしまだこの段階では、例えばタイムラインへの新しい投稿を受信したりすることはできません。 それを行うには、ストリーム上で、後述する**チャンネル**に接続する必要があります。
+
+**ストリームでのやり取りはすべてJSONです。**
+
+## チャンネル
+MisskeyのストリーミングAPIにはチャンネルという概念があります。これは、送受信する情報を分離するための仕組みです。 Misskeyのストリームに接続しただけでは、まだリアルタイムでタイムラインの投稿を受信したりはできません。 ストリーム上でチャンネルに接続することで、様々な情報を受け取ったり情報を送信したりすることができるようになります。
+
+ひとつのストリーム上で、同時に複数のチャンネルに接続することができます。
+
+### チャンネルに接続する
+チャンネルに接続するには、次のようなデータをJSONでストリームに送信します:
+
+```json
+{
+    type: 'connect',
+    body: {
+        channel: 'xxxxxxxx',
+        id: 'foobar',
+        params: {
+            ...
+        }
+    }
+}
+```
+
+ここで、
+* `channel`には接続したいチャンネル名を設定します。チャンネルの種類については後述します。
+* `id`にはそのチャンネルとやり取りするための任意のIDを設定します。ストリームでは様々なメッセージが流れるので、そのメッセージがどのチャンネルからのものなのか識別する必要があるからです。このIDは、UUIDや、乱数のようなもので構いません。
+* `params`はチャンネルに接続する際のパラメータです。チャンネルによって接続時に必要とされるパラメータは異なります。パラメータ不要のチャンネルに接続する際は、このプロパティは省略可能です。
+
+<div class="info">ℹ️ IDはチャンネルごとではなく「チャンネルの接続ごと」です。なぜなら、同じチャンネルに異なるパラメータで複数接続するケースもあるからです。</div>
+
+### チャンネルからのメッセージを受け取る
+例えばタイムラインのチャンネルなら、新しい投稿があった時にメッセージを発します。そのメッセージを受け取ることで、タイムラインに新しい投稿がされたことをリアルタイムで知ることができます。
+
+チャンネルがメッセージを発すると、次のようなデータがJSONでストリームに流れてきます:
+```json
+{
+    type: 'channel',
+    body: {
+        id: 'foobar',
+        type: 'something',
+        body: {
+            some: 'thing'
+        }
+    }
+}
+```
+
+ここで、
+* `id`には前述したそのチャンネルに接続する際に設定したIDが設定されています。これで、このメッセージがどのチャンネルからのものなのか知ることができます。
+* `type`にはメッセージの種類が設定されます。チャンネルによって、どのような種類のメッセージが流れてくるかは異なります。
+* `body`にはメッセージの内容が設定されます。チャンネルによって、どのような内容のメッセージが流れてくるかは異なります。
+
+### チャンネルに向けてメッセージを送信する
+チャンネルによっては、メッセージを受け取るだけでなく、こちらから何かメッセージを送信し、何らかの操作を行える場合があります。
+
+チャンネルにメッセージを送信するには、次のようなデータをJSONでストリームに送信します:
+```json
+{
+    type: 'channel',
+    body: {
+        id: 'foobar',
+        type: 'something',
+        body: {
+            some: 'thing'
+        }
+    }
+}
+```
+
+ここで、
+* `id`には前述したそのチャンネルに接続する際に設定したIDを設定します。これで、このメッセージがどのチャンネルに向けたものなのか識別させることができます。
+* `type`にはメッセージの種類を設定します。チャンネルによって、どのような種類のメッセージを受け付けるかは異なります。
+* `body`にはメッセージの内容を設定します。チャンネルによって、どのような内容のメッセージを受け付けるかは異なります。
+
+### チャンネルから切断する
+チャンネルから切断するには、次のようなデータをJSONでストリームに送信します:
+
+```json
+{
+    type: 'disconnect',
+    body: {
+        id: 'foobar'
+    }
+}
+```
+
+ここで、
+* `id`には前述したそのチャンネルに接続する際に設定したIDを設定します。
+
+## ストリームを経由してAPIリクエストする
+
+ストリームを経由してAPIリクエストすると、HTTPリクエストを発生させずにAPIを利用できます。そのため、コードを簡潔にできたり、パフォーマンスの向上を見込めるかもしれません。
+
+ストリームを経由してAPIリクエストするには、次のようなデータをJSONでストリームに送信します:
+```json
+{
+    type: 'api',
+    body: {
+        id: 'xxxxxxxxxxxxxxxx',
+        endpoint: 'notes/create',
+        data: {
+            text: 'yee haw!'
+        }
+    }
+}
+```
+
+ここで、
+* `id`には、APIのレスポンスを識別するための、APIリクエストごとの一意なIDを設定する必要があります。UUIDや、簡単な乱数のようなもので構いません。
+* `endpoint`には、あなたがリクエストしたいAPIのエンドポイントを指定します。
+* `data`には、エンドポイントのパラメータを含めます。
+
+<div class="info">ℹ️ APIのエンドポイントやパラメータについてはAPIリファレンスをご確認ください。</div>
+
+### レスポンスの受信
+
+APIへリクエストすると、レスポンスがストリームから次のような形式で流れてきます。
+
+```json
+{
+    type: 'api:xxxxxxxxxxxxxxxx',
+    body: {
+        ...
+    }
+}
+```
+
+ここで、
+* `xxxxxxxxxxxxxxxx`の部分には、リクエストの際に設定された`id`が含まれています。これにより、どのリクエストに対するレスポンスなのか判別することができます。
+* `body`には、レスポンスが含まれています。
+
+## 投稿のキャプチャ
+
+Misskeyは投稿のキャプチャと呼ばれる仕組みを提供しています。これは、指定した投稿のイベントをストリームで受け取る機能です。
+
+例えばタイムラインを取得してユーザーに表示したとします。ここで誰かがそのタイムラインに含まれるどれかの投稿に対してリアクションしたとします。
+
+しかし、クライアントからするとある投稿にリアクションが付いたことなどは知る由がないため、リアルタイムでリアクションをタイムライン上の投稿に反映して表示するといったことができません。
+
+この問題を解決するために、Misskeyは投稿のキャプチャ機構を用意しています。投稿をキャプチャすると、その投稿に関するイベントを受け取ることができるため、リアルタイムでリアクションを反映させたりすることが可能になります。
+
+### 投稿をキャプチャする
+
+投稿をキャプチャするには、ストリームに次のようなメッセージを送信します:
+
+```json
+{
+    type: 'subNote',
+    body: {
+        id: 'xxxxxxxxxxxxxxxx'
+    }
+}
+```
+
+ここで、
+* `id`にキャプチャしたい投稿の`id`を設定します。
+
+このメッセージを送信すると、Misskeyにキャプチャを要請したことになり、以後、その投稿に関するイベントが流れてくるようになります。
+
+例えば投稿にリアクションが付いたとすると、次のようなメッセージが流れてきます:
+
+```json
+{
+    type: 'noteUpdated',
+    body: {
+        id: 'xxxxxxxxxxxxxxxx',
+        type: 'reacted',
+        body: {
+            reaction: 'like',
+            userId: 'yyyyyyyyyyyyyyyy'
+        }
+    }
+}
+```
+
+ここで、
+* `body`内の`id`に、イベントを発生させた投稿のIDが設定されます。
+* `body`内の`type`に、イベントの種類が設定されます。
+* `body`内の`body`に、イベントの詳細が設定されます。
+
+#### イベントの種類
+
+##### `reacted`
+その投稿にリアクションがされた時に発生します。
+
+* `reaction`に、リアクションの種類が設定されます。
+* `userId`に、リアクションを行ったユーザーのIDが設定されます。
+
+例:
+```json
+{
+    type: 'noteUpdated',
+    body: {
+        id: 'xxxxxxxxxxxxxxxx',
+        type: 'reacted',
+        body: {
+            reaction: 'like',
+            userId: 'yyyyyyyyyyyyyyyy'
+        }
+    }
+}
+```
+
+##### `deleted`
+その投稿が削除された時に発生します。
+
+* `deletedAt`に、削除日時が設定されます。
+
+例:
+```json
+{
+    type: 'noteUpdated',
+    body: {
+        id: 'xxxxxxxxxxxxxxxx',
+        type: 'deleted',
+        body: {
+            deletedAt: '2018-10-22T02:17:09.703Z'
+        }
+    }
+}
+```
+
+##### `pollVoted`
+その投稿に添付されたアンケートに投票された時に発生します。
+
+* `choice`に、選択肢IDが設定されます。
+* `userId`に、投票を行ったユーザーのIDが設定されます。
+
+例:
+```json
+{
+    type: 'noteUpdated',
+    body: {
+        id: 'xxxxxxxxxxxxxxxx',
+        type: 'pollVoted',
+        body: {
+            choice: 2,
+            userId: 'yyyyyyyyyyyyyyyy'
+        }
+    }
+}
+```
+
+### 投稿のキャプチャを解除する
+
+その投稿がもう画面に表示されなくなったりして、その投稿に関するイベントをもう受け取る必要がなくなったときは、キャプチャの解除を申請してください。
+
+次のメッセージを送信します:
+
+```json
+{
+    type: 'unsubNote',
+    body: {
+        id: 'xxxxxxxxxxxxxxxx'
+    }
+}
+```
+
+ここで、
+* `id`にキャプチャを解除したい投稿の`id`を設定します。
+
+このメッセージを送信すると、以後、その投稿に関するイベントは流れてこないようになります。
+
+# チャンネル一覧
+## `main`
+アカウントに関する基本的な情報が流れてきます。このチャンネルにパラメータはありません。
+
+### 流れてくるイベント一覧
+
+#### `renote`
+自分の投稿がRenoteされた時に発生するイベントです。自分自身の投稿をRenoteしたときは発生しません。
+
+#### `mention`
+誰かからメンションされたときに発生するイベントです。
+
+#### `readAllNotifications`
+自分宛ての通知がすべて既読になったことを表すイベントです。このイベントを利用して、「通知があることを示すアイコン」のようなものをオフにしたりする等のケースが想定されます。
+
+#### `meUpdated`
+自分の情報が更新されたことを表すイベントです。
+
+#### `follow`
+自分が誰かをフォローしたときに発生するイベントです。
+
+#### `unfollow`
+自分が誰かのフォローを解除したときに発生するイベントです。
+
+#### `followed`
+自分が誰かにフォローされたときに発生するイベントです。
+
+## `homeTimeline`
+ホームタイムラインの投稿情報が流れてきます。このチャンネルにパラメータはありません。
+
+### 流れてくるイベント一覧
+
+#### `note`
+タイムラインに新しい投稿が流れてきたときに発生するイベントです。
+
+## `localTimeline`
+ローカルタイムラインの投稿情報が流れてきます。このチャンネルにパラメータはありません。
+
+### 流れてくるイベント一覧
+
+#### `note`
+ローカルタイムラインに新しい投稿が流れてきたときに発生するイベントです。
+
+## `hybridTimeline`
+ソーシャルタイムラインの投稿情報が流れてきます。このチャンネルにパラメータはありません。
+
+### 流れてくるイベント一覧
+
+#### `note`
+ソーシャルタイムラインに新しい投稿が流れてきたときに発生するイベントです。
+
+## `globalTimeline`
+グローバルタイムラインの投稿情報が流れてきます。このチャンネルにパラメータはありません。
+
+### 流れてくるイベント一覧
+
+#### `note`
+グローバルタイムラインに新しい投稿が流れてきたときに発生するイベントです。
diff --git a/src/docs/da-DK/features/antenna.md b/src/docs/da-DK/features/antenna.md
new file mode 100644
index 0000000000..94ad9e4aea
--- /dev/null
+++ b/src/docs/da-DK/features/antenna.md
@@ -0,0 +1,4 @@
+# アンテナ
+アンテナは、自由に条件を設定して、合致するノートを自動で収集することができる機能です。
+
+条件を設定したアンテナが作成された状態で、条件に合致するノートが投稿されると、リアルタイムでそのアンテナのタイムラインにノートが追加されます。
diff --git a/src/docs/da-DK/features/custom-emoji.md b/src/docs/da-DK/features/custom-emoji.md
new file mode 100644
index 0000000000..ed2e92be16
--- /dev/null
+++ b/src/docs/da-DK/features/custom-emoji.md
@@ -0,0 +1,2 @@
+# カスタム絵文字
+カスタム絵文字は、インスタンスで用意された画像を絵文字のように使える機能です。 ノート、リアクション、チャット、自己紹介、名前などの場所で使うことができます。 カスタム絵文字をそれらの場所で使うには、絵文字ピッカーボタン(ある場合)を押すか、`:`を入力して絵文字サジェストを表示します。 テキスト内に`:foo:`のような形式の文字列が見つかると、`foo`の部分がカスタム絵文字名と解釈され、表示時には対応したカスタム絵文字に置き換わります。
diff --git a/src/docs/da-DK/features/deck.md b/src/docs/da-DK/features/deck.md
new file mode 100644
index 0000000000..8057e262fd
--- /dev/null
+++ b/src/docs/da-DK/features/deck.md
@@ -0,0 +1,18 @@
+# デッキ
+
+デッキは利用可能なUIのひとつです。「カラム」と呼ばれるビューを複数並べて表示させることで、カスタマイズ性が高く、情報量の多いUIが構築できることが特徴です。
+
+## カラムの追加
+デッキの背景を右クリックし、「カラムを追加」して任意のカラムを追加できます。
+
+## カラムの移動
+カラムは、ドラッグアンドドロップで他のカラムと位置を入れ替えることが出来るほか、カラムメニュー(カラムのヘッダー右クリック)から位置を移動させることもできます。
+
+## カラムの水平分割
+カラムは左右だけでなく、上下に並べることもできます。 カラムメニューを開き、「左に重ねる」を選択すると、左のカラムの下に現在のカラムが移動します。 上下分割を解除するには、カラムメニューの「右に出す」を選択します。
+
+## カラムの設定
+カラムメニューの「編集」を選択するとカラムの設定を編集できます。カラムの名前を変えたり、幅を変えたりできます。
+
+## デッキの設定
+デッキに関する設定は、[settings/deck](/settings/deck)で行えます。
diff --git a/src/docs/da-DK/features/drive.md b/src/docs/da-DK/features/drive.md
new file mode 100644
index 0000000000..b82a41082a
--- /dev/null
+++ b/src/docs/da-DK/features/drive.md
@@ -0,0 +1,17 @@
+# ドライブ
+ドライブは、Misskey上でファイルを管理できる機能です。
+
+[ドライブのページ](/my/drive)から任意のファイルをアップロードできるほか、アバターに設定した画像や、ノートに添付したファイルなどもすべてドライブにアップロードされます。
+
+<div class="warn">⚠️ ドライブからファイルを削除すると、そのファイルが添付されたノートも消えます。</div>
+
+ドライブにアップロードされたファイルは、いつでもダウンロードすることができるほか、ノート作成時に「ドライブからファイルを添付」することでファイルを再利用することもできます。
+
+ドライブ内にフォルダを作り、複数のファイルをまとめて整理することもできます。
+
+## 閲覧注意 (NSFW)
+<div class="info">ℹ️ この項目が閲覧注意なわけではありません</div>
+
+閲覧注意またはNSFW (Not safe for work) は、ドライブのファイルに設定することができるフラグです。 閲覧注意フラグを設定されたファイルは、表示される際に閲覧者の操作なしには表示されなくなります。 このフラグは、例えば職場や公共の場で閲覧するのに適切でないと思われる画像などに設定し、そのような画像が突然表示されてしまうことを防ぐ目的で使われます。
+
+このフラグは手動でオンオフを切り替えられるほか、モデレーターの判断で設定される場合もあります。
diff --git a/src/docs/da-DK/features/favorite.md b/src/docs/da-DK/features/favorite.md
new file mode 100644
index 0000000000..a0e5f8bf78
--- /dev/null
+++ b/src/docs/da-DK/features/favorite.md
@@ -0,0 +1,4 @@
+# お気に入り
+[ノート](./node)をお気に入りとして登録できる機能です。 お気に入り登録したノートは、[お気に入りページ](./my/favorites)で一覧することができます。 お気に入りに登録したことは相手に通知されず、お気に入りは自分しか見ることができません。
+
+ノートをお気に入り登録するには、ノートメニューの「お気に入り」を押します。お気に入り解除するには、ノートメニューの「お気に入り解除」を押します。
diff --git a/src/docs/da-DK/features/follow.md b/src/docs/da-DK/features/follow.md
new file mode 100644
index 0000000000..3c1ea7bbe0
--- /dev/null
+++ b/src/docs/da-DK/features/follow.md
@@ -0,0 +1,2 @@
+# フォロー
+ユーザーをフォローすると、タイムラインにそのユーザーの投稿が表示されるようになります。ただし、他のユーザーに対する返信は含まれません。 ユーザーをフォローするには、ユーザーページの「フォロー」ボタンをクリックします。フォローを解除するには、もう一度クリックします。
diff --git a/src/docs/da-DK/features/keyboard-shortcut.md b/src/docs/da-DK/features/keyboard-shortcut.md
new file mode 100644
index 0000000000..8659ace982
--- /dev/null
+++ b/src/docs/da-DK/features/keyboard-shortcut.md
@@ -0,0 +1,66 @@
+# キーボードショートカット
+
+## グローバル
+これらのショートカットは基本的にどこでも使えます。
+<table>
+    <thead>
+        <tr><th>ショートカット</th><th>効果</th><th>由来</th></tr>
+    </thead>
+    <tbody>
+        <tr><td><kbd class="key">P</kbd>, <kbd class="key">N</kbd></td><td>新規投稿</td><td><b>P</b>ost, <b>N</b>ew, <b>N</b>ote</td></tr>
+        <tr><td><kbd class="key">T</kbd></td><td>タイムラインの最も新しい投稿にフォーカス</td><td><b>T</b>imeline, <b>T</b>op</td></tr>
+        <tr><td><kbd class="group"><kbd class="key">Shift</kbd> + <kbd class="key">N</kbd></kbd></td><td>通知を表示/隠す</td><td><b>N</b>otifications</td></tr>
+        <tr><td><kbd class="key">S</kbd></td><td>検索</td><td><b>S</b>earch</td></tr>
+        <tr><td><kbd class="key">H</kbd>, <kbd class="key">?</kbd></td><td>ヘルプを表示</td><td><b>H</b>elp</td></tr>
+    </tbody>
+</table>
+
+## 投稿にフォーカスされた状態
+<table>
+    <thead>
+        <tr><th>ショートカット</th><th>効果</th><th>由来</th></tr>
+    </thead>
+    <tbody>
+        <tr><td><kbd class="key">↑</kbd>, <kbd class="key">K</kbd>, <kbd class="group"><kbd class="key">Shift</kbd> + <kbd class="key">Tab</kbd></kbd></td><td>上の投稿にフォーカスを移動</td><td>-</td></tr>
+        <tr><td><kbd class="key">↓</kbd>, <kbd class="key">J</kbd>, <kbd class="key">Tab</kbd></td><td>下の投稿にフォーカスを移動</td><td>-</td></tr>
+        <tr><td><kbd class="key">R</kbd></td><td>返信フォームを開く</td><td><b>R</b>eply</td></tr>
+        <tr><td><kbd class="key">Q</kbd></td><td>Renoteフォームを開く</td><td><b>Q</b>uote</td></tr>
+        <tr><td><kbd class="group"><kbd class="key">Ctrl</kbd> + <kbd class="key">Q</kbd></kbd></td><td>即刻Renoteする(フォームを開かずに)</td><td>-</td></tr>
+        <tr><td><kbd class="key">E</kbd>, <kbd class="key">A</kbd>, <kbd class="key">+</kbd></td><td>リアクションフォームを開く</td><td><b>E</b>mote, re<b>A</b>ction</td></tr>
+        <tr><td><kbd class="key">0</kbd>~<kbd class="key">9</kbd></td><td>数字に対応したリアクションをする(対応については後述)</td><td>-</td></tr>
+        <tr><td><kbd class="key">F</kbd>, <kbd class="key">B</kbd></td><td>お気に入りに登録</td><td><b>F</b>avorite, <b>B</b>ookmark</td></tr>
+        <tr><td><kbd class="key">Del</kbd>, <kbd class="group"><kbd class="key">Ctrl</kbd> + <kbd class="key">D</kbd></kbd></td><td>投稿を削除</td><td><b>D</b>elete</tr>
+        <tr><td><kbd class="key">M</kbd>, <kbd class="key">O</kbd></td><td>投稿に対するメニューを開く</td><td><b>M</b>ore, <b>O</b>ther</td></tr>
+        <tr><td><kbd class="key">S</kbd></td><td>CWで隠された部分を表示 or 隠す</td><td><b>S</b>how, <b>S</b>ee</td></tr>
+        <tr><td><kbd class="key">Esc</kbd></td><td>フォーカスを外す</td><td>-</td></tr>
+    </tbody>
+</table>
+
+## Renoteフォーム
+<table>
+    <thead>
+        <tr><th>ショートカット</th><th>効果</th><th>由来</th></tr>
+    </thead>
+    <tbody>
+        <tr><td><kbd class="key">Enter</kbd></td><td>Renoteする</td><td>-</td></tr>
+        <tr><td><kbd class="key">Q</kbd></td><td>フォームを展開する</td><td><b>Q</b>uote</td></tr>
+        <tr><td><kbd class="key">Esc</kbd></td><td>フォームを閉じる</td><td>-</td></tr>
+    </tbody>
+</table>
+
+## リアクションフォーム
+デフォルトで「👍」にフォーカスが当たっている状態です。
+<table>
+    <thead>
+        <tr><th>ショートカット</th><th>効果</th><th>由来</th></tr>
+    </thead>
+    <tbody>
+        <tr><td><kbd class="key">↑</kbd>, <kbd class="key">K</kbd></td><td>上のリアクションにフォーカスを移動</td><td>-</td></tr>
+        <tr><td><kbd class="key">↓</kbd>, <kbd class="key">J</kbd></td><td>下のリアクションにフォーカスを移動</td><td>-</td></tr>
+        <tr><td><kbd class="key">←</kbd>, <kbd class="key">H</kbd>, <kbd class="group"><kbd class="key">Shift</kbd> + <kbd class="key">Tab</kbd></kbd></td><td>左のリアクションにフォーカスを移動</td><td>-</td></tr>
+        <tr><td><kbd class="key">→</kbd>, <kbd class="key">L</kbd>, <kbd class="key">Tab</kbd></td><td>右のリアクションにフォーカスを移動</td><td>-</td></tr>
+        <tr><td><kbd class="key">Enter</kbd>, <kbd class="key">Space</kbd>, <kbd class="key">+</kbd></td><td>リアクション確定</td><td>-</td></tr>
+        <tr><td><kbd class="key">0</kbd>~<kbd class="key">9</kbd></td><td>数字に対応したリアクションで確定</td><td>-</td></tr>
+        <tr><td><kbd class="key">Esc</kbd></td><td>リアクションするのをやめる</td><td>-</td></tr>
+    </tbody>
+</table>
diff --git a/src/docs/da-DK/features/mfm.md b/src/docs/da-DK/features/mfm.md
new file mode 100644
index 0000000000..5be2df4f30
--- /dev/null
+++ b/src/docs/da-DK/features/mfm.md
@@ -0,0 +1,12 @@
+# MFM
+MFMは、Misskey Flavored Markdownの略で、Misskeyの様々な場所で使用できる専用のマークアップ言語です。 MFMで使用可能な構文は[MFMチートシート](/mfm-cheat-sheet)で確認できます。
+
+## MFMが使用可能な場所の例
+- ノート本文
+- CW注釈
+- ユーザーの名前
+- ユーザーの自己紹介
+
+## 開発者向け情報
+MFMのパーサー実装はライブラリとして公開されており、簡単にクライアントにMFMを組み込むことが可能です。
+- [misskey-dev/mfm.js](https://github.com/misskey-dev/mfm.js) - JavaScriptパーサー実装
diff --git a/src/docs/da-DK/features/mute.md b/src/docs/da-DK/features/mute.md
new file mode 100644
index 0000000000..6a9608662a
--- /dev/null
+++ b/src/docs/da-DK/features/mute.md
@@ -0,0 +1,13 @@
+# ミュート
+
+ユーザーをミュートすると、そのユーザーに関する次のコンテンツがMisskeyに表示されなくなります:
+
+* タイムラインや投稿の検索結果内の、そのユーザーの投稿(およびそれらの投稿に対する返信やRenote)
+* そのユーザーからの通知
+* メッセージ履歴一覧内の、そのユーザーとのメッセージ履歴
+
+ユーザーをミュートするには、対象のユーザーのユーザーページに表示されている「ミュート」ボタンを押します。
+
+ミュートを行ったことは相手に通知されず、ミュートされていることを知ることもできません。
+
+設定>ミュート から、自分がミュートしているユーザー一覧を確認することができます。
diff --git a/src/docs/da-DK/features/note.md b/src/docs/da-DK/features/note.md
new file mode 100644
index 0000000000..62440b25f9
--- /dev/null
+++ b/src/docs/da-DK/features/note.md
@@ -0,0 +1,51 @@
+# ノート
+ノートは、Misskeyに投稿される、文章、ファイル、アンケートなどを含むコンテンツで、Misskeyの中心的概念です。また、そのノートを作成する行為自体もノートと呼ばれます。
+
+ノートが作成されると、[タイムライン](./timeline)に追加され、自分の[フォロワー](./follow)やサーバーのユーザーが見れるようになります。
+
+ノートには、[リアクション](./reaction)を行うことができます。また、返信や引用もできます。
+
+ノートを[お気に入り](./favorite)登録することで、後で簡単に見返すことができます。
+
+## ノートを作成する
+ノートを作成するには、画面上にある鉛筆マークのボタンを押して、作成フォームを開きます。作成フォームに内容を入力し、「ノート」ボタンを押すことでノートが作成されます。 ノートには、画像、動画など任意のファイルや、[アンケート](./poll)を添付することができます。また、本文中には[MFM](./mfm)が使用でき、[メンション](./mention)や[ハッシュタグ](./hashtag)を含めることもできます。 他にも、CWや公開範囲といった設定も行えます(詳細は後述)。
+<div class="info">ℹ️ コンピューターのクリップボードに画像データがある状態で、フォーム内のテキストボックスにペーストするとその画像を添付することができます。</div>
+<div class="info">ℹ️ テキストボックス内で<kbd class="key">Ctrl + Enter</kbd>を押すことでも投稿できます。</div>
+
+## Renote
+既にあるノートを引用、もしくはそのノートを新しいノートとして共有する行為、またそれによって作成されたノートをRenoteと呼びます。 自分がフォローしているユーザーの、気に入ったノートを自分のフォロワーに共有したい場合や、過去の自分のノートを再度共有したい場合に使います。 同じノートに対して無制限にRenoteを行うことができますが、あまり連続して使用すると迷惑になる場合もあるので、注意しましょう。
+<div class="warn">⚠️ 公開範囲がフォロワーやダイレクトのノートはRenoteできません</div>
+
+Renoteを削除するには、Renoteの時刻表示の隣にある「...」を押し、「Renote解除」を選択します。
+
+## CW
+Contents Warningの略で、ノートの内容を、閲覧者の操作なしには表示しないようにできる機能です。主に長大な内容を隠すためや、ネタバレ防止などに使うことができます。 設定するには、フォームの「内容を隠す」ボタン(目のアイコン)を押します。すると新しい入力エリアが表れるので、そこに内容の要約を記入します。
+
+## 公開範囲
+ノートごとに、そのノートが公開される範囲を設定することができます。フォームの「ノート」ボタンの左にあるアイコンを押すと公開範囲を以下から選択できます。
+
+### パブリック
+全ての人に対してノートが公開されるほか、サーバーの全てのタイムライン(ホームタイムライン、ローカルタイムライン、ソーシャルタイムライン、グローバルタイムライン)にノートが流れます。
+<div class="warn">⚠️ アカウントが<a href="./silence">サイレンス</a>状態の時は、この公開範囲は使用できません。</div>
+
+### ホーム
+全ての人に対してノートが公開されますが、フォロワー以外のローカルタイムライン、ソーシャルタイムライン、グローバルタイムラインにはノートは流れません。
+
+### フォロワー
+自分のフォロワーに対してのみノートを公開します。フォロワーの全てのタイムラインに流れます。
+
+### ダイレクト
+指定したユーザーに対してのみノートを公開します。指定したユーザーの全てのタイムラインに流れます。
+
+### 「ローカルのみ」オプション
+このオプションを有効にすると、リモートにノートを連合しなくなります。
+
+### 公開範囲の比較
+<table>
+    <tr><th></th><th>パブリック</th><th>ホーム</th><th>フォロワー</th><th>ダイレクト</th></tr>
+    <tr><th>フォロワーのLTL/STL/GTL</th><td>✔</td><td>✔</td><td>✔</td><td></td></tr>
+    <tr><th>非フォロワーのLTL/STL/GTL</th><td>✔</td><td></td><td></td><td></td></tr>
+</table>
+
+## ピン留め
+ノートをピン留めすると、ユーザーページに常にそのノートを表示しておくことができます。 ノートのメニューを開き、「ピン留め」を選択してピン留めできます。 複数のノートをピン留めできます。
diff --git a/src/docs/da-DK/features/pages.md b/src/docs/da-DK/features/pages.md
new file mode 100644
index 0000000000..a7311b95e6
--- /dev/null
+++ b/src/docs/da-DK/features/pages.md
@@ -0,0 +1,10 @@
+# Pages
+
+## 変数
+変数を使うことで動的なページを作成できます。テキスト内で <b>{ 変数名 }</b> と書くとそこに変数の値を埋め込めます。例えば <b>Hello { thing } world!</b> というテキストで、変数(thing)の値が <b>ai</b> だった場合、テキストは <b>Hello ai world!</b> になります。
+
+変数の評価(値を算出すること)は上から下に行われるので、ある変数の中で自分より下の変数を参照することはできません。例えば上から <b>A、B、C</b> と3つの変数を定義したとき、<b>C</b>の中で<b>A</b>や<b>B</b>を参照することはできますが、<b>A</b>の中で<b>B</b>や<b>C</b>を参照することはできません。
+
+ユーザーからの入力を受け取るには、ページに「ユーザー入力」ブロックを設置し、「変数名」に入力を格納したい変数名を設定します(変数は自動で作成されます)。その変数を使ってユーザー入力に応じた動作を行えます。
+
+関数を使うと、値の算出処理を再利用可能な形にまとめることができます。関数を作るには、「関数」タイプの変数を作成します。関数にはスロット(引数)を設定することができ、スロットの値は関数内で変数として利用可能です。また、関数を引数に取る関数(高階関数と呼ばれます)も存在します。関数は予め定義しておくほかに、このような高階関数のスロットに即席でセットすることもできます。
diff --git a/src/docs/da-DK/features/reaction.md b/src/docs/da-DK/features/reaction.md
new file mode 100644
index 0000000000..4d479fd416
--- /dev/null
+++ b/src/docs/da-DK/features/reaction.md
@@ -0,0 +1,11 @@
+# リアクション
+他の人のノートに、絵文字を付けて簡単にあなたの反応を伝えられる機能です。 リアクションするには、ノートの + アイコンをクリックしてピッカーを表示し、絵文字を選択します。 リアクションには[カスタム絵文字](./custom-emoji)も使用できます。
+
+## リアクションピッカーのカスタマイズ
+ピッカーに表示される絵文字を自分好みにカスタマイズすることができます。 設定の「リアクション」で設定します。
+
+## リモート投稿へのリアクションについて
+リアクションはMisskeyオリジナルの機能であるため、リモートインスタンスがMisskeyでない限りは、ほとんどの場合「Like」としてアクティビティが送信されます。一般的にはLikeは「お気に入り」として実装されているようです。
+
+## リモートからのリアクションについて
+リモートから「Like」アクティビティを受信したとき、Misskeyでは「👍」のリアクションとして解釈されます。
diff --git a/src/docs/da-DK/features/silence.md b/src/docs/da-DK/features/silence.md
new file mode 100644
index 0000000000..7e26feab0d
--- /dev/null
+++ b/src/docs/da-DK/features/silence.md
@@ -0,0 +1,6 @@
+# サイレンス
+サイレンスは、アカウントに設定される状態のひとつです。
+
+アカウントがサイレンス状態になると、ノートの公開範囲をパブリックにできなくなります。 ホーム、フォロワー、ダイレクトは選択可能なため、サイレンスを受けた場合でもフォロワーやあなたのユーザーページを直接訪れた場合は投稿を閲覧できますが、GTL(連合タイムライン)やLTL(ローカルタイムライン)には投稿が流れません。
+
+アカウントのサイレンス状態は、サーバーのモデレーターによって有効化/無効化されます。
diff --git a/src/docs/da-DK/features/theme.md b/src/docs/da-DK/features/theme.md
new file mode 100644
index 0000000000..a406f3433c
--- /dev/null
+++ b/src/docs/da-DK/features/theme.md
@@ -0,0 +1,68 @@
+# テーマ
+
+テーマを設定して、Misskeyクライアントの見た目を変更できます。
+
+## テーマの設定
+設定 > テーマ
+
+## テーマを作成する
+テーマコードはJSON5で記述されたテーマオブジェクトです。 テーマは以下のようなオブジェクトです。
+``` js
+{
+    id: '17587283-dd92-4a2c-a22c-be0637c9e22a',
+
+    name: 'Danboard',
+    author: 'syuilo',
+
+    base: 'light',
+
+    props: {
+        accent: 'rgb(218, 141, 49)',
+        bg: 'rgb(218, 212, 190)',
+        fg: 'rgb(115, 108, 92)',
+        panel: 'rgb(236, 232, 220)',
+        renote: 'rgb(100, 152, 106)',
+        link: 'rgb(100, 152, 106)',
+        mention: '@accent',
+        hashtag: 'rgb(100, 152, 106)',
+        header: 'rgba(239, 227, 213, 0.75)',
+        navBg: 'rgb(216, 206, 182)',
+        inputBorder: 'rgba(0, 0, 0, 0.1)',
+    },
+}
+
+```
+
+* `id` ... テーマの一意なID。UUIDをおすすめします。
+* `name` ... テーマ名
+* `author` ... テーマの作者
+* `desc` ... テーマの説明(オプション)
+* `base` ... 明るいテーマか、暗いテーマか
+    * `light`にすると明るいテーマになり、`dark`にすると暗いテーマになります。
+    * テーマはここで設定されたベーステーマを継承します。
+* `props` ... テーマのスタイル定義。これから説明します。
+
+### テーマのスタイル定義
+`props`下にはテーマのスタイルを定義します。 キーがCSSの変数名になり、バリューで中身を指定します。 なお、この`props`オブジェクトはベーステーマから継承されます。 ベーステーマは、このテーマの`base`が`light`なら[_light.json5](https://github.com/misskey-dev/misskey/blob/develop/src/client/themes/_light.json5)で、`dark`なら[_dark.json5](https://github.com/misskey-dev/misskey/blob/develop/src/client/themes/_dark.json5)です。 つまり、このテーマ内の`props`に`panel`というキーが無くても、そこにはベーステーマの`panel`があると見なされます。
+
+#### バリューで使える構文
+* 16進数で表された色
+    * 例: `#00ff00`
+* `rgb(r, g, b)`形式で表された色
+    * 例: `rgb(0, 255, 0)`
+* `rgb(r, g, b, a)`形式で表された透明度を含む色
+    * 例: `rgba(0, 255, 0, 0.5)`
+* 他のキーの値の参照
+    * `@{キー名}`と書くと他のキーの値の参照になります。`{キー名}`は参照したいキーの名前に置き換えます。
+    * 例: `@panel`
+* 定数(後述)の参照
+    * `${定数名}`と書くと定数の参照になります。`{定数名}`は参照したい定数の名前に置き換えます。
+    * 例: `$main`
+* 関数(後述)
+    * `:{関数名}<{引数}<{色}`
+
+#### 定数
+「CSS変数として出力はしたくないが、他のCSS変数の値として使いまわしたい」値があるときは、定数を使うと便利です。 キー名を`$`で始めると、そのキーはCSS変数として出力されません。
+
+#### 関数
+wip
diff --git a/src/docs/da-DK/features/timeline.md b/src/docs/da-DK/features/timeline.md
new file mode 100644
index 0000000000..f431014f84
--- /dev/null
+++ b/src/docs/da-DK/features/timeline.md
@@ -0,0 +1,31 @@
+# タイムライン
+タイムラインは、[ノート](./note)が時系列で表示される機能です。 タイムラインには以下で示す種類があり、種類によって表示されるノートも異なります。 なお、タイムラインの種類によってはサーバーにより無効になっている場合があります。
+
+## ホーム
+自分のフォローしているユーザーの投稿が流れます。HTLと略されます。
+
+## ローカル
+全てのローカルユーザーの「ホーム」指定されていない投稿が流れます。LTLと略されます。
+
+## ソーシャル
+自分のフォローしているユーザーの投稿と、全てのローカルユーザーの「ホーム」指定されていない投稿が流れます。STLと略されます。
+
+## グローバル
+全てのローカルユーザーの「ホーム」指定されていない投稿と、サーバーに届いた全てのリモートユーザーの「ホーム」指定されていない投稿が流れます。GTLと略されます。
+
+## 比較
+| ソース          |       |     | タイムライン |       |       |
+| ------------ | ----- | --- | ------ | ----- | ----- |
+| ユーザー         | 公開範囲  | ホーム | ローカル   | ソーシャル | グローバル |
+| ローカル (フォロー)  | 公開    | ✔   | ✔      | ✔     | ✔     |
+|              | ホーム   | ✔   |        | ✔     |       |
+|              | フォロワー | ✔   | ✔      | ✔     | ✔     |
+| リモート (フォロー)  | 公開    | ✔   |        | ✔     | ✔     |
+|              | ホーム   | ✔   |        | ✔     |       |
+|              | フォロワー | ✔   |        | ✔     | ✔     |
+| ローカル (未フォロー) | 公開    |     | ✔      | ✔     | ✔     |
+|              | ホーム   |     |        |       |       |
+|              | フォロワー |     |        |       |       |
+| リモート (未フォロー) | 公開    |     |        |       | ✔     |
+|              | ホーム   |     |        |       |       |
+|              | フォロワー |     |        |       |       |
diff --git a/src/docs/da-DK/features/widgets.md b/src/docs/da-DK/features/widgets.md
new file mode 100644
index 0000000000..a7c2c1d1d6
--- /dev/null
+++ b/src/docs/da-DK/features/widgets.md
@@ -0,0 +1,7 @@
+# ウィジェット
+ウィジェットは、MisskeyのUI上に設置できる小型の情報表示、操作が行えるパーツです。
+
+ウィジェットを編集するには、ウィジェット編集モードに切り替えます。切り替え方法はUIによって異なります。 ウィジェット編集モードでは、ウィジェットの追加、削除、並び替え、およびそれぞれのウィジェットの設定を行えます。
+
+## 利用可能なウィジェット一覧
+todo
diff --git a/src/docs/da-DK/general/apps.md b/src/docs/da-DK/general/apps.md
new file mode 100644
index 0000000000..1f4c85fe8f
--- /dev/null
+++ b/src/docs/da-DK/general/apps.md
@@ -0,0 +1,6 @@
+# サードパーティアプリのリスト
+## クライアント
+todo
+
+## 連携サービス
+todo
diff --git a/src/docs/da-DK/general/faq.md b/src/docs/da-DK/general/faq.md
new file mode 100644
index 0000000000..ecb664e32e
--- /dev/null
+++ b/src/docs/da-DK/general/faq.md
@@ -0,0 +1,22 @@
+# よくある質問
+ここでは利用上のよくある質問について掲載しています。 Misskeyのプロジェクト自体についてのよくある質問は[こちら](./misskey)に掲載されています。
+
+### iOS/Androidのアプリはありますか?
+公式にはそういったOSのネイティブアプリを開発していませんが、サードパーティ製のアプリがいくつかあります。 詳しくは[こちら](./apps)をご覧ください。
+
+ただ、サードパーティ製アプリはどうしても機能への対応が遅れてしまうため、とくに拘りがなければ公式のWebクライアントの利用をおすすめします。 なお、MisskeyのWebクライアントはPWAに対応しているので、ネイティブアプリのように動作させることも可能です。 詳しくは[こちら](todo)をご覧ください。
+
+## 他のサーバーのユーザーをフォローするときは?
+メニューから検索を選び、ユーザー名をホスト込みで入力します。例: `@syuilo@misskey.io`
+
+## Renoteを削除するには?
+Renoteの時刻表示の隣にある「...」を押し、「Renote解除」を選択します。 Renoteについては[こちら](../features/note)をご確認ください。
+
+## URLのプレビューを表示させたくない
+MFMには、そのURLのプレビューを無効にする構文があります。詳細は[MFMチートシート](/mfm-cheat-sheet)をご確認ください。
+
+## カスタム絵文字を追加したい
+運営者のみがカスタム絵文字を追加、編集、削除できます。それらを希望する場合は運営者に依頼してください。
+
+## Botを開発したい
+Misskey APIを利用してBotの開発が可能です。[こちら](../advanced/develop-bot)をご確認ください。
diff --git a/src/docs/da-DK/general/glossary.md b/src/docs/da-DK/general/glossary.md
new file mode 100644
index 0000000000..1f403a06d2
--- /dev/null
+++ b/src/docs/da-DK/general/glossary.md
@@ -0,0 +1,83 @@
+# 用語集
+Misskeyに関する用語集です。
+
+## AcitivityPub
+(読み: あくてぃびてぃぱぶ) 分散型を実現するために用いられるプロトコル(仕様)。このプロトコルに則ってサーバー同士通信を行うことで、連合が行われ、Fediverseを形成しています。
+
+## AiScript
+(読み: あいすくりぷと) Misskey上で使用できるプログラミング言語です。詳細は[こちら。](../advanced/aiscript)
+
+## API
+(読み: えーぴーあい) Misskeyのサーバーが公開している、プログラムからMisskeyを扱うためのインターフェース。詳細は[こちら。](../advanced/api)
+
+## Bot
+(読み: ぼっと) プログラムによって動作しているアカウント。
+
+## CW
+(読み: こんてんつわーにんぐ) Contents Warningの略。ノートの内容を、操作なしには表示しないようにできる機能。主に長大な内容を隠すためや、ネタバレ防止などに使われます。
+
+## Fediverse
+(読み: ふぇでぃばーす) Misskeyを含む様々な分散型ソフトウェアのサーバーで構成されたネットワーク。
+
+## GTL
+グローバルタイムライン(Global TimeLine)の略。タイムラインの詳細は[こちら。](../features/timeline)
+
+## HTL
+ホームタイムライン(Home TimeLine)の略。タイムラインの詳細は[こちら。](../features/timeline)
+
+## LTL
+ローカルタイムライン(Local TimeLine)の略。タイムラインの詳細は[こちら。](../features/timeline)
+
+## MFM
+(読み: えむえふえむ) Misskey Flavored Markdownの略で、Misskey上で使用できるマークアップ言語です。詳細は[こちら。](../features/mfm)
+
+## NSFW
+(読み: のっとせーふふぉーわーく) Not Safe For Workの略。画像を「閲覧注意」扱いにし、操作なしには表示しないようにすることができる機能。
+
+## Renote
+(読み: りのーと) 既にあるノートを引用、もしくはそのノートを新しいノートとして共有する行為、またそれによって作成されたノート。詳細は[こちら。](../features/note)
+
+## STL
+ソーシャルタイムライン(Social TimeLine)の略。タイムラインの詳細は[こちら。](../features/timeline)
+
+## 藍
+(読み: あい) Misskeyの看板娘(公式キャラクター)です。
+
+## アクティブユーザー
+インスタンスにアカウントを作っているユーザーのうち、現在も実際にサービスを利用しているユーザーのこと。
+
+## インスタンス
+todo
+
+## コントロールパネル
+インスタンスの設定画面のこと。
+
+## サーバー
+todo
+
+## サイレンス
+ノートをパブリックな公開範囲で投稿できなくされている状態。モデレーターの判断でユーザーごとに設定されます。詳細は[こちら。](../features/silence)
+
+## 凍結
+アカウントが使用不可に設定されている状態。
+
+## ドライブ
+Misskeyにアップロードしたファイルを管理する機能。詳細は[こちら。](../features/drive)
+
+## ノート
+Misskeyに投稿される、文章、ファイル、アンケートなどを含めることができるコンテンツ。詳細は[こちら。](../features/note)
+
+## ミスキスト
+Misskeyを使う人のこと。
+
+## モデレーター
+スパムの凍結およびサイレンスや不適切な投稿の削除など、コミュニティ運営に関する権限を持つユーザー。
+
+## リモート
+他サーバーのことを指します。リモートユーザーといったように接頭辞としても使われます。ローカルの逆です。
+
+## 連合
+サーバー上で作成された情報が他のサーバーに伝わること。
+
+## ローカル
+自サーバーのことを指します。ローカルユーザー、ローカルタイムラインといったように接頭辞としても使われます。リモートの逆です。
diff --git a/src/docs/da-DK/general/links.md b/src/docs/da-DK/general/links.md
new file mode 100644
index 0000000000..d6b16856fb
--- /dev/null
+++ b/src/docs/da-DK/general/links.md
@@ -0,0 +1,5 @@
+# リンク集
+
+## ライブラリ
+- [misskey-dev/misskey.js](https://github.com/misskey-dev/misskey.js) - JavaScriptのMisskey SDK
+- [misskey-dev/mfm.js](https://github.com/misskey-dev/mfm.js) - JavaScriptのMFMパーサー実装
diff --git a/src/docs/da-DK/general/misskey.md b/src/docs/da-DK/general/misskey.md
new file mode 100644
index 0000000000..1e64a10e28
--- /dev/null
+++ b/src/docs/da-DK/general/misskey.md
@@ -0,0 +1,87 @@
+# Misskeyについて
+
+Misskeyはオープンソースの分散型マイクロブログプラットフォームプロジェクトです。 開発は日本でsyuiloによって2014年から開始されました。 ドライブ、リアクションなどの豊富な機能や、高いカスタマイズ性を備えたUIを持つことが特徴です。
+
+## 歴史
+開発当初は掲示板がメインのサービスでしたが、ユーザーが短文を投稿し、それを時系列で流れるタイムライン機能を追加したところ人気が高まり、徐々にそれがメインとして開発が進むようになりました。 当初は分散型ではありませんでしたが、2018年にAcitivityPubを実装し分散型になったことで、より多くの方に認知され利用されるサービスになり、現在に至ります。
+<div class="info">ℹ️ Misskeyという名前は、syuiloが当時聴いていたMay'nというアーティストの楽曲、Brain Diverの歌詞に由来します。</div>
+
+誰でも開発に参加することができ、現在でも活発に開発が続いています。
+
+## 分散型とは何か?
+
+<b>分散(distributed)型</b>とは、<b>非中央集権(decentralized)</b>とも呼ばれ、コミュニティが多数のサーバーに分散して存在し、それらが相互に<b>通信(連合、federation)</b>することでコンテンツ共有<b>ネットワーク(Fediverse)</b>を形成していることが特徴のサービスです。 単一のサーバーしか存在しない、もしくは複数存在しても互いに独立している場合は中央集権なサービスと言われ、例えばTwitterやFacebookなどほとんどのサービスがそれに該当します。 分散型のメリットは、自分に合った運営者やテーマのサーバーを選択できることです。自分でサーバーを作成することもできます。連合するおかげで、どのサーバーを選んでも、同じコミュニティにアクセスできます。
+
+## 常にオープンソース
+Misskeyはこれまでもこれからも、オープンソースであり続けます。オープンソースとは、簡単に言うと<b>ソフトウェアのソースコード(プログラム)が公開されている</b>ことです。ソースコードの修正や再配布が可能であることを定義に含めることもあります。 Misskeyのすべてのソースコードは[AGPL](https://github.com/misskey-dev/misskey/blob/develop/LICENSE)というオープンソースライセンスの下に[公開](https://github.com/misskey-dev)されていて、誰でも自由に閲覧、使用、修正、改変、再配布をすることができます。 オープンソースは、自分で好きなように変えたり、有害な処理が含まれていないことを確認することができたり、誰でも開発に参加できるなどの、様々なメリットがあります。 上述の分散型を実現するためにも、オープンソースであるということは必要不可欠な要素です。 再び引き合いに出しますが、TwitterやFacebookなどの利益を得ているほとんどのサービスはオープンソースではありません。
+
+<div class="info">ℹ️ 技術的に言うと、MisskeyのソースコードはGitで管理されていて、リポジトリは<a href="https://github.com/misskey-dev" target="_blank">GitHub上でホスティングされています。</a></div>
+
+## 開発に参加する、プロジェクトを支援する
+Misskeyを気に入っていただけたら、ぜひプロジェクトを支援してください。プロジェクトに貢献するには、以下で紹介するようにいろいろな方法があります。方法によっては開発のスキルは不要なので、誰でも気軽に参加し貢献することができます。いつでもお待ちしています。
+
+### 機能を追加したり、バグを修正する
+ソフトウェアエンジニアのスキルをお持ちの方であれば、ソースコードを編集する形でプロジェクトに貢献することができます。 貢献についてのガイドは[こちら](https://github.com/misskey-dev/misskey/blob/develop/CONTRIBUTING.md)です。
+
+### 議論に参加する
+新しい機能、または既存の機能について意見を述べたり、不具合を報告したりすることでも貢献できます。 そのようなディスカッションは[GitHub](https://github.com/misskey-dev)上か、[フォーラム](https://forum.misskey.io/)等で行われます。
+
+### テキストを翻訳する
+Misskeyは様々な言語に対応しています(i18n -internationalizationの略- と呼ばれます)。元の言語は基本的に日本語ですが、有志によって他の言語へと翻訳されています。 その翻訳作業に加わっていただくことでもMisskeyに貢献できます。 Misskeyは[Crowdinというサービスを使用して翻訳の管理を行っています。](https://crowdin.com/project/misskey)
+
+### 感想を投稿する
+不具合報告等だけではなく、Misskeyの良い点、楽しい点といったポジティブな意見もぜひ共有してください。開発の励みになり、それは間接的ですがプロジェクトへの貢献です。
+
+### ミスキストを増やす
+ミスキストとは、Misskeyを使用する人のことです。 知り合いに紹介するなどしてMisskeyを広めていただければ、ミスキストが増え開発のモチベーションが上がります。
+
+### 寄付をする
+Misskeyはビジネスではなく、利用は無料であるため、収益は皆様からの寄付のみです。(インスタンスによっては広告収入を得ているような場合もありますが、それは運営者の収入であり直接開発者への収入にはなりません) 寄付をしていただければ、今後も開発を続けることが可能になり、プロジェクトへの貢献になります。 寄付は基本的には[Patreon](https://www.patreon.com/syuilo)で受け付けています。 一定額寄付していただけると、Misskeyの[情報ページ](/about-misskey)に名前を記載することができます。
+
+また、サーバーの運営者も、基本的には収益を得ていません。サーバーの運営にはコストがかかるので、運営者の支援をすることもご検討ください。 開発には直接関係しませんが、サーバーがあってこそのプロジェクトなので、運営が維持されるというのは開発と同じくらい重要なことです。
+
+## クレジット
+Misskeyの開発者や、Misskeyに寄付をしてくださった方の一覧は[こちら](/about-misskey)で見ることができます。
+
+## よくある質問
+### プロジェクトは何を目指していますか?
+強いて言うと、漠然的になりますが広く使われる汎用的なプラットフォームになることを目指しています。 Misskeyは他のプロジェクトとは違い、何らかの思想(例えば、反中央集権)やビジョンに基づいて開発が行われているわけではなく、その点ではフラットです。 それが逆に、特定の方向性に縛られないフレキシブルさを生み出すことに繋がっていると感じています。
+<!-- TODO: ここにロードマップへのリンク -->
+
+### 企業によって開発されていますか?
+いいえ。Misskeyの開発は個人で行われており、商業的でもないため、特定の企業の関りはありません。 開発メンバーも基本的にはボランティアです。 また、開発に対し企業のスポンサーがつくこともありますが、その場合でもやはり開発は個人のコミュニティが主体です。
+
+### 誰が運営していますか?
+Misskeyは分散型なため、各サーバーにそれぞれ異なった運営者がいます。従って、特定の個人や企業によって、Misskeyの全てが運営されているわけではありません。 また、開発チームが運営を行うわけでもないため、運営に関する連絡は、お使いのサーバーの運営者に行ってください。 サーバーの運営者は、[このページ](/about)で確認することができます。 あなたがサーバーを作成すれば、あなたが運営者になります。
+
+### どのサーバーを選べばいいですか?
+[サーバー一覧が公開されています。](https://join.misskey.page/ja-JP/instances) サーバーによってコミュニティのテーマ(特定のこと、ものが好き 等)が決められている場合があるので、自分に合ったテーマのサーバーがあれば、そこを選ぶと良いかもしれません。 他にも、サーバーの規模、ユーザー層、国および言語、運営者が信頼できるかどうか、などの観点があります。 なお、Misskey公式のサーバーというものはありません。自身で新しくサーバーを作成するという選択肢もあります。
+
+基本的にどのサーバーを選んだとしても、他の全てのサーバーのユーザーと繋がることができます。
+
+### サーバーを建てるにはどうしたらいいですか?
+Misskeyサーバーの作成に興味を持っていただきありがとうございます。 2021年現在、Misskeyのホスティングサービスは存在しないため、サーバーの作成にはある程度の知識が必要です。 サーバーの作成方法については[こちら](todo)をご覧ください。
+
+### どのような技術を使用していますか?
+Misskeyは開発が進むにつれ使用する技術も大きく変わってきました。開発当初はMySQL + PHP + jQueryといった構成でしたが、現在は以下のようになっています。
+- サーバーサイド: Node.js
+- データベース: PostgreSQL、Redis
+- UIフレームワーク: Vue.js
+- プログラミング言語: TypeScript
+
+また、MFMやAiScriptなどの、Misskeyから派生して独自の技術も開発しています。
+
+### Mastodonのフォークですか?
+いいえ。MisskeyはMastodonやその他のプロジェクトとは全く別のプロジェクトです。 開発に関しても、Misskeyの方が昔から開発されています。ただし、分散型になったのはMastodonの登場より後です。 同じAcitivityPubという分散のためのプロトコルを実装しているという点以外、両者に特に関りがあるわけでもありません。
+
+### iOS/Androidのアプリはありますか?
+公式にはそういったOSのネイティブアプリを開発していませんが、サードパーティ製のアプリがいくつかあります。 詳しくは[こちら](./apps)をご覧ください。
+
+ただ、サードパーティ製アプリはどうしても機能への対応が遅れてしまうため、とくに拘りがなければ公式のWebクライアントの利用をおすすめします。 なお、MisskeyのWebクライアントはPWAに対応しているので、ネイティブアプリのように動作させることも可能です。 詳しくは[こちら](todo)をご覧ください。
+
+### Misskeyのロゴ、アイコンはどこで入手できますか?
+(準備中)
+
+### 時折目にする猫耳の可愛い女の子は?
+Misskeyの守り神、藍ちゃんです。アイチャンカワイイヤッター!
+<div class="info">ℹ️ 藍ちゃんについては<a href="https://xn--931a.moe/" target="_blank">こちら</a>です。</div>
diff --git a/src/docs/da-DK/general/report-issue.md b/src/docs/da-DK/general/report-issue.md
new file mode 100644
index 0000000000..63527e32af
--- /dev/null
+++ b/src/docs/da-DK/general/report-issue.md
@@ -0,0 +1,8 @@
+# 不具合の報告
+不具合と思われる状況に遭遇したときは、まず[トラブルシューティング](./troubleshooting)をご一読ください。 それでも問題が解決しないときは、以下の情報を含めて[フォーラム](https://forum.misskey.io/)に投稿してください。 投稿することで、解決策が見つかったり、不具合と判断されれば開発チームによって修正が行われます。
+
+## 含める情報
+- Misskeyのバージョン([情報ページ](/about)で確認できます)
+- お使いのブラウザの種類とバージョン
+- お使いのOSの種類とバージョン
+- 問題の再現手順
diff --git a/src/docs/da-DK/general/troubleshooting.md b/src/docs/da-DK/general/troubleshooting.md
new file mode 100644
index 0000000000..4a35091299
--- /dev/null
+++ b/src/docs/da-DK/general/troubleshooting.md
@@ -0,0 +1,36 @@
+# トラブルシューティング
+<div class="info">ℹ️ <a href="./faq">よくある質問</a>も合わせてお役立てください。</div>
+
+問題が発生したときは、まずこちらをご確認ください。 該当する項目が無い、もしくは手順を試しても効果がない場合は、サーバーの管理者に連絡するか[不具合を報告](./report-issue)してください。
+
+## クライアントが起動しない
+ほとんどの場合、お使いのブラウザまたはOSのバージョンが古いことが原因です。 ブラウザおよびOSのバージョンを最新のものに更新してから、再度試してみてください。
+
+これは稀ですが、それでも起動しない場合は、キャッシュが原因の場合があります。ブラウザのキャッシュをクリアして、再度試してみてください。
+
+## ページが読み込めない
+クライアントが起動するもののページが読み込めないというエラーが出る場合は、ネットワークに問題がないか確認してください。また、サーバーがダウンしていないか確認してください。
+
+これは稀ですが、キャッシュが原因の場合があります。ブラウザのキャッシュをクリアして、再度試してみてください。
+
+まだ問題がある場合は、サーバーの問題と思われるのでサーバーの管理者に連絡してください。
+
+## クライアントの動作が遅い
+以下を試してみてください:
+
+- クライアント設定で「UIのアニメーションを減らす」を有効にする
+- クライアント設定で「モーダルにぼかし効果を使用」を無効にする
+- お使いのブラウザの設定でハードウェアアクセラレーションを有効にする
+- お使いのデバイスのスペックを上げる
+
+## 通知やアンテナ等の点滅が消えない
+点滅は、未読のコンテンツがあることを示しています。通常点滅が消えない場合は、コンテンツを遡ると未読なコンテンツが残っています。 すべて既読にしたと思われるのに、それでもなお点滅が続く場合(おそらく不具合と思われます)は設定から強制的にすべて既読扱いにすることができます。
+
+## Renoteができない
+フォロワー限定のノートはRenoteすることはできません。
+
+## UI上で特定の要素が表示されない
+広告ブロッカーを使用しているとそのような不具合が発生することがあります。Misskeyではオフにしてご利用ください。
+
+## UI上で未翻訳の部分がある
+ほとんどの場合、単に翻訳が間に合っていないだけで、不具合ではありません。翻訳が終わるまでお待ちください。 [翻訳に参加](./misskey)していただくことも可能です。
diff --git a/src/docs/de-DE/admin/disable-timelines.md b/src/docs/de-DE/admin/disable-timelines.md
new file mode 100644
index 0000000000..b081e35ab0
--- /dev/null
+++ b/src/docs/de-DE/admin/disable-timelines.md
@@ -0,0 +1,8 @@
+# LTL/STL/GTLの無効化
+Misskeyでは、LTL/STL/GTLをそれぞれ無効化することができます。有効/無効を切り替えるには、インスタンスコントロールパネルで設定します。
+
+LTLやSTLは、そのインスタンス全員の投稿が見れるため、新規のユーザーにとってはユーザーを探す必要がなくなり、興味のあるユーザーを見つけやすいという利点があります。 しかし同時に、フォロー機能が活用されなくなったり、不適切な投稿が目につきやすくなったり、チャットのようになることで内輪感が生じて逆に新規ユーザーが参加しにくくなるといったデメリットも持ち合わせています。 サーバーによってメリット/デメリットどちらが優勢かは異なるので、オプションとして無効にできるようになっています。 もしデメリットの方が上回っていると感じたら、それらのタイムラインを無効化することも検討してください。
+
+<div class="warn">⚠️ 無効化を行うと、ユーザーが困惑し、短期的に見て利用者が減る可能性があります。そのため、無効化の際は影響を慎重に検討し、事前に説明してフォローを整える期間を一定程度設けることを推奨します。</div>
+
+なお、管理者/モデレーターは、これらのタイムラインの無効化状態は適用されず、引き続き利用することが可能です。
diff --git a/src/docs/de-DE/admin/faq.md b/src/docs/de-DE/admin/faq.md
new file mode 100644
index 0000000000..317b4e0655
--- /dev/null
+++ b/src/docs/de-DE/admin/faq.md
@@ -0,0 +1,5 @@
+# よくある質問
+ここでは、サーバー管理者向けのよくある質問を掲載しています。
+
+## デフォルトテーマを設定したい
+現在、デフォルトテーマ設定機能は実装されていません。
diff --git a/src/docs/de-DE/advanced/aiscript.md b/src/docs/de-DE/advanced/aiscript.md
new file mode 100644
index 0000000000..604d17daa8
--- /dev/null
+++ b/src/docs/de-DE/advanced/aiscript.md
@@ -0,0 +1,7 @@
+# AiScript
+AiScriptは、Misskeyで使用できるスクリプト言語です。
+
+<div class="info">ℹ️ AiScript実装はMisskeyとは別リポジトリで、<a href="https://github.com/syuilo/aiscript" target="_blank">オープンソースで公開されています。</a></div>
+
+## 使い方
+AiScriptの構文や組み込み関数などのドキュメントは、[こちら](https://github.com/syuilo/aiscript/tree/master/docs)で公開されています。
diff --git a/src/docs/de-DE/advanced/api.md b/src/docs/de-DE/advanced/api.md
new file mode 100644
index 0000000000..76019b6145
--- /dev/null
+++ b/src/docs/de-DE/advanced/api.md
@@ -0,0 +1,58 @@
+# Misskey API
+
+MisskeyAPIを使ってMisskeyクライアント、Misskey連携Webサービス、Bot等(以下「アプリケーション」と呼びます)を開発できます。 ストリーミングAPIもあるので、リアルタイム性のあるアプリケーションを作ることも可能です。
+
+APIを使い始めるには、まずアクセストークンを取得する必要があります。 このドキュメントでは、アクセストークンを取得する手順を説明した後、基本的なAPIの使い方を説明します。
+
+## アクセストークンの取得
+基本的に、APIはリクエストにはアクセストークンが必要となります。 APIにリクエストするのが自分自身なのか、不特定の利用者に使ってもらうアプリケーションなのかによって取得手順は異なります。
+
+* 前者の場合: [「自分自身のアクセストークンを手動発行する」](#自分自身のアクセストークンを手動発行する)に進む
+* 後者の場合: [「アプリケーション利用者にアクセストークンの発行をリクエストする」](#アプリケーション利用者にアクセストークンの発行をリクエストする)に進む
+
+### 自分自身のアクセストークンを手動発行する
+「設定 > API」で、自分のアクセストークンを発行できます。
+
+[「APIの使い方」へ進む](#APIの使い方)
+
+### アプリケーション利用者にアクセストークンの発行をリクエストする
+アプリケーション利用者のアクセストークンを取得するには、以下の手順で発行をリクエストします。
+
+#### Step 1
+
+UUIDを生成する。以後これをセッションIDと呼びます。
+
+> このセッションIDは毎回生成し、使いまわさないようにしてください。
+
+#### Step 2
+
+`{_URL_}/miauth/{session}`をユーザーのブラウザで表示させる。`{session}`の部分は、セッションIDに置き換えてください。
+> 例: `{_URL_}/miauth/c1f6d42b-468b-4fd2-8274-e58abdedef6f`
+
+表示する際、URLにクエリパラメータとしていくつかのオプションを設定できます:
+* `name` ... アプリケーション名
+    * > 例: `MissDeck`
+* `icon` ... アプリケーションのアイコン画像URL
+    * > 例: `https://missdeck.example.com/icon.png`
+* `callback` ... 認証が終わった後にリダイレクトするURL
+    * > 例: `https://missdeck.example.com/callback`
+    * リダイレクト時には、`session`というクエリパラメータでセッションIDが付きます
+* `permission` ... アプリケーションが要求する権限
+    * > 例: `write:notes,write:following,read:drive`
+    * 要求する権限を`,`で区切って列挙します
+    * どのような権限があるかは[APIリファレンス](/api-doc)で確認できます
+
+#### Step 3
+ユーザーが発行を許可した後、`{_URL_}/api/miauth/{session}/check`にPOSTリクエストすると、レスポンスとしてアクセストークンを含むJSONが返ります。
+
+レスポンスに含まれるプロパティ:
+* `token` ... ユーザーのアクセストークン
+* `user` ... ユーザーの情報
+
+[「APIの使い方」へ進む](#APIの使い方)
+
+## APIの使い方
+**APIはすべてPOSTで、リクエスト/レスポンスともにJSON形式です。RESTではありません。** アクセストークンは、`i`というパラメータ名でリクエストに含めます。
+
+* [APIリファレンス](/api-doc)
+* [ストリーミングAPI](./stream)
diff --git a/src/docs/de-DE/advanced/create-plugin.md b/src/docs/de-DE/advanced/create-plugin.md
new file mode 100644
index 0000000000..ee96786857
--- /dev/null
+++ b/src/docs/de-DE/advanced/create-plugin.md
@@ -0,0 +1,74 @@
+# プラグインの作成
+Misskey Webクライアントのプラグイン機能を使うと、クライアントを拡張し、様々な機能を追加できます。 ここではプラグインの作成にあたってのメタデータ定義や、AiScript APIリファレンスを掲載します。
+
+## Metadaten
+プラグインは、AiScriptのメタデータ埋め込み機能を使って、デフォルトとしてプラグインのメタデータを定義する必要があります。 メタデータは次のプロパティを含むオブジェクトです。
+
+### name
+プラグイン名
+
+### author
+プラグイン作者
+
+### version
+プラグインバージョン。数値を指定してください。
+
+### description
+プラグインの説明
+
+### permissions
+プラグインが要求する権限。MisskeyAPIにリクエストする際に用いられます。
+
+### config
+プラグインの設定情報を表すオブジェクト。 キーに設定名、値に以下のプロパティを含めます。
+
+#### type
+設定値の種類を表す文字列。以下から選択します。 string number boolean
+
+#### label
+ユーザーに表示する設定名
+
+#### description
+設定の説明
+
+#### default
+設定のデフォルト値
+
+## APIリファレンス
+AiScript標準で組み込まれているAPIは掲載しません。
+
+### Mk:dialog(title text type)
+ダイアログを表示します。typeには以下の値が設定できます。 info success warn error question 省略すると info になります。
+
+### Mk:confirm(title text type)
+確認ダイアログを表示します。typeには以下の値が設定できます。 info success warn error question 省略すると question になります。 ユーザーが"OK"を選択した場合は true を、"キャンセル"を選択した場合は false が返ります。
+
+### Mk:api(endpoint params)
+Misskey APIにリクエストします。第一引数にエンドポイント名、第二引数にパラメータオブジェクトを渡します。
+
+### Mk:save(key value)
+任意の値に任意の名前を付けて永続化します。永続化した値は、AiScriptコンテキストが終了しても残り、Mk:loadで読み取ることができます。
+
+### Mk:load(key)
+Mk:saveで永続化した指定の名前の値を読み取ります。
+
+### Plugin:register_post_form_action(title fn)
+投稿フォームにアクションを追加します。第一引数にアクション名、第二引数にアクションが選択された際のコールバック関数を渡します。 コールバック関数には、第一引数に投稿フォームオブジェクトが渡されます。
+
+### Plugin:register_note_action(title fn)
+ノートメニューに項目を追加します。第一引数に項目名、第二引数に項目が選択された際のコールバック関数を渡します。 コールバック関数には、第一引数に対象のノートオブジェクトが渡されます。
+
+### Plugin:register_user_action(title fn)
+ユーザーメニューに項目を追加します。第一引数に項目名、第二引数に項目が選択された際のコールバック関数を渡します。 コールバック関数には、第一引数に対象のユーザーオブジェクトが渡されます。
+
+### Plugin:register_note_view_interruptor(fn)
+UIに表示されるノート情報を書き換えます。 コールバック関数には、第一引数に対象のノートオブジェクトが渡されます。 コールバック関数の返り値でノートが書き換えられます。
+
+### Plugin:register_note_post_interruptor(fn)
+ノート投稿時にノート情報を書き換えます。 コールバック関数には、第一引数に対象のノートオブジェクトが渡されます。 コールバック関数の返り値でノートが書き換えられます。
+
+### Plugin:open_url(url)
+第一引数に渡されたURLをブラウザの新しいタブで開きます。
+
+### Plugin:config
+プラグインの設定が格納されるオブジェクト。プラグイン定義のconfigで設定したキーで値が入ります。
diff --git a/src/docs/de-DE/advanced/develop-bot.md b/src/docs/de-DE/advanced/develop-bot.md
new file mode 100644
index 0000000000..7f825e9bc4
--- /dev/null
+++ b/src/docs/de-DE/advanced/develop-bot.md
@@ -0,0 +1,6 @@
+# Botの作成
+[Misskey API](./api)を利用してBotの開発が可能です。 また、いくつかのBot実装が公開されているため、ぜひ参考にしてください。
+
+- [syuilo/ai](https://github.com/syuilo/ai) ... Node.js上で動く、TypeScript製Bot実装
+
+Botを作成したときは、プロフィール設定からBotフラグをオンにしておくことを強くおすすめします。
diff --git a/src/docs/de-DE/advanced/reversi-bot.md b/src/docs/de-DE/advanced/reversi-bot.md
new file mode 100644
index 0000000000..3ffb1ee244
--- /dev/null
+++ b/src/docs/de-DE/advanced/reversi-bot.md
@@ -0,0 +1,160 @@
+# MisskeyリバーシBotの開発
+Misskeyのリバーシ機能に対応したBotの開発方法をここに記します。
+
+1. `games/reversi`ストリームに以下のパラメータを付けて接続する:
+    * `i`: botアカウントのAPIキー
+
+2. 対局への招待が来たら、ストリームから`invited`イベントが流れてくる
+    * イベントの中身に、`parent`という名前で対局へ誘ってきたユーザーの情報が含まれている
+
+3. `games/reversi/match`へ、`user_id`として`parent`の`id`が含まれたリクエストを送信する
+
+4. 上手くいくとゲーム情報が返ってくるので、`games/reversi-game`ストリームへ、以下のパラメータを付けて接続する:
+    * `i`: botアカウントのAPIキー
+    * `game`: `game`の`id`
+
+5. この間、相手がゲームの設定を変更するとその都度`update-settings`イベントが流れてくるので、必要であれば何かしらの処理を行う
+
+6. 設定に満足したら、`{ type: 'accept' }`メッセージをストリームに送信する
+
+7. ゲームが開始すると、`started`イベントが流れてくる
+    * イベントの中身にはゲーム情報が含まれている
+
+8. 石を打つには、ストリームに`{ type: 'set', pos: <位置> }`を送信する(位置の計算方法は後述)
+
+9. 相手または自分が石を打つと、ストリームから`set`イベントが流れてくる
+    * `color`として石の色が含まれている
+    * `pos`として位置情報が含まれている
+
+## 位置の計算法
+8x8のマップを考える場合、各マスの位置(インデックスと呼びます)は次のようになっています:
+```
++--+--+--+--+--+--+--+--+
+| 0| 1| 2| 3| 4| 5| 6| 7|
++--+--+--+--+--+--+--+--+
+| 8| 9|10|11|12|13|14|15|
++--+--+--+--+--+--+--+--+
+|16|17|18|19|20|21|22|23|
+...
+```
+
+### X,Y座標 から インデックス に変換する
+```
+pos = x + (y * mapWidth)
+```
+`mapWidth`は、ゲーム情報の`map`から、次のようにして計算できます:
+```
+mapWidth = map[0].length
+```
+
+### インデックス から X,Y座標 に変換する
+```
+x = pos % mapWidth
+y = Math.floor(pos / mapWidth)
+```
+
+## マップ情報
+マップ情報は、ゲーム情報の`map`に入っています。 文字列の配列になっており、ひとつひとつの文字がマス情報を表しています。 それをもとにマップのデザインを知る事が出来ます:
+* `(スペース)` ... マス無し
+* `-` ... マス
+* `b` ... 初期配置される黒石
+* `w` ... 初期配置される白石
+
+例えば、4*4の次のような単純なマップがあるとします:
+```text
++---+---+---+---+
+|   |   |   |   |
++---+---+---+---+
+|   | ○ | ● |   |
++---+---+---+---+
+|   | ● | ○ |   |
++---+---+---+---+
+|   |   |   |   |
++---+---+---+---+
+```
+
+この場合、マップデータはこのようになります:
+```javascript
+['----', '-wb-', '-bw-', '----']
+```
+
+## ユーザーにフォームを提示して対話可能Botを作成する
+ユーザーとのコミュニケーションを行うため、ゲームの設定画面でユーザーにフォームを提示することができます。 例えば、Botの強さをユーザーが設定できるようにする、といったシナリオが考えられます。
+
+フォームを提示するには、`reversi-game`ストリームに次のメッセージを送信します:
+```javascript
+{
+  type: 'init-form',
+  body: [フォームコントロールの配列]
+}
+```
+
+フォームコントロールの配列については今から説明します。 フォームコントロールは、次のようなオブジェクトです:
+```javascript
+{
+  id: 'switch1',
+  type: 'switch',
+  label: 'Enable hoge',
+  value: false
+}
+```
+`id` ... コントロールのID。 `type` ... コントロールの種類。後述します。 `label` ... コントロールと一緒に表記するテキスト。 `value` ... コントロールのデフォルト値。
+
+### フォームの操作を受け取る
+ユーザーがフォームを操作すると、ストリームから`update-form`イベントが流れてきます。 イベントの中身には、コントロールのIDと、ユーザーが設定した値が含まれています。 例えば、上で示したスイッチをユーザーがオンにしたとすると、次のイベントが流れてきます:
+```javascript
+{
+  id: 'switch1',
+  value: true
+}
+```
+
+### フォームコントロールの種類
+#### Fallunterscheidung
+type: `switch` スイッチを表示します。何かの機能をオン/オフさせたい場合に有用です。
+
+##### プロパティ
+`label` ... スイッチに表記するテキスト。
+
+#### ラジオボタン
+type: `radio` ラジオボタンを表示します。選択肢を提示するのに有用です。例えば、Botの強さを設定させるなどです。
+
+##### プロパティ
+`items` ... ラジオボタンの選択肢。例:
+```javascript
+items: [{
+  label: 'å¼±',
+  value: 1
+}, {
+  label: '中',
+  value: 2
+}, {
+  label: 'å¼·',
+  value: 3
+}]
+```
+
+#### スライダー
+type: `slider` スライダーを表示します。
+
+##### プロパティ
+`min` ... スライダーの下限。 `max` ... スライダーの上限。 `step` ... 入力欄で刻むステップ値。
+
+#### テキストボックス
+type: `textbox` テキストボックスを表示します。ユーザーになにか入力させる一般的な用途に利用できます。
+
+## ユーザーにメッセージを表示する
+設定画面でユーザーと対話する、フォーム以外のもうひとつの方法がこれです。ユーザーになにかメッセージを表示することができます。 例えば、ユーザーがBotの対応していないモードやマップを選択したとき、警告を表示するなどです。 メッセージを表示するには、次のメッセージをストリームに送信します:
+```javascript
+{
+  type: 'message',
+  body: {
+    text: 'メッセージ内容',
+    type: 'メッセージの種類'
+  }
+}
+```
+メッセージの種類: `success`, `info`, `warning`, `error`。
+
+## 投了する
+投了をするには、<a href="./api/endpoints/games/reversi/games/surrender">このエンドポイント</a>にリクエストします。
diff --git a/src/docs/de-DE/advanced/stream.md b/src/docs/de-DE/advanced/stream.md
new file mode 100644
index 0000000000..42ec8df084
--- /dev/null
+++ b/src/docs/de-DE/advanced/stream.md
@@ -0,0 +1,350 @@
+# ストリーミングAPI
+
+ストリーミングAPIを使うと、リアルタイムで様々な情報(例えばタイムラインに新しい投稿が流れてきた、メッセージが届いた、フォローされた、など)を受け取ったり、様々な操作を行ったりすることができます。
+
+## ストリームに接続する
+
+ストリーミングAPIを利用するには、まずMisskeyサーバーに**websocket**接続する必要があります。
+
+以下のURLに、`i`というパラメータ名で認証情報を含めて、websocket接続してください。例:
+```
+%WS_URL%/streaming?i=xxxxxxxxxxxxxxx
+```
+
+認証情報は、自分のAPIキーや、アプリケーションからストリームに接続する際はユーザーのアクセストークンのことを指します。
+
+<div class="info">ℹ️ 認証情報の取得については、<a href="./api">こちらのドキュメント</a>をご確認ください。</div>
+
+---
+
+認証情報は省略することもできますが、その場合非ログインでの利用ということになり、受信できる情報や可能な操作は限られます。例:
+
+```
+%WS_URL%/streaming
+```
+
+---
+
+ストリームに接続すると、後述するAPI操作や、投稿の購読を行ったりすることができます。 しかしまだこの段階では、例えばタイムラインへの新しい投稿を受信したりすることはできません。 それを行うには、ストリーム上で、後述する**チャンネル**に接続する必要があります。
+
+**ストリームでのやり取りはすべてJSONです。**
+
+## Kanäle
+MisskeyのストリーミングAPIにはチャンネルという概念があります。これは、送受信する情報を分離するための仕組みです。 Misskeyのストリームに接続しただけでは、まだリアルタイムでタイムラインの投稿を受信したりはできません。 ストリーム上でチャンネルに接続することで、様々な情報を受け取ったり情報を送信したりすることができるようになります。
+
+ひとつのストリーム上で、同時に複数のチャンネルに接続することができます。
+
+### チャンネルに接続する
+チャンネルに接続するには、次のようなデータをJSONでストリームに送信します:
+
+```json
+{
+    type: 'connect',
+    body: {
+        channel: 'xxxxxxxx',
+        id: 'foobar',
+        params: {
+            ...
+        }
+    }
+}
+```
+
+ここで、
+* `channel`には接続したいチャンネル名を設定します。チャンネルの種類については後述します。
+* `id`にはそのチャンネルとやり取りするための任意のIDを設定します。ストリームでは様々なメッセージが流れるので、そのメッセージがどのチャンネルからのものなのか識別する必要があるからです。このIDは、UUIDや、乱数のようなもので構いません。
+* `params`はチャンネルに接続する際のパラメータです。チャンネルによって接続時に必要とされるパラメータは異なります。パラメータ不要のチャンネルに接続する際は、このプロパティは省略可能です。
+
+<div class="info">ℹ️ IDはチャンネルごとではなく「チャンネルの接続ごと」です。なぜなら、同じチャンネルに異なるパラメータで複数接続するケースもあるからです。</div>
+
+### チャンネルからのメッセージを受け取る
+例えばタイムラインのチャンネルなら、新しい投稿があった時にメッセージを発します。そのメッセージを受け取ることで、タイムラインに新しい投稿がされたことをリアルタイムで知ることができます。
+
+チャンネルがメッセージを発すると、次のようなデータがJSONでストリームに流れてきます:
+```json
+{
+    type: 'channel',
+    body: {
+        id: 'foobar',
+        type: 'something',
+        body: {
+            some: 'thing'
+        }
+    }
+}
+```
+
+ここで、
+* `id`には前述したそのチャンネルに接続する際に設定したIDが設定されています。これで、このメッセージがどのチャンネルからのものなのか知ることができます。
+* `type`にはメッセージの種類が設定されます。チャンネルによって、どのような種類のメッセージが流れてくるかは異なります。
+* `body`にはメッセージの内容が設定されます。チャンネルによって、どのような内容のメッセージが流れてくるかは異なります。
+
+### チャンネルに向けてメッセージを送信する
+チャンネルによっては、メッセージを受け取るだけでなく、こちらから何かメッセージを送信し、何らかの操作を行える場合があります。
+
+チャンネルにメッセージを送信するには、次のようなデータをJSONでストリームに送信します:
+```json
+{
+    type: 'channel',
+    body: {
+        id: 'foobar',
+        type: 'something',
+        body: {
+            some: 'thing'
+        }
+    }
+}
+```
+
+ここで、
+* `id`には前述したそのチャンネルに接続する際に設定したIDを設定します。これで、このメッセージがどのチャンネルに向けたものなのか識別させることができます。
+* `type`にはメッセージの種類を設定します。チャンネルによって、どのような種類のメッセージを受け付けるかは異なります。
+* `body`にはメッセージの内容を設定します。チャンネルによって、どのような内容のメッセージを受け付けるかは異なります。
+
+### チャンネルから切断する
+チャンネルから切断するには、次のようなデータをJSONでストリームに送信します:
+
+```json
+{
+    type: 'disconnect',
+    body: {
+        id: 'foobar'
+    }
+}
+```
+
+ここで、
+* `id`には前述したそのチャンネルに接続する際に設定したIDを設定します。
+
+## ストリームを経由してAPIリクエストする
+
+ストリームを経由してAPIリクエストすると、HTTPリクエストを発生させずにAPIを利用できます。そのため、コードを簡潔にできたり、パフォーマンスの向上を見込めるかもしれません。
+
+ストリームを経由してAPIリクエストするには、次のようなデータをJSONでストリームに送信します:
+```json
+{
+    type: 'api',
+    body: {
+        id: 'xxxxxxxxxxxxxxxx',
+        endpoint: 'notes/create',
+        data: {
+            text: 'yee haw!'
+        }
+    }
+}
+```
+
+ここで、
+* `id`には、APIのレスポンスを識別するための、APIリクエストごとの一意なIDを設定する必要があります。UUIDや、簡単な乱数のようなもので構いません。
+* `endpoint`には、あなたがリクエストしたいAPIのエンドポイントを指定します。
+* `data`には、エンドポイントのパラメータを含めます。
+
+<div class="info">ℹ️ APIのエンドポイントやパラメータについてはAPIリファレンスをご確認ください。</div>
+
+### レスポンスの受信
+
+APIへリクエストすると、レスポンスがストリームから次のような形式で流れてきます。
+
+```json
+{
+    type: 'api:xxxxxxxxxxxxxxxx',
+    body: {
+        ...
+    }
+}
+```
+
+ここで、
+* `xxxxxxxxxxxxxxxx`の部分には、リクエストの際に設定された`id`が含まれています。これにより、どのリクエストに対するレスポンスなのか判別することができます。
+* `body`には、レスポンスが含まれています。
+
+## 投稿のキャプチャ
+
+Misskeyは投稿のキャプチャと呼ばれる仕組みを提供しています。これは、指定した投稿のイベントをストリームで受け取る機能です。
+
+例えばタイムラインを取得してユーザーに表示したとします。ここで誰かがそのタイムラインに含まれるどれかの投稿に対してリアクションしたとします。
+
+しかし、クライアントからするとある投稿にリアクションが付いたことなどは知る由がないため、リアルタイムでリアクションをタイムライン上の投稿に反映して表示するといったことができません。
+
+この問題を解決するために、Misskeyは投稿のキャプチャ機構を用意しています。投稿をキャプチャすると、その投稿に関するイベントを受け取ることができるため、リアルタイムでリアクションを反映させたりすることが可能になります。
+
+### 投稿をキャプチャする
+
+投稿をキャプチャするには、ストリームに次のようなメッセージを送信します:
+
+```json
+{
+    type: 'subNote',
+    body: {
+        id: 'xxxxxxxxxxxxxxxx'
+    }
+}
+```
+
+ここで、
+* `id`にキャプチャしたい投稿の`id`を設定します。
+
+このメッセージを送信すると、Misskeyにキャプチャを要請したことになり、以後、その投稿に関するイベントが流れてくるようになります。
+
+例えば投稿にリアクションが付いたとすると、次のようなメッセージが流れてきます:
+
+```json
+{
+    type: 'noteUpdated',
+    body: {
+        id: 'xxxxxxxxxxxxxxxx',
+        type: 'reacted',
+        body: {
+            reaction: 'like',
+            userId: 'yyyyyyyyyyyyyyyy'
+        }
+    }
+}
+```
+
+ここで、
+* `body`内の`id`に、イベントを発生させた投稿のIDが設定されます。
+* `body`内の`type`に、イベントの種類が設定されます。
+* `body`内の`body`に、イベントの詳細が設定されます。
+
+#### イベントの種類
+
+##### `reacted`
+その投稿にリアクションがされた時に発生します。
+
+* `reaction`に、リアクションの種類が設定されます。
+* `userId`に、リアクションを行ったユーザーのIDが設定されます。
+
+例:
+```json
+{
+    type: 'noteUpdated',
+    body: {
+        id: 'xxxxxxxxxxxxxxxx',
+        type: 'reacted',
+        body: {
+            reaction: 'like',
+            userId: 'yyyyyyyyyyyyyyyy'
+        }
+    }
+}
+```
+
+##### `deleted`
+その投稿が削除された時に発生します。
+
+* `deletedAt`に、削除日時が設定されます。
+
+例:
+```json
+{
+    type: 'noteUpdated',
+    body: {
+        id: 'xxxxxxxxxxxxxxxx',
+        type: 'deleted',
+        body: {
+            deletedAt: '2018-10-22T02:17:09.703Z'
+        }
+    }
+}
+```
+
+##### `pollVoted`
+その投稿に添付されたアンケートに投票された時に発生します。
+
+* `choice`に、選択肢IDが設定されます。
+* `userId`に、投票を行ったユーザーのIDが設定されます。
+
+例:
+```json
+{
+    type: 'noteUpdated',
+    body: {
+        id: 'xxxxxxxxxxxxxxxx',
+        type: 'pollVoted',
+        body: {
+            choice: 2,
+            userId: 'yyyyyyyyyyyyyyyy'
+        }
+    }
+}
+```
+
+### 投稿のキャプチャを解除する
+
+その投稿がもう画面に表示されなくなったりして、その投稿に関するイベントをもう受け取る必要がなくなったときは、キャプチャの解除を申請してください。
+
+次のメッセージを送信します:
+
+```json
+{
+    type: 'unsubNote',
+    body: {
+        id: 'xxxxxxxxxxxxxxxx'
+    }
+}
+```
+
+ここで、
+* `id`にキャプチャを解除したい投稿の`id`を設定します。
+
+このメッセージを送信すると、以後、その投稿に関するイベントは流れてこないようになります。
+
+# チャンネル一覧
+## `main`
+アカウントに関する基本的な情報が流れてきます。このチャンネルにパラメータはありません。
+
+### 流れてくるイベント一覧
+
+#### `renote`
+自分の投稿がRenoteされた時に発生するイベントです。自分自身の投稿をRenoteしたときは発生しません。
+
+#### `mention`
+誰かからメンションされたときに発生するイベントです。
+
+#### `readAllNotifications`
+自分宛ての通知がすべて既読になったことを表すイベントです。このイベントを利用して、「通知があることを示すアイコン」のようなものをオフにしたりする等のケースが想定されます。
+
+#### `meUpdated`
+自分の情報が更新されたことを表すイベントです。
+
+#### `follow`
+自分が誰かをフォローしたときに発生するイベントです。
+
+#### `unfollow`
+自分が誰かのフォローを解除したときに発生するイベントです。
+
+#### `followed`
+自分が誰かにフォローされたときに発生するイベントです。
+
+## `homeTimeline`
+ホームタイムラインの投稿情報が流れてきます。このチャンネルにパラメータはありません。
+
+### 流れてくるイベント一覧
+
+#### `note`
+タイムラインに新しい投稿が流れてきたときに発生するイベントです。
+
+## `localTimeline`
+ローカルタイムラインの投稿情報が流れてきます。このチャンネルにパラメータはありません。
+
+### 流れてくるイベント一覧
+
+#### `note`
+ローカルタイムラインに新しい投稿が流れてきたときに発生するイベントです。
+
+## `hybridTimeline`
+ソーシャルタイムラインの投稿情報が流れてきます。このチャンネルにパラメータはありません。
+
+### 流れてくるイベント一覧
+
+#### `note`
+ソーシャルタイムラインに新しい投稿が流れてきたときに発生するイベントです。
+
+## `globalTimeline`
+グローバルタイムラインの投稿情報が流れてきます。このチャンネルにパラメータはありません。
+
+### 流れてくるイベント一覧
+
+#### `note`
+グローバルタイムラインに新しい投稿が流れてきたときに発生するイベントです。
diff --git a/src/docs/de-DE/features/antenna.md b/src/docs/de-DE/features/antenna.md
new file mode 100644
index 0000000000..d9e667d015
--- /dev/null
+++ b/src/docs/de-DE/features/antenna.md
@@ -0,0 +1,4 @@
+# Antennen
+アンテナは、自由に条件を設定して、合致するノートを自動で収集することができる機能です。
+
+条件を設定したアンテナが作成された状態で、条件に合致するノートが投稿されると、リアルタイムでそのアンテナのタイムラインにノートが追加されます。
diff --git a/src/docs/de-DE/features/custom-emoji.md b/src/docs/de-DE/features/custom-emoji.md
new file mode 100644
index 0000000000..beb3370e11
--- /dev/null
+++ b/src/docs/de-DE/features/custom-emoji.md
@@ -0,0 +1,2 @@
+# Benutzerdefinierte Emojis
+カスタム絵文字は、インスタンスで用意された画像を絵文字のように使える機能です。 ノート、リアクション、チャット、自己紹介、名前などの場所で使うことができます。 カスタム絵文字をそれらの場所で使うには、絵文字ピッカーボタン(ある場合)を押すか、`:`を入力して絵文字サジェストを表示します。 テキスト内に`:foo:`のような形式の文字列が見つかると、`foo`の部分がカスタム絵文字名と解釈され、表示時には対応したカスタム絵文字に置き換わります。
diff --git a/src/docs/de-DE/features/deck.md b/src/docs/de-DE/features/deck.md
new file mode 100644
index 0000000000..73e9efdaaf
--- /dev/null
+++ b/src/docs/de-DE/features/deck.md
@@ -0,0 +1,18 @@
+# Deck
+
+デッキは利用可能なUIのひとつです。「カラム」と呼ばれるビューを複数並べて表示させることで、カスタマイズ性が高く、情報量の多いUIが構築できることが特徴です。
+
+## カラムの追加
+デッキの背景を右クリックし、「カラムを追加」して任意のカラムを追加できます。
+
+## カラムの移動
+カラムは、ドラッグアンドドロップで他のカラムと位置を入れ替えることが出来るほか、カラムメニュー(カラムのヘッダー右クリック)から位置を移動させることもできます。
+
+## カラムの水平分割
+カラムは左右だけでなく、上下に並べることもできます。 カラムメニューを開き、「左に重ねる」を選択すると、左のカラムの下に現在のカラムが移動します。 上下分割を解除するには、カラムメニューの「右に出す」を選択します。
+
+## カラムの設定
+カラムメニューの「編集」を選択するとカラムの設定を編集できます。カラムの名前を変えたり、幅を変えたりできます。
+
+## デッキの設定
+デッキに関する設定は、[settings/deck](/settings/deck)で行えます。
diff --git a/src/docs/de-DE/features/drive.md b/src/docs/de-DE/features/drive.md
new file mode 100644
index 0000000000..c445b99a86
--- /dev/null
+++ b/src/docs/de-DE/features/drive.md
@@ -0,0 +1,17 @@
+# Drive
+ドライブは、Misskey上でファイルを管理できる機能です。
+
+[ドライブのページ](/my/drive)から任意のファイルをアップロードできるほか、アバターに設定した画像や、ノートに添付したファイルなどもすべてドライブにアップロードされます。
+
+<div class="warn">⚠️ ドライブからファイルを削除すると、そのファイルが添付されたノートも消えます。</div>
+
+ドライブにアップロードされたファイルは、いつでもダウンロードすることができるほか、ノート作成時に「ドライブからファイルを添付」することでファイルを再利用することもできます。
+
+ドライブ内にフォルダを作り、複数のファイルをまとめて整理することもできます。
+
+## 閲覧注意 (NSFW)
+<div class="info">ℹ️ この項目が閲覧注意なわけではありません</div>
+
+閲覧注意またはNSFW (Not safe for work) は、ドライブのファイルに設定することができるフラグです。 閲覧注意フラグを設定されたファイルは、表示される際に閲覧者の操作なしには表示されなくなります。 このフラグは、例えば職場や公共の場で閲覧するのに適切でないと思われる画像などに設定し、そのような画像が突然表示されてしまうことを防ぐ目的で使われます。
+
+このフラグは手動でオンオフを切り替えられるほか、モデレーターの判断で設定される場合もあります。
diff --git a/src/docs/de-DE/features/favorite.md b/src/docs/de-DE/features/favorite.md
new file mode 100644
index 0000000000..f373490d15
--- /dev/null
+++ b/src/docs/de-DE/features/favorite.md
@@ -0,0 +1,4 @@
+# Zu Favoriten hinzufügen
+[ノート](./node)をお気に入りとして登録できる機能です。 お気に入り登録したノートは、[お気に入りページ](./my/favorites)で一覧することができます。 お気に入りに登録したことは相手に通知されず、お気に入りは自分しか見ることができません。
+
+ノートをお気に入り登録するには、ノートメニューの「お気に入り」を押します。お気に入り解除するには、ノートメニューの「お気に入り解除」を押します。
diff --git a/src/docs/de-DE/features/follow.md b/src/docs/de-DE/features/follow.md
new file mode 100644
index 0000000000..ab1b86197d
--- /dev/null
+++ b/src/docs/de-DE/features/follow.md
@@ -0,0 +1,2 @@
+# Folgt
+ユーザーをフォローすると、タイムラインにそのユーザーの投稿が表示されるようになります。ただし、他のユーザーに対する返信は含まれません。 ユーザーをフォローするには、ユーザーページの「フォロー」ボタンをクリックします。フォローを解除するには、もう一度クリックします。
diff --git a/src/docs/de-DE/features/keyboard-shortcut.md b/src/docs/de-DE/features/keyboard-shortcut.md
new file mode 100644
index 0000000000..c0313d53a6
--- /dev/null
+++ b/src/docs/de-DE/features/keyboard-shortcut.md
@@ -0,0 +1,66 @@
+# キーボードショートカット
+
+## Global
+これらのショートカットは基本的にどこでも使えます。
+<table>
+    <thead>
+        <tr><th>ショートカット</th><th>効果</th><th>由来</th></tr>
+    </thead>
+    <tbody>
+        <tr><td><kbd class="key">P</kbd>, <kbd class="key">N</kbd></td><td>新規投稿</td><td><b>P</b>ost, <b>N</b>ew, <b>N</b>ote</td></tr>
+        <tr><td><kbd class="key">T</kbd></td><td>タイムラインの最も新しい投稿にフォーカス</td><td><b>T</b>imeline, <b>T</b>op</td></tr>
+        <tr><td><kbd class="group"><kbd class="key">Shift</kbd> + <kbd class="key">N</kbd></kbd></td><td>通知を表示/隠す</td><td><b>N</b>otifications</td></tr>
+        <tr><td><kbd class="key">S</kbd></td><td>Suchen</td><td><b>S</b>earch</td></tr>
+        <tr><td><kbd class="key">H</kbd>, <kbd class="key">?</kbd></td><td>ヘルプを表示</td><td><b>H</b>elp</td></tr>
+    </tbody>
+</table>
+
+## 投稿にフォーカスされた状態
+<table>
+    <thead>
+        <tr><th>ショートカット</th><th>効果</th><th>由来</th></tr>
+    </thead>
+    <tbody>
+        <tr><td><kbd class="key">↑</kbd>, <kbd class="key">K</kbd>, <kbd class="group"><kbd class="key">Shift</kbd> + <kbd class="key">Tab</kbd></kbd></td><td>上の投稿にフォーカスを移動</td><td>-</td></tr>
+        <tr><td><kbd class="key">↓</kbd>, <kbd class="key">J</kbd>, <kbd class="key">Tab</kbd></td><td>下の投稿にフォーカスを移動</td><td>-</td></tr>
+        <tr><td><kbd class="key">R</kbd></td><td>返信フォームを開く</td><td><b>R</b>eply</td></tr>
+        <tr><td><kbd class="key">Q</kbd></td><td>Renoteフォームを開く</td><td><b>Q</b>uote</td></tr>
+        <tr><td><kbd class="group"><kbd class="key">Ctrl</kbd> + <kbd class="key">Q</kbd></kbd></td><td>即刻Renoteする(フォームを開かずに)</td><td>-</td></tr>
+        <tr><td><kbd class="key">E</kbd>, <kbd class="key">A</kbd>, <kbd class="key">+</kbd></td><td>リアクションフォームを開く</td><td><b>E</b>mote, re<b>A</b>ction</td></tr>
+        <tr><td><kbd class="key">0</kbd>~<kbd class="key">9</kbd></td><td>数字に対応したリアクションをする(対応については後述)</td><td>-</td></tr>
+        <tr><td><kbd class="key">F</kbd>, <kbd class="key">B</kbd></td><td>お気に入りに登録</td><td><b>F</b>avorite, <b>B</b>ookmark</td></tr>
+        <tr><td><kbd class="key">Del</kbd>, <kbd class="group"><kbd class="key">Ctrl</kbd> + <kbd class="key">D</kbd></kbd></td><td>投稿を削除</td><td><b>D</b>elete</tr>
+        <tr><td><kbd class="key">M</kbd>, <kbd class="key">O</kbd></td><td>投稿に対するメニューを開く</td><td><b>M</b>ore, <b>O</b>ther</td></tr>
+        <tr><td><kbd class="key">S</kbd></td><td>CWで隠された部分を表示 or 隠す</td><td><b>S</b>how, <b>S</b>ee</td></tr>
+        <tr><td><kbd class="key">Esc</kbd></td><td>フォーカスを外す</td><td>-</td></tr>
+    </tbody>
+</table>
+
+## Renoteフォーム
+<table>
+    <thead>
+        <tr><th>ショートカット</th><th>効果</th><th>由来</th></tr>
+    </thead>
+    <tbody>
+        <tr><td><kbd class="key">Enter</kbd></td><td>Renoteする</td><td>-</td></tr>
+        <tr><td><kbd class="key">Q</kbd></td><td>フォームを展開する</td><td><b>Q</b>uote</td></tr>
+        <tr><td><kbd class="key">Esc</kbd></td><td>フォームを閉じる</td><td>-</td></tr>
+    </tbody>
+</table>
+
+## リアクションフォーム
+デフォルトで「👍」にフォーカスが当たっている状態です。
+<table>
+    <thead>
+        <tr><th>ショートカット</th><th>効果</th><th>由来</th></tr>
+    </thead>
+    <tbody>
+        <tr><td><kbd class="key">↑</kbd>, <kbd class="key">K</kbd></td><td>上のリアクションにフォーカスを移動</td><td>-</td></tr>
+        <tr><td><kbd class="key">↓</kbd>, <kbd class="key">J</kbd></td><td>下のリアクションにフォーカスを移動</td><td>-</td></tr>
+        <tr><td><kbd class="key">←</kbd>, <kbd class="key">H</kbd>, <kbd class="group"><kbd class="key">Shift</kbd> + <kbd class="key">Tab</kbd></kbd></td><td>左のリアクションにフォーカスを移動</td><td>-</td></tr>
+        <tr><td><kbd class="key">→</kbd>, <kbd class="key">L</kbd>, <kbd class="key">Tab</kbd></td><td>右のリアクションにフォーカスを移動</td><td>-</td></tr>
+        <tr><td><kbd class="key">Enter</kbd>, <kbd class="key">Space</kbd>, <kbd class="key">+</kbd></td><td>リアクション確定</td><td>-</td></tr>
+        <tr><td><kbd class="key">0</kbd>~<kbd class="key">9</kbd></td><td>数字に対応したリアクションで確定</td><td>-</td></tr>
+        <tr><td><kbd class="key">Esc</kbd></td><td>リアクションするのをやめる</td><td>-</td></tr>
+    </tbody>
+</table>
diff --git a/src/docs/de-DE/features/mfm.md b/src/docs/de-DE/features/mfm.md
new file mode 100644
index 0000000000..5be2df4f30
--- /dev/null
+++ b/src/docs/de-DE/features/mfm.md
@@ -0,0 +1,12 @@
+# MFM
+MFMは、Misskey Flavored Markdownの略で、Misskeyの様々な場所で使用できる専用のマークアップ言語です。 MFMで使用可能な構文は[MFMチートシート](/mfm-cheat-sheet)で確認できます。
+
+## MFMが使用可能な場所の例
+- ノート本文
+- CW注釈
+- ユーザーの名前
+- ユーザーの自己紹介
+
+## 開発者向け情報
+MFMのパーサー実装はライブラリとして公開されており、簡単にクライアントにMFMを組み込むことが可能です。
+- [misskey-dev/mfm.js](https://github.com/misskey-dev/mfm.js) - JavaScriptパーサー実装
diff --git a/src/docs/de-DE/features/mute.md b/src/docs/de-DE/features/mute.md
new file mode 100644
index 0000000000..5b1c99cd9b
--- /dev/null
+++ b/src/docs/de-DE/features/mute.md
@@ -0,0 +1,13 @@
+# Stummschalten
+
+ユーザーをミュートすると、そのユーザーに関する次のコンテンツがMisskeyに表示されなくなります:
+
+* タイムラインや投稿の検索結果内の、そのユーザーの投稿(およびそれらの投稿に対する返信やRenote)
+* そのユーザーからの通知
+* メッセージ履歴一覧内の、そのユーザーとのメッセージ履歴
+
+ユーザーをミュートするには、対象のユーザーのユーザーページに表示されている「ミュート」ボタンを押します。
+
+ミュートを行ったことは相手に通知されず、ミュートされていることを知ることもできません。
+
+設定>ミュート から、自分がミュートしているユーザー一覧を確認することができます。
diff --git a/src/docs/de-DE/features/note.md b/src/docs/de-DE/features/note.md
new file mode 100644
index 0000000000..2ede737b40
--- /dev/null
+++ b/src/docs/de-DE/features/note.md
@@ -0,0 +1,51 @@
+# Notizen
+ノートは、Misskeyに投稿される、文章、ファイル、アンケートなどを含むコンテンツで、Misskeyの中心的概念です。また、そのノートを作成する行為自体もノートと呼ばれます。
+
+ノートが作成されると、[タイムライン](./timeline)に追加され、自分の[フォロワー](./follow)やサーバーのユーザーが見れるようになります。
+
+ノートには、[リアクション](./reaction)を行うことができます。また、返信や引用もできます。
+
+ノートを[お気に入り](./favorite)登録することで、後で簡単に見返すことができます。
+
+## ノートを作成する
+ノートを作成するには、画面上にある鉛筆マークのボタンを押して、作成フォームを開きます。作成フォームに内容を入力し、「ノート」ボタンを押すことでノートが作成されます。 ノートには、画像、動画など任意のファイルや、[アンケート](./poll)を添付することができます。また、本文中には[MFM](./mfm)が使用でき、[メンション](./mention)や[ハッシュタグ](./hashtag)を含めることもできます。 他にも、CWや公開範囲といった設定も行えます(詳細は後述)。
+<div class="info">ℹ️ コンピューターのクリップボードに画像データがある状態で、フォーム内のテキストボックスにペーストするとその画像を添付することができます。</div>
+<div class="info">ℹ️ テキストボックス内で<kbd class="key">Ctrl + Enter</kbd>を押すことでも投稿できます。</div>
+
+## Renote
+既にあるノートを引用、もしくはそのノートを新しいノートとして共有する行為、またそれによって作成されたノートをRenoteと呼びます。 自分がフォローしているユーザーの、気に入ったノートを自分のフォロワーに共有したい場合や、過去の自分のノートを再度共有したい場合に使います。 同じノートに対して無制限にRenoteを行うことができますが、あまり連続して使用すると迷惑になる場合もあるので、注意しましょう。
+<div class="warn">⚠️ 公開範囲がフォロワーやダイレクトのノートはRenoteできません</div>
+
+Renoteを削除するには、Renoteの時刻表示の隣にある「...」を押し、「Renote解除」を選択します。
+
+## CW
+Contents Warningの略で、ノートの内容を、閲覧者の操作なしには表示しないようにできる機能です。主に長大な内容を隠すためや、ネタバレ防止などに使うことができます。 設定するには、フォームの「内容を隠す」ボタン(目のアイコン)を押します。すると新しい入力エリアが表れるので、そこに内容の要約を記入します。
+
+## Sichtbarkeit
+ノートごとに、そのノートが公開される範囲を設定することができます。フォームの「ノート」ボタンの左にあるアイコンを押すと公開範囲を以下から選択できます。
+
+### Öffentlich
+全ての人に対してノートが公開されるほか、サーバーの全てのタイムライン(ホームタイムライン、ローカルタイムライン、ソーシャルタイムライン、グローバルタイムライン)にノートが流れます。
+<div class="warn">⚠️ アカウントが<a href="./silence">サイレンス</a>状態の時は、この公開範囲は使用できません。</div>
+
+### Startseite
+全ての人に対してノートが公開されますが、フォロワー以外のローカルタイムライン、ソーシャルタイムライン、グローバルタイムラインにはノートは流れません。
+
+### Gefolgt von
+自分のフォロワーに対してのみノートを公開します。フォロワーの全てのタイムラインに流れます。
+
+### Direkt
+指定したユーザーに対してのみノートを公開します。指定したユーザーの全てのタイムラインに流れます。
+
+### 「ローカルのみ」オプション
+このオプションを有効にすると、リモートにノートを連合しなくなります。
+
+### 公開範囲の比較
+<table>
+    <tr><th></th><th>Öffentlich</th><th>Startseite</th><th>Gefolgt von</th><th>Direkt</th></tr>
+    <tr><th>フォロワーのLTL/STL/GTL</th><td>✔</td><td>✔</td><td>✔</td><td></td></tr>
+    <tr><th>非フォロワーのLTL/STL/GTL</th><td>✔</td><td></td><td></td><td></td></tr>
+</table>
+
+## Anheften
+ノートをピン留めすると、ユーザーページに常にそのノートを表示しておくことができます。 ノートのメニューを開き、「ピン留め」を選択してピン留めできます。 複数のノートをピン留めできます。
diff --git a/src/docs/de-DE/features/pages.md b/src/docs/de-DE/features/pages.md
new file mode 100644
index 0000000000..60f04b9dec
--- /dev/null
+++ b/src/docs/de-DE/features/pages.md
@@ -0,0 +1,10 @@
+# Pages
+
+## Variablen
+変数を使うことで動的なページを作成できます。テキスト内で <b>{ 変数名 }</b> と書くとそこに変数の値を埋め込めます。例えば <b>Hello { thing } world!</b> というテキストで、変数(thing)の値が <b>ai</b> だった場合、テキストは <b>Hello ai world!</b> になります。
+
+変数の評価(値を算出すること)は上から下に行われるので、ある変数の中で自分より下の変数を参照することはできません。例えば上から <b>A、B、C</b> と3つの変数を定義したとき、<b>C</b>の中で<b>A</b>や<b>B</b>を参照することはできますが、<b>A</b>の中で<b>B</b>や<b>C</b>を参照することはできません。
+
+ユーザーからの入力を受け取るには、ページに「ユーザー入力」ブロックを設置し、「変数名」に入力を格納したい変数名を設定します(変数は自動で作成されます)。その変数を使ってユーザー入力に応じた動作を行えます。
+
+関数を使うと、値の算出処理を再利用可能な形にまとめることができます。関数を作るには、「関数」タイプの変数を作成します。関数にはスロット(引数)を設定することができ、スロットの値は関数内で変数として利用可能です。また、関数を引数に取る関数(高階関数と呼ばれます)も存在します。関数は予め定義しておくほかに、このような高階関数のスロットに即席でセットすることもできます。
diff --git a/src/docs/de-DE/features/reaction.md b/src/docs/de-DE/features/reaction.md
new file mode 100644
index 0000000000..b6cdf9d976
--- /dev/null
+++ b/src/docs/de-DE/features/reaction.md
@@ -0,0 +1,11 @@
+# Reaktionen
+他の人のノートに、絵文字を付けて簡単にあなたの反応を伝えられる機能です。 リアクションするには、ノートの + アイコンをクリックしてピッカーを表示し、絵文字を選択します。 リアクションには[カスタム絵文字](./custom-emoji)も使用できます。
+
+## リアクションピッカーのカスタマイズ
+ピッカーに表示される絵文字を自分好みにカスタマイズすることができます。 設定の「リアクション」で設定します。
+
+## リモート投稿へのリアクションについて
+リアクションはMisskeyオリジナルの機能であるため、リモートインスタンスがMisskeyでない限りは、ほとんどの場合「Like」としてアクティビティが送信されます。一般的にはLikeは「お気に入り」として実装されているようです。
+
+## リモートからのリアクションについて
+リモートから「Like」アクティビティを受信したとき、Misskeyでは「👍」のリアクションとして解釈されます。
diff --git a/src/docs/de-DE/features/silence.md b/src/docs/de-DE/features/silence.md
new file mode 100644
index 0000000000..97d8ea27ad
--- /dev/null
+++ b/src/docs/de-DE/features/silence.md
@@ -0,0 +1,6 @@
+# Instanzweit stummschalten
+サイレンスは、アカウントに設定される状態のひとつです。
+
+アカウントがサイレンス状態になると、ノートの公開範囲をパブリックにできなくなります。 ホーム、フォロワー、ダイレクトは選択可能なため、サイレンスを受けた場合でもフォロワーやあなたのユーザーページを直接訪れた場合は投稿を閲覧できますが、GTL(連合タイムライン)やLTL(ローカルタイムライン)には投稿が流れません。
+
+アカウントのサイレンス状態は、サーバーのモデレーターによって有効化/無効化されます。
diff --git a/src/docs/de-DE/features/theme.md b/src/docs/de-DE/features/theme.md
new file mode 100644
index 0000000000..78e65ff511
--- /dev/null
+++ b/src/docs/de-DE/features/theme.md
@@ -0,0 +1,68 @@
+# Farbthemen
+
+テーマを設定して、Misskeyクライアントの見た目を変更できます。
+
+## テーマの設定
+設定 > テーマ
+
+## テーマを作成する
+テーマコードはJSON5で記述されたテーマオブジェクトです。 テーマは以下のようなオブジェクトです。
+``` js
+{
+    id: '17587283-dd92-4a2c-a22c-be0637c9e22a',
+
+    name: 'Danboard',
+    author: 'syuilo',
+
+    base: 'light',
+
+    props: {
+        accent: 'rgb(218, 141, 49)',
+        bg: 'rgb(218, 212, 190)',
+        fg: 'rgb(115, 108, 92)',
+        panel: 'rgb(236, 232, 220)',
+        renote: 'rgb(100, 152, 106)',
+        link: 'rgb(100, 152, 106)',
+        mention: '@accent',
+        hashtag: 'rgb(100, 152, 106)',
+        header: 'rgba(239, 227, 213, 0.75)',
+        navBg: 'rgb(216, 206, 182)',
+        inputBorder: 'rgba(0, 0, 0, 0.1)',
+    },
+}
+
+```
+
+* `id` ... テーマの一意なID。UUIDをおすすめします。
+* `name` ... テーマ名
+* `author` ... テーマの作者
+* `desc` ... テーマの説明(オプション)
+* `base` ... 明るいテーマか、暗いテーマか
+    * `light`にすると明るいテーマになり、`dark`にすると暗いテーマになります。
+    * テーマはここで設定されたベーステーマを継承します。
+* `props` ... テーマのスタイル定義。これから説明します。
+
+### テーマのスタイル定義
+`props`下にはテーマのスタイルを定義します。 キーがCSSの変数名になり、バリューで中身を指定します。 なお、この`props`オブジェクトはベーステーマから継承されます。 ベーステーマは、このテーマの`base`が`light`なら[_light.json5](https://github.com/misskey-dev/misskey/blob/develop/src/client/themes/_light.json5)で、`dark`なら[_dark.json5](https://github.com/misskey-dev/misskey/blob/develop/src/client/themes/_dark.json5)です。 つまり、このテーマ内の`props`に`panel`というキーが無くても、そこにはベーステーマの`panel`があると見なされます。
+
+#### バリューで使える構文
+* 16進数で表された色
+    * 例: `#00ff00`
+* `rgb(r, g, b)`形式で表された色
+    * 例: `rgb(0, 255, 0)`
+* `rgb(r, g, b, a)`形式で表された透明度を含む色
+    * 例: `rgba(0, 255, 0, 0.5)`
+* 他のキーの値の参照
+    * `@{キー名}`と書くと他のキーの値の参照になります。`{キー名}`は参照したいキーの名前に置き換えます。
+    * 例: `@panel`
+* 定数(後述)の参照
+    * `${定数名}`と書くと定数の参照になります。`{定数名}`は参照したい定数の名前に置き換えます。
+    * 例: `$main`
+* 関数(後述)
+    * `:{関数名}<{引数}<{色}`
+
+#### Konstante
+「CSS変数として出力はしたくないが、他のCSS変数の値として使いまわしたい」値があるときは、定数を使うと便利です。 キー名を`$`で始めると、そのキーはCSS変数として出力されません。
+
+#### Funktionen
+wip
diff --git a/src/docs/de-DE/features/timeline.md b/src/docs/de-DE/features/timeline.md
new file mode 100644
index 0000000000..08cac4ac87
--- /dev/null
+++ b/src/docs/de-DE/features/timeline.md
@@ -0,0 +1,31 @@
+# Chronik
+タイムラインは、[ノート](./note)が時系列で表示される機能です。 タイムラインには以下で示す種類があり、種類によって表示されるノートも異なります。 なお、タイムラインの種類によってはサーバーにより無効になっている場合があります。
+
+## Startseite
+自分のフォローしているユーザーの投稿が流れます。HTLと略されます。
+
+## Lokal
+全てのローカルユーザーの「ホーム」指定されていない投稿が流れます。LTLと略されます。
+
+## Sozial
+自分のフォローしているユーザーの投稿と、全てのローカルユーザーの「ホーム」指定されていない投稿が流れます。STLと略されます。
+
+## Global
+全てのローカルユーザーの「ホーム」指定されていない投稿と、サーバーに届いた全てのリモートユーザーの「ホーム」指定されていない投稿が流れます。GTLと略されます。
+
+## Vergleiche
+| ソース          |                 |            | Chronik |        |        |
+| ------------ | --------------- | ---------- | ------- | ------ | ------ |
+| Benutzer     | Sichtbarkeit    | Startseite | Lokal   | Sozial | Global |
+| ローカル (フォロー)  | Veröffentlichen | ✔          | ✔       | ✔      | ✔      |
+|              | Startseite      | ✔          |         | ✔      |        |
+|              | Gefolgt von     | ✔          | ✔       | ✔      | ✔      |
+| リモート (フォロー)  | Veröffentlichen | ✔          |         | ✔      | ✔      |
+|              | Startseite      | ✔          |         | ✔      |        |
+|              | Gefolgt von     | ✔          |         | ✔      | ✔      |
+| ローカル (未フォロー) | Veröffentlichen |            | ✔       | ✔      | ✔      |
+|              | Startseite      |            |         |        |        |
+|              | Gefolgt von     |            |         |        |        |
+| リモート (未フォロー) | Veröffentlichen |            |         |        | ✔      |
+|              | Startseite      |            |         |        |        |
+|              | Gefolgt von     |            |         |        |        |
diff --git a/src/docs/de-DE/features/widgets.md b/src/docs/de-DE/features/widgets.md
new file mode 100644
index 0000000000..7c5cacb39a
--- /dev/null
+++ b/src/docs/de-DE/features/widgets.md
@@ -0,0 +1,7 @@
+# Widgets
+ウィジェットは、MisskeyのUI上に設置できる小型の情報表示、操作が行えるパーツです。
+
+ウィジェットを編集するには、ウィジェット編集モードに切り替えます。切り替え方法はUIによって異なります。 ウィジェット編集モードでは、ウィジェットの追加、削除、並び替え、およびそれぞれのウィジェットの設定を行えます。
+
+## 利用可能なウィジェット一覧
+todo
diff --git a/src/docs/de-DE/general/apps.md b/src/docs/de-DE/general/apps.md
new file mode 100644
index 0000000000..1f4c85fe8f
--- /dev/null
+++ b/src/docs/de-DE/general/apps.md
@@ -0,0 +1,6 @@
+# サードパーティアプリのリスト
+## クライアント
+todo
+
+## 連携サービス
+todo
diff --git a/src/docs/de-DE/general/faq.md b/src/docs/de-DE/general/faq.md
new file mode 100644
index 0000000000..ecb664e32e
--- /dev/null
+++ b/src/docs/de-DE/general/faq.md
@@ -0,0 +1,22 @@
+# よくある質問
+ここでは利用上のよくある質問について掲載しています。 Misskeyのプロジェクト自体についてのよくある質問は[こちら](./misskey)に掲載されています。
+
+### iOS/Androidのアプリはありますか?
+公式にはそういったOSのネイティブアプリを開発していませんが、サードパーティ製のアプリがいくつかあります。 詳しくは[こちら](./apps)をご覧ください。
+
+ただ、サードパーティ製アプリはどうしても機能への対応が遅れてしまうため、とくに拘りがなければ公式のWebクライアントの利用をおすすめします。 なお、MisskeyのWebクライアントはPWAに対応しているので、ネイティブアプリのように動作させることも可能です。 詳しくは[こちら](todo)をご覧ください。
+
+## 他のサーバーのユーザーをフォローするときは?
+メニューから検索を選び、ユーザー名をホスト込みで入力します。例: `@syuilo@misskey.io`
+
+## Renoteを削除するには?
+Renoteの時刻表示の隣にある「...」を押し、「Renote解除」を選択します。 Renoteについては[こちら](../features/note)をご確認ください。
+
+## URLのプレビューを表示させたくない
+MFMには、そのURLのプレビューを無効にする構文があります。詳細は[MFMチートシート](/mfm-cheat-sheet)をご確認ください。
+
+## カスタム絵文字を追加したい
+運営者のみがカスタム絵文字を追加、編集、削除できます。それらを希望する場合は運営者に依頼してください。
+
+## Botを開発したい
+Misskey APIを利用してBotの開発が可能です。[こちら](../advanced/develop-bot)をご確認ください。
diff --git a/src/docs/de-DE/general/glossary.md b/src/docs/de-DE/general/glossary.md
new file mode 100644
index 0000000000..a86b4d9000
--- /dev/null
+++ b/src/docs/de-DE/general/glossary.md
@@ -0,0 +1,83 @@
+# 用語集
+Misskeyに関する用語集です。
+
+## AcitivityPub
+(読み: あくてぃびてぃぱぶ) 分散型を実現するために用いられるプロトコル(仕様)。このプロトコルに則ってサーバー同士通信を行うことで、連合が行われ、Fediverseを形成しています。
+
+## AiScript
+(読み: あいすくりぷと) Misskey上で使用できるプログラミング言語です。詳細は[こちら。](../advanced/aiscript)
+
+## API
+(読み: えーぴーあい) Misskeyのサーバーが公開している、プログラムからMisskeyを扱うためのインターフェース。詳細は[こちら。](../advanced/api)
+
+## Bot
+(読み: ぼっと) プログラムによって動作しているアカウント。
+
+## CW
+(読み: こんてんつわーにんぐ) Contents Warningの略。ノートの内容を、操作なしには表示しないようにできる機能。主に長大な内容を隠すためや、ネタバレ防止などに使われます。
+
+## Fediverse
+(読み: ふぇでぃばーす) Misskeyを含む様々な分散型ソフトウェアのサーバーで構成されたネットワーク。
+
+## GTL
+グローバルタイムライン(Global TimeLine)の略。タイムラインの詳細は[こちら。](../features/timeline)
+
+## HTL
+ホームタイムライン(Home TimeLine)の略。タイムラインの詳細は[こちら。](../features/timeline)
+
+## LTL
+ローカルタイムライン(Local TimeLine)の略。タイムラインの詳細は[こちら。](../features/timeline)
+
+## MFM
+(読み: えむえふえむ) Misskey Flavored Markdownの略で、Misskey上で使用できるマークアップ言語です。詳細は[こちら。](../features/mfm)
+
+## NSFW
+(読み: のっとせーふふぉーわーく) Not Safe For Workの略。画像を「閲覧注意」扱いにし、操作なしには表示しないようにすることができる機能。
+
+## Renote
+(読み: りのーと) 既にあるノートを引用、もしくはそのノートを新しいノートとして共有する行為、またそれによって作成されたノート。詳細は[こちら。](../features/note)
+
+## STL
+ソーシャルタイムライン(Social TimeLine)の略。タイムラインの詳細は[こちら。](../features/timeline)
+
+## 藍
+(読み: あい) Misskeyの看板娘(公式キャラクター)です。
+
+## アクティブユーザー
+インスタンスにアカウントを作っているユーザーのうち、現在も実際にサービスを利用しているユーザーのこと。
+
+## Instanz
+todo
+
+## コントロールパネル
+インスタンスの設定画面のこと。
+
+## Server
+todo
+
+## Instanzweit stummschalten
+ノートをパブリックな公開範囲で投稿できなくされている状態。モデレーターの判断でユーザーごとに設定されます。詳細は[こちら。](../features/silence)
+
+## Sperren
+アカウントが使用不可に設定されている状態。
+
+## Drive
+Misskeyにアップロードしたファイルを管理する機能。詳細は[こちら。](../features/drive)
+
+## Notizen
+Misskeyに投稿される、文章、ファイル、アンケートなどを含めることができるコンテンツ。詳細は[こちら。](../features/note)
+
+## ミスキスト
+Misskeyを使う人のこと。
+
+## Moderator
+スパムの凍結およびサイレンスや不適切な投稿の削除など、コミュニティ運営に関する権限を持つユーザー。
+
+## Fremd
+他サーバーのことを指します。リモートユーザーといったように接頭辞としても使われます。ローカルの逆です。
+
+## Föderation
+サーバー上で作成された情報が他のサーバーに伝わること。
+
+## Lokal
+自サーバーのことを指します。ローカルユーザー、ローカルタイムラインといったように接頭辞としても使われます。リモートの逆です。
diff --git a/src/docs/de-DE/general/links.md b/src/docs/de-DE/general/links.md
new file mode 100644
index 0000000000..d6b16856fb
--- /dev/null
+++ b/src/docs/de-DE/general/links.md
@@ -0,0 +1,5 @@
+# リンク集
+
+## ライブラリ
+- [misskey-dev/misskey.js](https://github.com/misskey-dev/misskey.js) - JavaScriptのMisskey SDK
+- [misskey-dev/mfm.js](https://github.com/misskey-dev/mfm.js) - JavaScriptのMFMパーサー実装
diff --git a/src/docs/de-DE/general/misskey.md b/src/docs/de-DE/general/misskey.md
new file mode 100644
index 0000000000..f56844060e
--- /dev/null
+++ b/src/docs/de-DE/general/misskey.md
@@ -0,0 +1,87 @@
+# Ãœber Misskey
+
+Misskeyはオープンソースの分散型マイクロブログプラットフォームプロジェクトです。 開発は日本でsyuiloによって2014年から開始されました。 ドライブ、リアクションなどの豊富な機能や、高いカスタマイズ性を備えたUIを持つことが特徴です。
+
+## 歴史
+開発当初は掲示板がメインのサービスでしたが、ユーザーが短文を投稿し、それを時系列で流れるタイムライン機能を追加したところ人気が高まり、徐々にそれがメインとして開発が進むようになりました。 当初は分散型ではありませんでしたが、2018年にAcitivityPubを実装し分散型になったことで、より多くの方に認知され利用されるサービスになり、現在に至ります。
+<div class="info">ℹ️ Misskeyという名前は、syuiloが当時聴いていたMay'nというアーティストの楽曲、Brain Diverの歌詞に由来します。</div>
+
+誰でも開発に参加することができ、現在でも活発に開発が続いています。
+
+## 分散型とは何か?
+
+<b>分散(distributed)型</b>とは、<b>非中央集権(decentralized)</b>とも呼ばれ、コミュニティが多数のサーバーに分散して存在し、それらが相互に<b>通信(連合、federation)</b>することでコンテンツ共有<b>ネットワーク(Fediverse)</b>を形成していることが特徴のサービスです。 単一のサーバーしか存在しない、もしくは複数存在しても互いに独立している場合は中央集権なサービスと言われ、例えばTwitterやFacebookなどほとんどのサービスがそれに該当します。 分散型のメリットは、自分に合った運営者やテーマのサーバーを選択できることです。自分でサーバーを作成することもできます。連合するおかげで、どのサーバーを選んでも、同じコミュニティにアクセスできます。
+
+## 常にオープンソース
+Misskeyはこれまでもこれからも、オープンソースであり続けます。オープンソースとは、簡単に言うと<b>ソフトウェアのソースコード(プログラム)が公開されている</b>ことです。ソースコードの修正や再配布が可能であることを定義に含めることもあります。 Misskeyのすべてのソースコードは[AGPL](https://github.com/misskey-dev/misskey/blob/develop/LICENSE)というオープンソースライセンスの下に[公開](https://github.com/misskey-dev)されていて、誰でも自由に閲覧、使用、修正、改変、再配布をすることができます。 オープンソースは、自分で好きなように変えたり、有害な処理が含まれていないことを確認することができたり、誰でも開発に参加できるなどの、様々なメリットがあります。 上述の分散型を実現するためにも、オープンソースであるということは必要不可欠な要素です。 再び引き合いに出しますが、TwitterやFacebookなどの利益を得ているほとんどのサービスはオープンソースではありません。
+
+<div class="info">ℹ️ 技術的に言うと、MisskeyのソースコードはGitで管理されていて、リポジトリは<a href="https://github.com/misskey-dev" target="_blank">GitHub上でホスティングされています。</a></div>
+
+## 開発に参加する、プロジェクトを支援する
+Misskeyを気に入っていただけたら、ぜひプロジェクトを支援してください。プロジェクトに貢献するには、以下で紹介するようにいろいろな方法があります。方法によっては開発のスキルは不要なので、誰でも気軽に参加し貢献することができます。いつでもお待ちしています。
+
+### 機能を追加したり、バグを修正する
+ソフトウェアエンジニアのスキルをお持ちの方であれば、ソースコードを編集する形でプロジェクトに貢献することができます。 貢献についてのガイドは[こちら](https://github.com/misskey-dev/misskey/blob/develop/CONTRIBUTING.md)です。
+
+### 議論に参加する
+新しい機能、または既存の機能について意見を述べたり、不具合を報告したりすることでも貢献できます。 そのようなディスカッションは[GitHub](https://github.com/misskey-dev)上か、[フォーラム](https://forum.misskey.io/)等で行われます。
+
+### テキストを翻訳する
+Misskeyは様々な言語に対応しています(i18n -internationalizationの略- と呼ばれます)。元の言語は基本的に日本語ですが、有志によって他の言語へと翻訳されています。 その翻訳作業に加わっていただくことでもMisskeyに貢献できます。 Misskeyは[Crowdinというサービスを使用して翻訳の管理を行っています。](https://crowdin.com/project/misskey)
+
+### 感想を投稿する
+不具合報告等だけではなく、Misskeyの良い点、楽しい点といったポジティブな意見もぜひ共有してください。開発の励みになり、それは間接的ですがプロジェクトへの貢献です。
+
+### ミスキストを増やす
+ミスキストとは、Misskeyを使用する人のことです。 知り合いに紹介するなどしてMisskeyを広めていただければ、ミスキストが増え開発のモチベーションが上がります。
+
+### 寄付をする
+Misskeyはビジネスではなく、利用は無料であるため、収益は皆様からの寄付のみです。(インスタンスによっては広告収入を得ているような場合もありますが、それは運営者の収入であり直接開発者への収入にはなりません) 寄付をしていただければ、今後も開発を続けることが可能になり、プロジェクトへの貢献になります。 寄付は基本的には[Patreon](https://www.patreon.com/syuilo)で受け付けています。 一定額寄付していただけると、Misskeyの[情報ページ](/about-misskey)に名前を記載することができます。
+
+また、サーバーの運営者も、基本的には収益を得ていません。サーバーの運営にはコストがかかるので、運営者の支援をすることもご検討ください。 開発には直接関係しませんが、サーバーがあってこそのプロジェクトなので、運営が維持されるというのは開発と同じくらい重要なことです。
+
+## クレジット
+Misskeyの開発者や、Misskeyに寄付をしてくださった方の一覧は[こちら](/about-misskey)で見ることができます。
+
+## よくある質問
+### プロジェクトは何を目指していますか?
+強いて言うと、漠然的になりますが広く使われる汎用的なプラットフォームになることを目指しています。 Misskeyは他のプロジェクトとは違い、何らかの思想(例えば、反中央集権)やビジョンに基づいて開発が行われているわけではなく、その点ではフラットです。 それが逆に、特定の方向性に縛られないフレキシブルさを生み出すことに繋がっていると感じています。
+<!-- TODO: ここにロードマップへのリンク -->
+
+### 企業によって開発されていますか?
+いいえ。Misskeyの開発は個人で行われており、商業的でもないため、特定の企業の関りはありません。 開発メンバーも基本的にはボランティアです。 また、開発に対し企業のスポンサーがつくこともありますが、その場合でもやはり開発は個人のコミュニティが主体です。
+
+### 誰が運営していますか?
+Misskeyは分散型なため、各サーバーにそれぞれ異なった運営者がいます。従って、特定の個人や企業によって、Misskeyの全てが運営されているわけではありません。 また、開発チームが運営を行うわけでもないため、運営に関する連絡は、お使いのサーバーの運営者に行ってください。 サーバーの運営者は、[このページ](/about)で確認することができます。 あなたがサーバーを作成すれば、あなたが運営者になります。
+
+### どのサーバーを選べばいいですか?
+[サーバー一覧が公開されています。](https://join.misskey.page/ja-JP/instances) サーバーによってコミュニティのテーマ(特定のこと、ものが好き 等)が決められている場合があるので、自分に合ったテーマのサーバーがあれば、そこを選ぶと良いかもしれません。 他にも、サーバーの規模、ユーザー層、国および言語、運営者が信頼できるかどうか、などの観点があります。 なお、Misskey公式のサーバーというものはありません。自身で新しくサーバーを作成するという選択肢もあります。
+
+基本的にどのサーバーを選んだとしても、他の全てのサーバーのユーザーと繋がることができます。
+
+### サーバーを建てるにはどうしたらいいですか?
+Misskeyサーバーの作成に興味を持っていただきありがとうございます。 2021年現在、Misskeyのホスティングサービスは存在しないため、サーバーの作成にはある程度の知識が必要です。 サーバーの作成方法については[こちら](todo)をご覧ください。
+
+### どのような技術を使用していますか?
+Misskeyは開発が進むにつれ使用する技術も大きく変わってきました。開発当初はMySQL + PHP + jQueryといった構成でしたが、現在は以下のようになっています。
+- サーバーサイド: Node.js
+- データベース: PostgreSQL、Redis
+- UIフレームワーク: Vue.js
+- プログラミング言語: TypeScript
+
+また、MFMやAiScriptなどの、Misskeyから派生して独自の技術も開発しています。
+
+### Mastodonのフォークですか?
+いいえ。MisskeyはMastodonやその他のプロジェクトとは全く別のプロジェクトです。 開発に関しても、Misskeyの方が昔から開発されています。ただし、分散型になったのはMastodonの登場より後です。 同じAcitivityPubという分散のためのプロトコルを実装しているという点以外、両者に特に関りがあるわけでもありません。
+
+### iOS/Androidのアプリはありますか?
+公式にはそういったOSのネイティブアプリを開発していませんが、サードパーティ製のアプリがいくつかあります。 詳しくは[こちら](./apps)をご覧ください。
+
+ただ、サードパーティ製アプリはどうしても機能への対応が遅れてしまうため、とくに拘りがなければ公式のWebクライアントの利用をおすすめします。 なお、MisskeyのWebクライアントはPWAに対応しているので、ネイティブアプリのように動作させることも可能です。 詳しくは[こちら](todo)をご覧ください。
+
+### Misskeyのロゴ、アイコンはどこで入手できますか?
+(準備中)
+
+### 時折目にする猫耳の可愛い女の子は?
+Misskeyの守り神、藍ちゃんです。アイチャンカワイイヤッター!
+<div class="info">ℹ️ 藍ちゃんについては<a href="https://xn--931a.moe/" target="_blank">こちら</a>です。</div>
diff --git a/src/docs/de-DE/general/report-issue.md b/src/docs/de-DE/general/report-issue.md
new file mode 100644
index 0000000000..63527e32af
--- /dev/null
+++ b/src/docs/de-DE/general/report-issue.md
@@ -0,0 +1,8 @@
+# 不具合の報告
+不具合と思われる状況に遭遇したときは、まず[トラブルシューティング](./troubleshooting)をご一読ください。 それでも問題が解決しないときは、以下の情報を含めて[フォーラム](https://forum.misskey.io/)に投稿してください。 投稿することで、解決策が見つかったり、不具合と判断されれば開発チームによって修正が行われます。
+
+## 含める情報
+- Misskeyのバージョン([情報ページ](/about)で確認できます)
+- お使いのブラウザの種類とバージョン
+- お使いのOSの種類とバージョン
+- 問題の再現手順
diff --git a/src/docs/de-DE/general/troubleshooting.md b/src/docs/de-DE/general/troubleshooting.md
new file mode 100644
index 0000000000..42aa819d80
--- /dev/null
+++ b/src/docs/de-DE/general/troubleshooting.md
@@ -0,0 +1,36 @@
+# Problembehandlung
+<div class="info">ℹ️ <a href="./faq">よくある質問</a>も合わせてお役立てください。</div>
+
+問題が発生したときは、まずこちらをご確認ください。 該当する項目が無い、もしくは手順を試しても効果がない場合は、サーバーの管理者に連絡するか[不具合を報告](./report-issue)してください。
+
+## クライアントが起動しない
+ほとんどの場合、お使いのブラウザまたはOSのバージョンが古いことが原因です。 ブラウザおよびOSのバージョンを最新のものに更新してから、再度試してみてください。
+
+これは稀ですが、それでも起動しない場合は、キャッシュが原因の場合があります。ブラウザのキャッシュをクリアして、再度試してみてください。
+
+## ページが読み込めない
+クライアントが起動するもののページが読み込めないというエラーが出る場合は、ネットワークに問題がないか確認してください。また、サーバーがダウンしていないか確認してください。
+
+これは稀ですが、キャッシュが原因の場合があります。ブラウザのキャッシュをクリアして、再度試してみてください。
+
+まだ問題がある場合は、サーバーの問題と思われるのでサーバーの管理者に連絡してください。
+
+## クライアントの動作が遅い
+以下を試してみてください:
+
+- クライアント設定で「UIのアニメーションを減らす」を有効にする
+- クライアント設定で「モーダルにぼかし効果を使用」を無効にする
+- お使いのブラウザの設定でハードウェアアクセラレーションを有効にする
+- お使いのデバイスのスペックを上げる
+
+## 通知やアンテナ等の点滅が消えない
+点滅は、未読のコンテンツがあることを示しています。通常点滅が消えない場合は、コンテンツを遡ると未読なコンテンツが残っています。 すべて既読にしたと思われるのに、それでもなお点滅が続く場合(おそらく不具合と思われます)は設定から強制的にすべて既読扱いにすることができます。
+
+## Renoteができない
+フォロワー限定のノートはRenoteすることはできません。
+
+## UI上で特定の要素が表示されない
+広告ブロッカーを使用しているとそのような不具合が発生することがあります。Misskeyではオフにしてご利用ください。
+
+## UI上で未翻訳の部分がある
+ほとんどの場合、単に翻訳が間に合っていないだけで、不具合ではありません。翻訳が終わるまでお待ちください。 [翻訳に参加](./misskey)していただくことも可能です。
diff --git a/src/docs/en-US/admin/disable-timelines.md b/src/docs/en-US/admin/disable-timelines.md
new file mode 100644
index 0000000000..b081e35ab0
--- /dev/null
+++ b/src/docs/en-US/admin/disable-timelines.md
@@ -0,0 +1,8 @@
+# LTL/STL/GTLの無効化
+Misskeyでは、LTL/STL/GTLをそれぞれ無効化することができます。有効/無効を切り替えるには、インスタンスコントロールパネルで設定します。
+
+LTLやSTLは、そのインスタンス全員の投稿が見れるため、新規のユーザーにとってはユーザーを探す必要がなくなり、興味のあるユーザーを見つけやすいという利点があります。 しかし同時に、フォロー機能が活用されなくなったり、不適切な投稿が目につきやすくなったり、チャットのようになることで内輪感が生じて逆に新規ユーザーが参加しにくくなるといったデメリットも持ち合わせています。 サーバーによってメリット/デメリットどちらが優勢かは異なるので、オプションとして無効にできるようになっています。 もしデメリットの方が上回っていると感じたら、それらのタイムラインを無効化することも検討してください。
+
+<div class="warn">⚠️ 無効化を行うと、ユーザーが困惑し、短期的に見て利用者が減る可能性があります。そのため、無効化の際は影響を慎重に検討し、事前に説明してフォローを整える期間を一定程度設けることを推奨します。</div>
+
+なお、管理者/モデレーターは、これらのタイムラインの無効化状態は適用されず、引き続き利用することが可能です。
diff --git a/src/docs/en-US/admin/faq.md b/src/docs/en-US/admin/faq.md
new file mode 100644
index 0000000000..317b4e0655
--- /dev/null
+++ b/src/docs/en-US/admin/faq.md
@@ -0,0 +1,5 @@
+# よくある質問
+ここでは、サーバー管理者向けのよくある質問を掲載しています。
+
+## デフォルトテーマを設定したい
+現在、デフォルトテーマ設定機能は実装されていません。
diff --git a/src/docs/en-US/advanced/aiscript.md b/src/docs/en-US/advanced/aiscript.md
new file mode 100644
index 0000000000..604d17daa8
--- /dev/null
+++ b/src/docs/en-US/advanced/aiscript.md
@@ -0,0 +1,7 @@
+# AiScript
+AiScriptは、Misskeyで使用できるスクリプト言語です。
+
+<div class="info">ℹ️ AiScript実装はMisskeyとは別リポジトリで、<a href="https://github.com/syuilo/aiscript" target="_blank">オープンソースで公開されています。</a></div>
+
+## 使い方
+AiScriptの構文や組み込み関数などのドキュメントは、[こちら](https://github.com/syuilo/aiscript/tree/master/docs)で公開されています。
diff --git a/src/docs/en-US/advanced/api.md b/src/docs/en-US/advanced/api.md
new file mode 100644
index 0000000000..76019b6145
--- /dev/null
+++ b/src/docs/en-US/advanced/api.md
@@ -0,0 +1,58 @@
+# Misskey API
+
+MisskeyAPIを使ってMisskeyクライアント、Misskey連携Webサービス、Bot等(以下「アプリケーション」と呼びます)を開発できます。 ストリーミングAPIもあるので、リアルタイム性のあるアプリケーションを作ることも可能です。
+
+APIを使い始めるには、まずアクセストークンを取得する必要があります。 このドキュメントでは、アクセストークンを取得する手順を説明した後、基本的なAPIの使い方を説明します。
+
+## アクセストークンの取得
+基本的に、APIはリクエストにはアクセストークンが必要となります。 APIにリクエストするのが自分自身なのか、不特定の利用者に使ってもらうアプリケーションなのかによって取得手順は異なります。
+
+* 前者の場合: [「自分自身のアクセストークンを手動発行する」](#自分自身のアクセストークンを手動発行する)に進む
+* 後者の場合: [「アプリケーション利用者にアクセストークンの発行をリクエストする」](#アプリケーション利用者にアクセストークンの発行をリクエストする)に進む
+
+### 自分自身のアクセストークンを手動発行する
+「設定 > API」で、自分のアクセストークンを発行できます。
+
+[「APIの使い方」へ進む](#APIの使い方)
+
+### アプリケーション利用者にアクセストークンの発行をリクエストする
+アプリケーション利用者のアクセストークンを取得するには、以下の手順で発行をリクエストします。
+
+#### Step 1
+
+UUIDを生成する。以後これをセッションIDと呼びます。
+
+> このセッションIDは毎回生成し、使いまわさないようにしてください。
+
+#### Step 2
+
+`{_URL_}/miauth/{session}`をユーザーのブラウザで表示させる。`{session}`の部分は、セッションIDに置き換えてください。
+> 例: `{_URL_}/miauth/c1f6d42b-468b-4fd2-8274-e58abdedef6f`
+
+表示する際、URLにクエリパラメータとしていくつかのオプションを設定できます:
+* `name` ... アプリケーション名
+    * > 例: `MissDeck`
+* `icon` ... アプリケーションのアイコン画像URL
+    * > 例: `https://missdeck.example.com/icon.png`
+* `callback` ... 認証が終わった後にリダイレクトするURL
+    * > 例: `https://missdeck.example.com/callback`
+    * リダイレクト時には、`session`というクエリパラメータでセッションIDが付きます
+* `permission` ... アプリケーションが要求する権限
+    * > 例: `write:notes,write:following,read:drive`
+    * 要求する権限を`,`で区切って列挙します
+    * どのような権限があるかは[APIリファレンス](/api-doc)で確認できます
+
+#### Step 3
+ユーザーが発行を許可した後、`{_URL_}/api/miauth/{session}/check`にPOSTリクエストすると、レスポンスとしてアクセストークンを含むJSONが返ります。
+
+レスポンスに含まれるプロパティ:
+* `token` ... ユーザーのアクセストークン
+* `user` ... ユーザーの情報
+
+[「APIの使い方」へ進む](#APIの使い方)
+
+## APIの使い方
+**APIはすべてPOSTで、リクエスト/レスポンスともにJSON形式です。RESTではありません。** アクセストークンは、`i`というパラメータ名でリクエストに含めます。
+
+* [APIリファレンス](/api-doc)
+* [ストリーミングAPI](./stream)
diff --git a/src/docs/en-US/advanced/create-plugin.md b/src/docs/en-US/advanced/create-plugin.md
new file mode 100644
index 0000000000..ec17b95186
--- /dev/null
+++ b/src/docs/en-US/advanced/create-plugin.md
@@ -0,0 +1,74 @@
+# プラグインの作成
+Misskey Webクライアントのプラグイン機能を使うと、クライアントを拡張し、様々な機能を追加できます。 ここではプラグインの作成にあたってのメタデータ定義や、AiScript APIリファレンスを掲載します。
+
+## Metadata
+プラグインは、AiScriptのメタデータ埋め込み機能を使って、デフォルトとしてプラグインのメタデータを定義する必要があります。 メタデータは次のプロパティを含むオブジェクトです。
+
+### name
+プラグイン名
+
+### author
+プラグイン作者
+
+### version
+プラグインバージョン。数値を指定してください。
+
+### description
+プラグインの説明
+
+### permissions
+プラグインが要求する権限。MisskeyAPIにリクエストする際に用いられます。
+
+### config
+プラグインの設定情報を表すオブジェクト。 キーに設定名、値に以下のプロパティを含めます。
+
+#### type
+設定値の種類を表す文字列。以下から選択します。 string number boolean
+
+#### label
+ユーザーに表示する設定名
+
+#### description
+設定の説明
+
+#### default
+設定のデフォルト値
+
+## APIリファレンス
+AiScript標準で組み込まれているAPIは掲載しません。
+
+### Mk:dialog(title text type)
+ダイアログを表示します。typeには以下の値が設定できます。 info success warn error question 省略すると info になります。
+
+### Mk:confirm(title text type)
+確認ダイアログを表示します。typeには以下の値が設定できます。 info success warn error question 省略すると question になります。 ユーザーが"OK"を選択した場合は true を、"キャンセル"を選択した場合は false が返ります。
+
+### Mk:api(endpoint params)
+Misskey APIにリクエストします。第一引数にエンドポイント名、第二引数にパラメータオブジェクトを渡します。
+
+### Mk:save(key value)
+任意の値に任意の名前を付けて永続化します。永続化した値は、AiScriptコンテキストが終了しても残り、Mk:loadで読み取ることができます。
+
+### Mk:load(key)
+Mk:saveで永続化した指定の名前の値を読み取ります。
+
+### Plugin:register_post_form_action(title fn)
+投稿フォームにアクションを追加します。第一引数にアクション名、第二引数にアクションが選択された際のコールバック関数を渡します。 コールバック関数には、第一引数に投稿フォームオブジェクトが渡されます。
+
+### Plugin:register_note_action(title fn)
+ノートメニューに項目を追加します。第一引数に項目名、第二引数に項目が選択された際のコールバック関数を渡します。 コールバック関数には、第一引数に対象のノートオブジェクトが渡されます。
+
+### Plugin:register_user_action(title fn)
+ユーザーメニューに項目を追加します。第一引数に項目名、第二引数に項目が選択された際のコールバック関数を渡します。 コールバック関数には、第一引数に対象のユーザーオブジェクトが渡されます。
+
+### Plugin:register_note_view_interruptor(fn)
+UIに表示されるノート情報を書き換えます。 コールバック関数には、第一引数に対象のノートオブジェクトが渡されます。 コールバック関数の返り値でノートが書き換えられます。
+
+### Plugin:register_note_post_interruptor(fn)
+ノート投稿時にノート情報を書き換えます。 コールバック関数には、第一引数に対象のノートオブジェクトが渡されます。 コールバック関数の返り値でノートが書き換えられます。
+
+### Plugin:open_url(url)
+第一引数に渡されたURLをブラウザの新しいタブで開きます。
+
+### Plugin:config
+プラグインの設定が格納されるオブジェクト。プラグイン定義のconfigで設定したキーで値が入ります。
diff --git a/src/docs/en-US/advanced/develop-bot.md b/src/docs/en-US/advanced/develop-bot.md
new file mode 100644
index 0000000000..7f825e9bc4
--- /dev/null
+++ b/src/docs/en-US/advanced/develop-bot.md
@@ -0,0 +1,6 @@
+# Botの作成
+[Misskey API](./api)を利用してBotの開発が可能です。 また、いくつかのBot実装が公開されているため、ぜひ参考にしてください。
+
+- [syuilo/ai](https://github.com/syuilo/ai) ... Node.js上で動く、TypeScript製Bot実装
+
+Botを作成したときは、プロフィール設定からBotフラグをオンにしておくことを強くおすすめします。
diff --git a/src/docs/en-US/advanced/reversi-bot.md b/src/docs/en-US/advanced/reversi-bot.md
new file mode 100644
index 0000000000..f1be888cb6
--- /dev/null
+++ b/src/docs/en-US/advanced/reversi-bot.md
@@ -0,0 +1,160 @@
+# MisskeyリバーシBotの開発
+Misskeyのリバーシ機能に対応したBotの開発方法をここに記します。
+
+1. `games/reversi`ストリームに以下のパラメータを付けて接続する:
+    * `i`: botアカウントのAPIキー
+
+2. 対局への招待が来たら、ストリームから`invited`イベントが流れてくる
+    * イベントの中身に、`parent`という名前で対局へ誘ってきたユーザーの情報が含まれている
+
+3. `games/reversi/match`へ、`user_id`として`parent`の`id`が含まれたリクエストを送信する
+
+4. 上手くいくとゲーム情報が返ってくるので、`games/reversi-game`ストリームへ、以下のパラメータを付けて接続する:
+    * `i`: botアカウントのAPIキー
+    * `game`: `game`の`id`
+
+5. この間、相手がゲームの設定を変更するとその都度`update-settings`イベントが流れてくるので、必要であれば何かしらの処理を行う
+
+6. 設定に満足したら、`{ type: 'accept' }`メッセージをストリームに送信する
+
+7. ゲームが開始すると、`started`イベントが流れてくる
+    * イベントの中身にはゲーム情報が含まれている
+
+8. 石を打つには、ストリームに`{ type: 'set', pos: <位置> }`を送信する(位置の計算方法は後述)
+
+9. 相手または自分が石を打つと、ストリームから`set`イベントが流れてくる
+    * `color`として石の色が含まれている
+    * `pos`として位置情報が含まれている
+
+## 位置の計算法
+8x8のマップを考える場合、各マスの位置(インデックスと呼びます)は次のようになっています:
+```
++--+--+--+--+--+--+--+--+
+| 0| 1| 2| 3| 4| 5| 6| 7|
++--+--+--+--+--+--+--+--+
+| 8| 9|10|11|12|13|14|15|
++--+--+--+--+--+--+--+--+
+|16|17|18|19|20|21|22|23|
+...
+```
+
+### X,Y座標 から インデックス に変換する
+```
+pos = x + (y * mapWidth)
+```
+`mapWidth`は、ゲーム情報の`map`から、次のようにして計算できます:
+```
+mapWidth = map[0].length
+```
+
+### インデックス から X,Y座標 に変換する
+```
+x = pos % mapWidth
+y = Math.floor(pos / mapWidth)
+```
+
+## マップ情報
+マップ情報は、ゲーム情報の`map`に入っています。 文字列の配列になっており、ひとつひとつの文字がマス情報を表しています。 それをもとにマップのデザインを知る事が出来ます:
+* `(スペース)` ... マス無し
+* `-` ... マス
+* `b` ... 初期配置される黒石
+* `w` ... 初期配置される白石
+
+例えば、4*4の次のような単純なマップがあるとします:
+```text
++---+---+---+---+
+|   |   |   |   |
++---+---+---+---+
+|   | ○ | ● |   |
++---+---+---+---+
+|   | ● | ○ |   |
++---+---+---+---+
+|   |   |   |   |
++---+---+---+---+
+```
+
+この場合、マップデータはこのようになります:
+```javascript
+['----', '-wb-', '-bw-', '----']
+```
+
+## ユーザーにフォームを提示して対話可能Botを作成する
+ユーザーとのコミュニケーションを行うため、ゲームの設定画面でユーザーにフォームを提示することができます。 例えば、Botの強さをユーザーが設定できるようにする、といったシナリオが考えられます。
+
+フォームを提示するには、`reversi-game`ストリームに次のメッセージを送信します:
+```javascript
+{
+  type: 'init-form',
+  body: [フォームコントロールの配列]
+}
+```
+
+フォームコントロールの配列については今から説明します。 フォームコントロールは、次のようなオブジェクトです:
+```javascript
+{
+  id: 'switch1',
+  type: 'switch',
+  label: 'Enable hoge',
+  value: false
+}
+```
+`id` ... コントロールのID。 `type` ... コントロールの種類。後述します。 `label` ... コントロールと一緒に表記するテキスト。 `value` ... コントロールのデフォルト値。
+
+### フォームの操作を受け取る
+ユーザーがフォームを操作すると、ストリームから`update-form`イベントが流れてきます。 イベントの中身には、コントロールのIDと、ユーザーが設定した値が含まれています。 例えば、上で示したスイッチをユーザーがオンにしたとすると、次のイベントが流れてきます:
+```javascript
+{
+  id: 'switch1',
+  value: true
+}
+```
+
+### フォームコントロールの種類
+#### Switch
+type: `switch` スイッチを表示します。何かの機能をオン/オフさせたい場合に有用です。
+
+##### プロパティ
+`label` ... スイッチに表記するテキスト。
+
+#### ラジオボタン
+type: `radio` ラジオボタンを表示します。選択肢を提示するのに有用です。例えば、Botの強さを設定させるなどです。
+
+##### プロパティ
+`items` ... ラジオボタンの選択肢。例:
+```javascript
+items: [{
+  label: 'å¼±',
+  value: 1
+}, {
+  label: '中',
+  value: 2
+}, {
+  label: 'å¼·',
+  value: 3
+}]
+```
+
+#### スライダー
+type: `slider` スライダーを表示します。
+
+##### プロパティ
+`min` ... スライダーの下限。 `max` ... スライダーの上限。 `step` ... 入力欄で刻むステップ値。
+
+#### テキストボックス
+type: `textbox` テキストボックスを表示します。ユーザーになにか入力させる一般的な用途に利用できます。
+
+## ユーザーにメッセージを表示する
+設定画面でユーザーと対話する、フォーム以外のもうひとつの方法がこれです。ユーザーになにかメッセージを表示することができます。 例えば、ユーザーがBotの対応していないモードやマップを選択したとき、警告を表示するなどです。 メッセージを表示するには、次のメッセージをストリームに送信します:
+```javascript
+{
+  type: 'message',
+  body: {
+    text: 'メッセージ内容',
+    type: 'メッセージの種類'
+  }
+}
+```
+メッセージの種類: `success`, `info`, `warning`, `error`。
+
+## 投了する
+投了をするには、<a href="./api/endpoints/games/reversi/games/surrender">このエンドポイント</a>にリクエストします。
diff --git a/src/docs/en-US/advanced/stream.md b/src/docs/en-US/advanced/stream.md
new file mode 100644
index 0000000000..c0d0efc910
--- /dev/null
+++ b/src/docs/en-US/advanced/stream.md
@@ -0,0 +1,350 @@
+# ストリーミングAPI
+
+ストリーミングAPIを使うと、リアルタイムで様々な情報(例えばタイムラインに新しい投稿が流れてきた、メッセージが届いた、フォローされた、など)を受け取ったり、様々な操作を行ったりすることができます。
+
+## ストリームに接続する
+
+ストリーミングAPIを利用するには、まずMisskeyサーバーに**websocket**接続する必要があります。
+
+以下のURLに、`i`というパラメータ名で認証情報を含めて、websocket接続してください。例:
+```
+%WS_URL%/streaming?i=xxxxxxxxxxxxxxx
+```
+
+認証情報は、自分のAPIキーや、アプリケーションからストリームに接続する際はユーザーのアクセストークンのことを指します。
+
+<div class="info">ℹ️ 認証情報の取得については、<a href="./api">こちらのドキュメント</a>をご確認ください。</div>
+
+---
+
+認証情報は省略することもできますが、その場合非ログインでの利用ということになり、受信できる情報や可能な操作は限られます。例:
+
+```
+%WS_URL%/streaming
+```
+
+---
+
+ストリームに接続すると、後述するAPI操作や、投稿の購読を行ったりすることができます。 しかしまだこの段階では、例えばタイムラインへの新しい投稿を受信したりすることはできません。 それを行うには、ストリーム上で、後述する**チャンネル**に接続する必要があります。
+
+**ストリームでのやり取りはすべてJSONです。**
+
+## Channels
+MisskeyのストリーミングAPIにはチャンネルという概念があります。これは、送受信する情報を分離するための仕組みです。 Misskeyのストリームに接続しただけでは、まだリアルタイムでタイムラインの投稿を受信したりはできません。 ストリーム上でチャンネルに接続することで、様々な情報を受け取ったり情報を送信したりすることができるようになります。
+
+ひとつのストリーム上で、同時に複数のチャンネルに接続することができます。
+
+### チャンネルに接続する
+チャンネルに接続するには、次のようなデータをJSONでストリームに送信します:
+
+```json
+{
+    type: 'connect',
+    body: {
+        channel: 'xxxxxxxx',
+        id: 'foobar',
+        params: {
+            ...
+        }
+    }
+}
+```
+
+ここで、
+* `channel`には接続したいチャンネル名を設定します。チャンネルの種類については後述します。
+* `id`にはそのチャンネルとやり取りするための任意のIDを設定します。ストリームでは様々なメッセージが流れるので、そのメッセージがどのチャンネルからのものなのか識別する必要があるからです。このIDは、UUIDや、乱数のようなもので構いません。
+* `params`はチャンネルに接続する際のパラメータです。チャンネルによって接続時に必要とされるパラメータは異なります。パラメータ不要のチャンネルに接続する際は、このプロパティは省略可能です。
+
+<div class="info">ℹ️ IDはチャンネルごとではなく「チャンネルの接続ごと」です。なぜなら、同じチャンネルに異なるパラメータで複数接続するケースもあるからです。</div>
+
+### チャンネルからのメッセージを受け取る
+例えばタイムラインのチャンネルなら、新しい投稿があった時にメッセージを発します。そのメッセージを受け取ることで、タイムラインに新しい投稿がされたことをリアルタイムで知ることができます。
+
+チャンネルがメッセージを発すると、次のようなデータがJSONでストリームに流れてきます:
+```json
+{
+    type: 'channel',
+    body: {
+        id: 'foobar',
+        type: 'something',
+        body: {
+            some: 'thing'
+        }
+    }
+}
+```
+
+ここで、
+* `id`には前述したそのチャンネルに接続する際に設定したIDが設定されています。これで、このメッセージがどのチャンネルからのものなのか知ることができます。
+* `type`にはメッセージの種類が設定されます。チャンネルによって、どのような種類のメッセージが流れてくるかは異なります。
+* `body`にはメッセージの内容が設定されます。チャンネルによって、どのような内容のメッセージが流れてくるかは異なります。
+
+### チャンネルに向けてメッセージを送信する
+チャンネルによっては、メッセージを受け取るだけでなく、こちらから何かメッセージを送信し、何らかの操作を行える場合があります。
+
+チャンネルにメッセージを送信するには、次のようなデータをJSONでストリームに送信します:
+```json
+{
+    type: 'channel',
+    body: {
+        id: 'foobar',
+        type: 'something',
+        body: {
+            some: 'thing'
+        }
+    }
+}
+```
+
+ここで、
+* `id`には前述したそのチャンネルに接続する際に設定したIDを設定します。これで、このメッセージがどのチャンネルに向けたものなのか識別させることができます。
+* `type`にはメッセージの種類を設定します。チャンネルによって、どのような種類のメッセージを受け付けるかは異なります。
+* `body`にはメッセージの内容を設定します。チャンネルによって、どのような内容のメッセージを受け付けるかは異なります。
+
+### チャンネルから切断する
+チャンネルから切断するには、次のようなデータをJSONでストリームに送信します:
+
+```json
+{
+    type: 'disconnect',
+    body: {
+        id: 'foobar'
+    }
+}
+```
+
+ここで、
+* `id`には前述したそのチャンネルに接続する際に設定したIDを設定します。
+
+## ストリームを経由してAPIリクエストする
+
+ストリームを経由してAPIリクエストすると、HTTPリクエストを発生させずにAPIを利用できます。そのため、コードを簡潔にできたり、パフォーマンスの向上を見込めるかもしれません。
+
+ストリームを経由してAPIリクエストするには、次のようなデータをJSONでストリームに送信します:
+```json
+{
+    type: 'api',
+    body: {
+        id: 'xxxxxxxxxxxxxxxx',
+        endpoint: 'notes/create',
+        data: {
+            text: 'yee haw!'
+        }
+    }
+}
+```
+
+ここで、
+* `id`には、APIのレスポンスを識別するための、APIリクエストごとの一意なIDを設定する必要があります。UUIDや、簡単な乱数のようなもので構いません。
+* `endpoint`には、あなたがリクエストしたいAPIのエンドポイントを指定します。
+* `data`には、エンドポイントのパラメータを含めます。
+
+<div class="info">ℹ️ APIのエンドポイントやパラメータについてはAPIリファレンスをご確認ください。</div>
+
+### レスポンスの受信
+
+APIへリクエストすると、レスポンスがストリームから次のような形式で流れてきます。
+
+```json
+{
+    type: 'api:xxxxxxxxxxxxxxxx',
+    body: {
+        ...
+    }
+}
+```
+
+ここで、
+* `xxxxxxxxxxxxxxxx`の部分には、リクエストの際に設定された`id`が含まれています。これにより、どのリクエストに対するレスポンスなのか判別することができます。
+* `body`には、レスポンスが含まれています。
+
+## 投稿のキャプチャ
+
+Misskeyは投稿のキャプチャと呼ばれる仕組みを提供しています。これは、指定した投稿のイベントをストリームで受け取る機能です。
+
+例えばタイムラインを取得してユーザーに表示したとします。ここで誰かがそのタイムラインに含まれるどれかの投稿に対してリアクションしたとします。
+
+しかし、クライアントからするとある投稿にリアクションが付いたことなどは知る由がないため、リアルタイムでリアクションをタイムライン上の投稿に反映して表示するといったことができません。
+
+この問題を解決するために、Misskeyは投稿のキャプチャ機構を用意しています。投稿をキャプチャすると、その投稿に関するイベントを受け取ることができるため、リアルタイムでリアクションを反映させたりすることが可能になります。
+
+### 投稿をキャプチャする
+
+投稿をキャプチャするには、ストリームに次のようなメッセージを送信します:
+
+```json
+{
+    type: 'subNote',
+    body: {
+        id: 'xxxxxxxxxxxxxxxx'
+    }
+}
+```
+
+ここで、
+* `id`にキャプチャしたい投稿の`id`を設定します。
+
+このメッセージを送信すると、Misskeyにキャプチャを要請したことになり、以後、その投稿に関するイベントが流れてくるようになります。
+
+例えば投稿にリアクションが付いたとすると、次のようなメッセージが流れてきます:
+
+```json
+{
+    type: 'noteUpdated',
+    body: {
+        id: 'xxxxxxxxxxxxxxxx',
+        type: 'reacted',
+        body: {
+            reaction: 'like',
+            userId: 'yyyyyyyyyyyyyyyy'
+        }
+    }
+}
+```
+
+ここで、
+* `body`内の`id`に、イベントを発生させた投稿のIDが設定されます。
+* `body`内の`type`に、イベントの種類が設定されます。
+* `body`内の`body`に、イベントの詳細が設定されます。
+
+#### イベントの種類
+
+##### `reacted`
+その投稿にリアクションがされた時に発生します。
+
+* `reaction`に、リアクションの種類が設定されます。
+* `userId`に、リアクションを行ったユーザーのIDが設定されます。
+
+例:
+```json
+{
+    type: 'noteUpdated',
+    body: {
+        id: 'xxxxxxxxxxxxxxxx',
+        type: 'reacted',
+        body: {
+            reaction: 'like',
+            userId: 'yyyyyyyyyyyyyyyy'
+        }
+    }
+}
+```
+
+##### `deleted`
+その投稿が削除された時に発生します。
+
+* `deletedAt`に、削除日時が設定されます。
+
+例:
+```json
+{
+    type: 'noteUpdated',
+    body: {
+        id: 'xxxxxxxxxxxxxxxx',
+        type: 'deleted',
+        body: {
+            deletedAt: '2018-10-22T02:17:09.703Z'
+        }
+    }
+}
+```
+
+##### `pollVoted`
+その投稿に添付されたアンケートに投票された時に発生します。
+
+* `choice`に、選択肢IDが設定されます。
+* `userId`に、投票を行ったユーザーのIDが設定されます。
+
+例:
+```json
+{
+    type: 'noteUpdated',
+    body: {
+        id: 'xxxxxxxxxxxxxxxx',
+        type: 'pollVoted',
+        body: {
+            choice: 2,
+            userId: 'yyyyyyyyyyyyyyyy'
+        }
+    }
+}
+```
+
+### 投稿のキャプチャを解除する
+
+その投稿がもう画面に表示されなくなったりして、その投稿に関するイベントをもう受け取る必要がなくなったときは、キャプチャの解除を申請してください。
+
+次のメッセージを送信します:
+
+```json
+{
+    type: 'unsubNote',
+    body: {
+        id: 'xxxxxxxxxxxxxxxx'
+    }
+}
+```
+
+ここで、
+* `id`にキャプチャを解除したい投稿の`id`を設定します。
+
+このメッセージを送信すると、以後、その投稿に関するイベントは流れてこないようになります。
+
+# チャンネル一覧
+## `main`
+アカウントに関する基本的な情報が流れてきます。このチャンネルにパラメータはありません。
+
+### 流れてくるイベント一覧
+
+#### `renote`
+自分の投稿がRenoteされた時に発生するイベントです。自分自身の投稿をRenoteしたときは発生しません。
+
+#### `mention`
+誰かからメンションされたときに発生するイベントです。
+
+#### `readAllNotifications`
+自分宛ての通知がすべて既読になったことを表すイベントです。このイベントを利用して、「通知があることを示すアイコン」のようなものをオフにしたりする等のケースが想定されます。
+
+#### `meUpdated`
+自分の情報が更新されたことを表すイベントです。
+
+#### `follow`
+自分が誰かをフォローしたときに発生するイベントです。
+
+#### `unfollow`
+自分が誰かのフォローを解除したときに発生するイベントです。
+
+#### `followed`
+自分が誰かにフォローされたときに発生するイベントです。
+
+## `homeTimeline`
+ホームタイムラインの投稿情報が流れてきます。このチャンネルにパラメータはありません。
+
+### 流れてくるイベント一覧
+
+#### `note`
+タイムラインに新しい投稿が流れてきたときに発生するイベントです。
+
+## `localTimeline`
+ローカルタイムラインの投稿情報が流れてきます。このチャンネルにパラメータはありません。
+
+### 流れてくるイベント一覧
+
+#### `note`
+ローカルタイムラインに新しい投稿が流れてきたときに発生するイベントです。
+
+## `hybridTimeline`
+ソーシャルタイムラインの投稿情報が流れてきます。このチャンネルにパラメータはありません。
+
+### 流れてくるイベント一覧
+
+#### `note`
+ソーシャルタイムラインに新しい投稿が流れてきたときに発生するイベントです。
+
+## `globalTimeline`
+グローバルタイムラインの投稿情報が流れてきます。このチャンネルにパラメータはありません。
+
+### 流れてくるイベント一覧
+
+#### `note`
+グローバルタイムラインに新しい投稿が流れてきたときに発生するイベントです。
diff --git a/src/docs/en-US/features/antenna.md b/src/docs/en-US/features/antenna.md
new file mode 100644
index 0000000000..ed39d30674
--- /dev/null
+++ b/src/docs/en-US/features/antenna.md
@@ -0,0 +1,4 @@
+# Antennas
+アンテナは、自由に条件を設定して、合致するノートを自動で収集することができる機能です。
+
+条件を設定したアンテナが作成された状態で、条件に合致するノートが投稿されると、リアルタイムでそのアンテナのタイムラインにノートが追加されます。
diff --git a/src/docs/en-US/features/custom-emoji.md b/src/docs/en-US/features/custom-emoji.md
new file mode 100644
index 0000000000..2bef4a563e
--- /dev/null
+++ b/src/docs/en-US/features/custom-emoji.md
@@ -0,0 +1,2 @@
+# Custom Emoji
+カスタム絵文字は、インスタンスで用意された画像を絵文字のように使える機能です。 ノート、リアクション、チャット、自己紹介、名前などの場所で使うことができます。 カスタム絵文字をそれらの場所で使うには、絵文字ピッカーボタン(ある場合)を押すか、`:`を入力して絵文字サジェストを表示します。 テキスト内に`:foo:`のような形式の文字列が見つかると、`foo`の部分がカスタム絵文字名と解釈され、表示時には対応したカスタム絵文字に置き換わります。
diff --git a/src/docs/en-US/features/deck.md b/src/docs/en-US/features/deck.md
new file mode 100644
index 0000000000..73e9efdaaf
--- /dev/null
+++ b/src/docs/en-US/features/deck.md
@@ -0,0 +1,18 @@
+# Deck
+
+デッキは利用可能なUIのひとつです。「カラム」と呼ばれるビューを複数並べて表示させることで、カスタマイズ性が高く、情報量の多いUIが構築できることが特徴です。
+
+## カラムの追加
+デッキの背景を右クリックし、「カラムを追加」して任意のカラムを追加できます。
+
+## カラムの移動
+カラムは、ドラッグアンドドロップで他のカラムと位置を入れ替えることが出来るほか、カラムメニュー(カラムのヘッダー右クリック)から位置を移動させることもできます。
+
+## カラムの水平分割
+カラムは左右だけでなく、上下に並べることもできます。 カラムメニューを開き、「左に重ねる」を選択すると、左のカラムの下に現在のカラムが移動します。 上下分割を解除するには、カラムメニューの「右に出す」を選択します。
+
+## カラムの設定
+カラムメニューの「編集」を選択するとカラムの設定を編集できます。カラムの名前を変えたり、幅を変えたりできます。
+
+## デッキの設定
+デッキに関する設定は、[settings/deck](/settings/deck)で行えます。
diff --git a/src/docs/en-US/features/drive.md b/src/docs/en-US/features/drive.md
new file mode 100644
index 0000000000..c445b99a86
--- /dev/null
+++ b/src/docs/en-US/features/drive.md
@@ -0,0 +1,17 @@
+# Drive
+ドライブは、Misskey上でファイルを管理できる機能です。
+
+[ドライブのページ](/my/drive)から任意のファイルをアップロードできるほか、アバターに設定した画像や、ノートに添付したファイルなどもすべてドライブにアップロードされます。
+
+<div class="warn">⚠️ ドライブからファイルを削除すると、そのファイルが添付されたノートも消えます。</div>
+
+ドライブにアップロードされたファイルは、いつでもダウンロードすることができるほか、ノート作成時に「ドライブからファイルを添付」することでファイルを再利用することもできます。
+
+ドライブ内にフォルダを作り、複数のファイルをまとめて整理することもできます。
+
+## 閲覧注意 (NSFW)
+<div class="info">ℹ️ この項目が閲覧注意なわけではありません</div>
+
+閲覧注意またはNSFW (Not safe for work) は、ドライブのファイルに設定することができるフラグです。 閲覧注意フラグを設定されたファイルは、表示される際に閲覧者の操作なしには表示されなくなります。 このフラグは、例えば職場や公共の場で閲覧するのに適切でないと思われる画像などに設定し、そのような画像が突然表示されてしまうことを防ぐ目的で使われます。
+
+このフラグは手動でオンオフを切り替えられるほか、モデレーターの判断で設定される場合もあります。
diff --git a/src/docs/en-US/features/favorite.md b/src/docs/en-US/features/favorite.md
new file mode 100644
index 0000000000..4c971af788
--- /dev/null
+++ b/src/docs/en-US/features/favorite.md
@@ -0,0 +1,4 @@
+# Favorite
+[ノート](./node)をお気に入りとして登録できる機能です。 お気に入り登録したノートは、[お気に入りページ](./my/favorites)で一覧することができます。 お気に入りに登録したことは相手に通知されず、お気に入りは自分しか見ることができません。
+
+ノートをお気に入り登録するには、ノートメニューの「お気に入り」を押します。お気に入り解除するには、ノートメニューの「お気に入り解除」を押します。
diff --git a/src/docs/en-US/features/follow.md b/src/docs/en-US/features/follow.md
new file mode 100644
index 0000000000..3e71012b5f
--- /dev/null
+++ b/src/docs/en-US/features/follow.md
@@ -0,0 +1,2 @@
+# Following
+ユーザーをフォローすると、タイムラインにそのユーザーの投稿が表示されるようになります。ただし、他のユーザーに対する返信は含まれません。 ユーザーをフォローするには、ユーザーページの「フォロー」ボタンをクリックします。フォローを解除するには、もう一度クリックします。
diff --git a/src/docs/en-US/features/keyboard-shortcut.md b/src/docs/en-US/features/keyboard-shortcut.md
new file mode 100644
index 0000000000..d59c447647
--- /dev/null
+++ b/src/docs/en-US/features/keyboard-shortcut.md
@@ -0,0 +1,66 @@
+# キーボードショートカット
+
+## Global
+これらのショートカットは基本的にどこでも使えます。
+<table>
+    <thead>
+        <tr><th>ショートカット</th><th>効果</th><th>由来</th></tr>
+    </thead>
+    <tbody>
+        <tr><td><kbd class="key">P</kbd>, <kbd class="key">N</kbd></td><td>新規投稿</td><td><b>P</b>ost, <b>N</b>ew, <b>N</b>ote</td></tr>
+        <tr><td><kbd class="key">T</kbd></td><td>タイムラインの最も新しい投稿にフォーカス</td><td><b>T</b>imeline, <b>T</b>op</td></tr>
+        <tr><td><kbd class="group"><kbd class="key">Shift</kbd> + <kbd class="key">N</kbd></kbd></td><td>通知を表示/隠す</td><td><b>N</b>otifications</td></tr>
+        <tr><td><kbd class="key">S</kbd></td><td>Search</td><td><b>S</b>earch</td></tr>
+        <tr><td><kbd class="key">H</kbd>, <kbd class="key">?</kbd></td><td>ヘルプを表示</td><td><b>H</b>elp</td></tr>
+    </tbody>
+</table>
+
+## 投稿にフォーカスされた状態
+<table>
+    <thead>
+        <tr><th>ショートカット</th><th>効果</th><th>由来</th></tr>
+    </thead>
+    <tbody>
+        <tr><td><kbd class="key">↑</kbd>, <kbd class="key">K</kbd>, <kbd class="group"><kbd class="key">Shift</kbd> + <kbd class="key">Tab</kbd></kbd></td><td>上の投稿にフォーカスを移動</td><td>-</td></tr>
+        <tr><td><kbd class="key">↓</kbd>, <kbd class="key">J</kbd>, <kbd class="key">Tab</kbd></td><td>下の投稿にフォーカスを移動</td><td>-</td></tr>
+        <tr><td><kbd class="key">R</kbd></td><td>返信フォームを開く</td><td><b>R</b>eply</td></tr>
+        <tr><td><kbd class="key">Q</kbd></td><td>Renoteフォームを開く</td><td><b>Q</b>uote</td></tr>
+        <tr><td><kbd class="group"><kbd class="key">Ctrl</kbd> + <kbd class="key">Q</kbd></kbd></td><td>即刻Renoteする(フォームを開かずに)</td><td>-</td></tr>
+        <tr><td><kbd class="key">E</kbd>, <kbd class="key">A</kbd>, <kbd class="key">+</kbd></td><td>リアクションフォームを開く</td><td><b>E</b>mote, re<b>A</b>ction</td></tr>
+        <tr><td><kbd class="key">0</kbd>~<kbd class="key">9</kbd></td><td>数字に対応したリアクションをする(対応については後述)</td><td>-</td></tr>
+        <tr><td><kbd class="key">F</kbd>, <kbd class="key">B</kbd></td><td>お気に入りに登録</td><td><b>F</b>avorite, <b>B</b>ookmark</td></tr>
+        <tr><td><kbd class="key">Del</kbd>, <kbd class="group"><kbd class="key">Ctrl</kbd> + <kbd class="key">D</kbd></kbd></td><td>投稿を削除</td><td><b>D</b>elete</tr>
+        <tr><td><kbd class="key">M</kbd>, <kbd class="key">O</kbd></td><td>投稿に対するメニューを開く</td><td><b>M</b>ore, <b>O</b>ther</td></tr>
+        <tr><td><kbd class="key">S</kbd></td><td>CWで隠された部分を表示 or 隠す</td><td><b>S</b>how, <b>S</b>ee</td></tr>
+        <tr><td><kbd class="key">Esc</kbd></td><td>フォーカスを外す</td><td>-</td></tr>
+    </tbody>
+</table>
+
+## Renoteフォーム
+<table>
+    <thead>
+        <tr><th>ショートカット</th><th>効果</th><th>由来</th></tr>
+    </thead>
+    <tbody>
+        <tr><td><kbd class="key">Enter</kbd></td><td>Renoteする</td><td>-</td></tr>
+        <tr><td><kbd class="key">Q</kbd></td><td>フォームを展開する</td><td><b>Q</b>uote</td></tr>
+        <tr><td><kbd class="key">Esc</kbd></td><td>フォームを閉じる</td><td>-</td></tr>
+    </tbody>
+</table>
+
+## リアクションフォーム
+デフォルトで「👍」にフォーカスが当たっている状態です。
+<table>
+    <thead>
+        <tr><th>ショートカット</th><th>効果</th><th>由来</th></tr>
+    </thead>
+    <tbody>
+        <tr><td><kbd class="key">↑</kbd>, <kbd class="key">K</kbd></td><td>上のリアクションにフォーカスを移動</td><td>-</td></tr>
+        <tr><td><kbd class="key">↓</kbd>, <kbd class="key">J</kbd></td><td>下のリアクションにフォーカスを移動</td><td>-</td></tr>
+        <tr><td><kbd class="key">←</kbd>, <kbd class="key">H</kbd>, <kbd class="group"><kbd class="key">Shift</kbd> + <kbd class="key">Tab</kbd></kbd></td><td>左のリアクションにフォーカスを移動</td><td>-</td></tr>
+        <tr><td><kbd class="key">→</kbd>, <kbd class="key">L</kbd>, <kbd class="key">Tab</kbd></td><td>右のリアクションにフォーカスを移動</td><td>-</td></tr>
+        <tr><td><kbd class="key">Enter</kbd>, <kbd class="key">Space</kbd>, <kbd class="key">+</kbd></td><td>リアクション確定</td><td>-</td></tr>
+        <tr><td><kbd class="key">0</kbd>~<kbd class="key">9</kbd></td><td>数字に対応したリアクションで確定</td><td>-</td></tr>
+        <tr><td><kbd class="key">Esc</kbd></td><td>リアクションするのをやめる</td><td>-</td></tr>
+    </tbody>
+</table>
diff --git a/src/docs/en-US/features/mfm.md b/src/docs/en-US/features/mfm.md
new file mode 100644
index 0000000000..5be2df4f30
--- /dev/null
+++ b/src/docs/en-US/features/mfm.md
@@ -0,0 +1,12 @@
+# MFM
+MFMは、Misskey Flavored Markdownの略で、Misskeyの様々な場所で使用できる専用のマークアップ言語です。 MFMで使用可能な構文は[MFMチートシート](/mfm-cheat-sheet)で確認できます。
+
+## MFMが使用可能な場所の例
+- ノート本文
+- CW注釈
+- ユーザーの名前
+- ユーザーの自己紹介
+
+## 開発者向け情報
+MFMのパーサー実装はライブラリとして公開されており、簡単にクライアントにMFMを組み込むことが可能です。
+- [misskey-dev/mfm.js](https://github.com/misskey-dev/mfm.js) - JavaScriptパーサー実装
diff --git a/src/docs/en-US/features/mute.md b/src/docs/en-US/features/mute.md
new file mode 100644
index 0000000000..306beee570
--- /dev/null
+++ b/src/docs/en-US/features/mute.md
@@ -0,0 +1,13 @@
+# Mute
+
+ユーザーをミュートすると、そのユーザーに関する次のコンテンツがMisskeyに表示されなくなります:
+
+* タイムラインや投稿の検索結果内の、そのユーザーの投稿(およびそれらの投稿に対する返信やRenote)
+* そのユーザーからの通知
+* メッセージ履歴一覧内の、そのユーザーとのメッセージ履歴
+
+ユーザーをミュートするには、対象のユーザーのユーザーページに表示されている「ミュート」ボタンを押します。
+
+ミュートを行ったことは相手に通知されず、ミュートされていることを知ることもできません。
+
+設定>ミュート から、自分がミュートしているユーザー一覧を確認することができます。
diff --git a/src/docs/en-US/features/note.md b/src/docs/en-US/features/note.md
new file mode 100644
index 0000000000..e0a7f11193
--- /dev/null
+++ b/src/docs/en-US/features/note.md
@@ -0,0 +1,51 @@
+# Notes
+ノートは、Misskeyに投稿される、文章、ファイル、アンケートなどを含むコンテンツで、Misskeyの中心的概念です。また、そのノートを作成する行為自体もノートと呼ばれます。
+
+ノートが作成されると、[タイムライン](./timeline)に追加され、自分の[フォロワー](./follow)やサーバーのユーザーが見れるようになります。
+
+ノートには、[リアクション](./reaction)を行うことができます。また、返信や引用もできます。
+
+ノートを[お気に入り](./favorite)登録することで、後で簡単に見返すことができます。
+
+## ノートを作成する
+ノートを作成するには、画面上にある鉛筆マークのボタンを押して、作成フォームを開きます。作成フォームに内容を入力し、「ノート」ボタンを押すことでノートが作成されます。 ノートには、画像、動画など任意のファイルや、[アンケート](./poll)を添付することができます。また、本文中には[MFM](./mfm)が使用でき、[メンション](./mention)や[ハッシュタグ](./hashtag)を含めることもできます。 他にも、CWや公開範囲といった設定も行えます(詳細は後述)。
+<div class="info">ℹ️ コンピューターのクリップボードに画像データがある状態で、フォーム内のテキストボックスにペーストするとその画像を添付することができます。</div>
+<div class="info">ℹ️ テキストボックス内で<kbd class="key">Ctrl + Enter</kbd>を押すことでも投稿できます。</div>
+
+## Renote
+既にあるノートを引用、もしくはそのノートを新しいノートとして共有する行為、またそれによって作成されたノートをRenoteと呼びます。 自分がフォローしているユーザーの、気に入ったノートを自分のフォロワーに共有したい場合や、過去の自分のノートを再度共有したい場合に使います。 同じノートに対して無制限にRenoteを行うことができますが、あまり連続して使用すると迷惑になる場合もあるので、注意しましょう。
+<div class="warn">⚠️ 公開範囲がフォロワーやダイレクトのノートはRenoteできません</div>
+
+Renoteを削除するには、Renoteの時刻表示の隣にある「...」を押し、「Renote解除」を選択します。
+
+## CW
+Contents Warningの略で、ノートの内容を、閲覧者の操作なしには表示しないようにできる機能です。主に長大な内容を隠すためや、ネタバレ防止などに使うことができます。 設定するには、フォームの「内容を隠す」ボタン(目のアイコン)を押します。すると新しい入力エリアが表れるので、そこに内容の要約を記入します。
+
+## Visiblility
+ノートごとに、そのノートが公開される範囲を設定することができます。フォームの「ノート」ボタンの左にあるアイコンを押すと公開範囲を以下から選択できます。
+
+### Public
+全ての人に対してノートが公開されるほか、サーバーの全てのタイムライン(ホームタイムライン、ローカルタイムライン、ソーシャルタイムライン、グローバルタイムライン)にノートが流れます。
+<div class="warn">⚠️ アカウントが<a href="./silence">サイレンス</a>状態の時は、この公開範囲は使用できません。</div>
+
+### Home
+全ての人に対してノートが公開されますが、フォロワー以外のローカルタイムライン、ソーシャルタイムライン、グローバルタイムラインにはノートは流れません。
+
+### Followers
+自分のフォロワーに対してのみノートを公開します。フォロワーの全てのタイムラインに流れます。
+
+### Direct
+指定したユーザーに対してのみノートを公開します。指定したユーザーの全てのタイムラインに流れます。
+
+### 「ローカルのみ」オプション
+このオプションを有効にすると、リモートにノートを連合しなくなります。
+
+### 公開範囲の比較
+<table>
+    <tr><th></th><th>Public</th><th>Home</th><th>Followers</th><th>Direct</th></tr>
+    <tr><th>フォロワーのLTL/STL/GTL</th><td>✔</td><td>✔</td><td>✔</td><td></td></tr>
+    <tr><th>非フォロワーのLTL/STL/GTL</th><td>✔</td><td></td><td></td><td></td></tr>
+</table>
+
+## Pin to profile
+ノートをピン留めすると、ユーザーページに常にそのノートを表示しておくことができます。 ノートのメニューを開き、「ピン留め」を選択してピン留めできます。 複数のノートをピン留めできます。
diff --git a/src/docs/en-US/features/pages.md b/src/docs/en-US/features/pages.md
new file mode 100644
index 0000000000..7fc6ee29c3
--- /dev/null
+++ b/src/docs/en-US/features/pages.md
@@ -0,0 +1,10 @@
+# Pages
+
+## Variables
+変数を使うことで動的なページを作成できます。テキスト内で <b>{ 変数名 }</b> と書くとそこに変数の値を埋め込めます。例えば <b>Hello { thing } world!</b> というテキストで、変数(thing)の値が <b>ai</b> だった場合、テキストは <b>Hello ai world!</b> になります。
+
+変数の評価(値を算出すること)は上から下に行われるので、ある変数の中で自分より下の変数を参照することはできません。例えば上から <b>A、B、C</b> と3つの変数を定義したとき、<b>C</b>の中で<b>A</b>や<b>B</b>を参照することはできますが、<b>A</b>の中で<b>B</b>や<b>C</b>を参照することはできません。
+
+ユーザーからの入力を受け取るには、ページに「ユーザー入力」ブロックを設置し、「変数名」に入力を格納したい変数名を設定します(変数は自動で作成されます)。その変数を使ってユーザー入力に応じた動作を行えます。
+
+関数を使うと、値の算出処理を再利用可能な形にまとめることができます。関数を作るには、「関数」タイプの変数を作成します。関数にはスロット(引数)を設定することができ、スロットの値は関数内で変数として利用可能です。また、関数を引数に取る関数(高階関数と呼ばれます)も存在します。関数は予め定義しておくほかに、このような高階関数のスロットに即席でセットすることもできます。
diff --git a/src/docs/en-US/features/reaction.md b/src/docs/en-US/features/reaction.md
new file mode 100644
index 0000000000..41e9339234
--- /dev/null
+++ b/src/docs/en-US/features/reaction.md
@@ -0,0 +1,11 @@
+# Reactions
+他の人のノートに、絵文字を付けて簡単にあなたの反応を伝えられる機能です。 リアクションするには、ノートの + アイコンをクリックしてピッカーを表示し、絵文字を選択します。 リアクションには[カスタム絵文字](./custom-emoji)も使用できます。
+
+## リアクションピッカーのカスタマイズ
+ピッカーに表示される絵文字を自分好みにカスタマイズすることができます。 設定の「リアクション」で設定します。
+
+## リモート投稿へのリアクションについて
+リアクションはMisskeyオリジナルの機能であるため、リモートインスタンスがMisskeyでない限りは、ほとんどの場合「Like」としてアクティビティが送信されます。一般的にはLikeは「お気に入り」として実装されているようです。
+
+## リモートからのリアクションについて
+リモートから「Like」アクティビティを受信したとき、Misskeyでは「👍」のリアクションとして解釈されます。
diff --git a/src/docs/en-US/features/silence.md b/src/docs/en-US/features/silence.md
new file mode 100644
index 0000000000..4d533dc568
--- /dev/null
+++ b/src/docs/en-US/features/silence.md
@@ -0,0 +1,6 @@
+# Silence
+サイレンスは、アカウントに設定される状態のひとつです。
+
+アカウントがサイレンス状態になると、ノートの公開範囲をパブリックにできなくなります。 ホーム、フォロワー、ダイレクトは選択可能なため、サイレンスを受けた場合でもフォロワーやあなたのユーザーページを直接訪れた場合は投稿を閲覧できますが、GTL(連合タイムライン)やLTL(ローカルタイムライン)には投稿が流れません。
+
+アカウントのサイレンス状態は、サーバーのモデレーターによって有効化/無効化されます。
diff --git a/src/docs/en-US/features/theme.md b/src/docs/en-US/features/theme.md
new file mode 100644
index 0000000000..a0a9b0d02f
--- /dev/null
+++ b/src/docs/en-US/features/theme.md
@@ -0,0 +1,68 @@
+# Themes
+
+テーマを設定して、Misskeyクライアントの見た目を変更できます。
+
+## テーマの設定
+設定 > テーマ
+
+## テーマを作成する
+テーマコードはJSON5で記述されたテーマオブジェクトです。 テーマは以下のようなオブジェクトです。
+``` js
+{
+    id: '17587283-dd92-4a2c-a22c-be0637c9e22a',
+
+    name: 'Danboard',
+    author: 'syuilo',
+
+    base: 'light',
+
+    props: {
+        accent: 'rgb(218, 141, 49)',
+        bg: 'rgb(218, 212, 190)',
+        fg: 'rgb(115, 108, 92)',
+        panel: 'rgb(236, 232, 220)',
+        renote: 'rgb(100, 152, 106)',
+        link: 'rgb(100, 152, 106)',
+        mention: '@accent',
+        hashtag: 'rgb(100, 152, 106)',
+        header: 'rgba(239, 227, 213, 0.75)',
+        navBg: 'rgb(216, 206, 182)',
+        inputBorder: 'rgba(0, 0, 0, 0.1)',
+    },
+}
+
+```
+
+* `id` ... テーマの一意なID。UUIDをおすすめします。
+* `name` ... テーマ名
+* `author` ... テーマの作者
+* `desc` ... テーマの説明(オプション)
+* `base` ... 明るいテーマか、暗いテーマか
+    * `light`にすると明るいテーマになり、`dark`にすると暗いテーマになります。
+    * テーマはここで設定されたベーステーマを継承します。
+* `props` ... テーマのスタイル定義。これから説明します。
+
+### テーマのスタイル定義
+`props`下にはテーマのスタイルを定義します。 キーがCSSの変数名になり、バリューで中身を指定します。 なお、この`props`オブジェクトはベーステーマから継承されます。 ベーステーマは、このテーマの`base`が`light`なら[_light.json5](https://github.com/misskey-dev/misskey/blob/develop/src/client/themes/_light.json5)で、`dark`なら[_dark.json5](https://github.com/misskey-dev/misskey/blob/develop/src/client/themes/_dark.json5)です。 つまり、このテーマ内の`props`に`panel`というキーが無くても、そこにはベーステーマの`panel`があると見なされます。
+
+#### バリューで使える構文
+* 16進数で表された色
+    * 例: `#00ff00`
+* `rgb(r, g, b)`形式で表された色
+    * 例: `rgb(0, 255, 0)`
+* `rgb(r, g, b, a)`形式で表された透明度を含む色
+    * 例: `rgba(0, 255, 0, 0.5)`
+* 他のキーの値の参照
+    * `@{キー名}`と書くと他のキーの値の参照になります。`{キー名}`は参照したいキーの名前に置き換えます。
+    * 例: `@panel`
+* 定数(後述)の参照
+    * `${定数名}`と書くと定数の参照になります。`{定数名}`は参照したい定数の名前に置き換えます。
+    * 例: `$main`
+* 関数(後述)
+    * `:{関数名}<{引数}<{色}`
+
+#### Constant
+「CSS変数として出力はしたくないが、他のCSS変数の値として使いまわしたい」値があるときは、定数を使うと便利です。 キー名を`$`で始めると、そのキーはCSS変数として出力されません。
+
+#### Functions
+wip
diff --git a/src/docs/en-US/features/timeline.md b/src/docs/en-US/features/timeline.md
new file mode 100644
index 0000000000..ed62a44667
--- /dev/null
+++ b/src/docs/en-US/features/timeline.md
@@ -0,0 +1,31 @@
+# Timeline
+タイムラインは、[ノート](./note)が時系列で表示される機能です。 タイムラインには以下で示す種類があり、種類によって表示されるノートも異なります。 なお、タイムラインの種類によってはサーバーにより無効になっている場合があります。
+
+## Home
+自分のフォローしているユーザーの投稿が流れます。HTLと略されます。
+
+## Local
+全てのローカルユーザーの「ホーム」指定されていない投稿が流れます。LTLと略されます。
+
+## Social
+自分のフォローしているユーザーの投稿と、全てのローカルユーザーの「ホーム」指定されていない投稿が流れます。STLと略されます。
+
+## Global
+全てのローカルユーザーの「ホーム」指定されていない投稿と、サーバーに届いた全てのリモートユーザーの「ホーム」指定されていない投稿が流れます。GTLと略されます。
+
+## Comparison
+| ソース          |             |      | Timeline |        |        |
+| ------------ | ----------- | ---- | -------- | ------ | ------ |
+| Users        | Visiblility | Home | Local    | Social | Global |
+| ローカル (フォロー)  | Publish     | ✔    | ✔        | ✔      | ✔      |
+|              | Home        | ✔    |          | ✔      |        |
+|              | Followers   | ✔    | ✔        | ✔      | ✔      |
+| リモート (フォロー)  | Publish     | ✔    |          | ✔      | ✔      |
+|              | Home        | ✔    |          | ✔      |        |
+|              | Followers   | ✔    |          | ✔      | ✔      |
+| ローカル (未フォロー) | Publish     |      | ✔        | ✔      | ✔      |
+|              | Home        |      |          |        |        |
+|              | Followers   |      |          |        |        |
+| リモート (未フォロー) | Publish     |      |          |        | ✔      |
+|              | Home        |      |          |        |        |
+|              | Followers   |      |          |        |        |
diff --git a/src/docs/en-US/features/widgets.md b/src/docs/en-US/features/widgets.md
new file mode 100644
index 0000000000..7c5cacb39a
--- /dev/null
+++ b/src/docs/en-US/features/widgets.md
@@ -0,0 +1,7 @@
+# Widgets
+ウィジェットは、MisskeyのUI上に設置できる小型の情報表示、操作が行えるパーツです。
+
+ウィジェットを編集するには、ウィジェット編集モードに切り替えます。切り替え方法はUIによって異なります。 ウィジェット編集モードでは、ウィジェットの追加、削除、並び替え、およびそれぞれのウィジェットの設定を行えます。
+
+## 利用可能なウィジェット一覧
+todo
diff --git a/src/docs/en-US/general/apps.md b/src/docs/en-US/general/apps.md
new file mode 100644
index 0000000000..1f4c85fe8f
--- /dev/null
+++ b/src/docs/en-US/general/apps.md
@@ -0,0 +1,6 @@
+# サードパーティアプリのリスト
+## クライアント
+todo
+
+## 連携サービス
+todo
diff --git a/src/docs/en-US/general/faq.md b/src/docs/en-US/general/faq.md
new file mode 100644
index 0000000000..ecb664e32e
--- /dev/null
+++ b/src/docs/en-US/general/faq.md
@@ -0,0 +1,22 @@
+# よくある質問
+ここでは利用上のよくある質問について掲載しています。 Misskeyのプロジェクト自体についてのよくある質問は[こちら](./misskey)に掲載されています。
+
+### iOS/Androidのアプリはありますか?
+公式にはそういったOSのネイティブアプリを開発していませんが、サードパーティ製のアプリがいくつかあります。 詳しくは[こちら](./apps)をご覧ください。
+
+ただ、サードパーティ製アプリはどうしても機能への対応が遅れてしまうため、とくに拘りがなければ公式のWebクライアントの利用をおすすめします。 なお、MisskeyのWebクライアントはPWAに対応しているので、ネイティブアプリのように動作させることも可能です。 詳しくは[こちら](todo)をご覧ください。
+
+## 他のサーバーのユーザーをフォローするときは?
+メニューから検索を選び、ユーザー名をホスト込みで入力します。例: `@syuilo@misskey.io`
+
+## Renoteを削除するには?
+Renoteの時刻表示の隣にある「...」を押し、「Renote解除」を選択します。 Renoteについては[こちら](../features/note)をご確認ください。
+
+## URLのプレビューを表示させたくない
+MFMには、そのURLのプレビューを無効にする構文があります。詳細は[MFMチートシート](/mfm-cheat-sheet)をご確認ください。
+
+## カスタム絵文字を追加したい
+運営者のみがカスタム絵文字を追加、編集、削除できます。それらを希望する場合は運営者に依頼してください。
+
+## Botを開発したい
+Misskey APIを利用してBotの開発が可能です。[こちら](../advanced/develop-bot)をご確認ください。
diff --git a/src/docs/en-US/general/glossary.md b/src/docs/en-US/general/glossary.md
new file mode 100644
index 0000000000..91d01e1c80
--- /dev/null
+++ b/src/docs/en-US/general/glossary.md
@@ -0,0 +1,83 @@
+# 用語集
+Misskeyに関する用語集です。
+
+## AcitivityPub
+(読み: あくてぃびてぃぱぶ) 分散型を実現するために用いられるプロトコル(仕様)。このプロトコルに則ってサーバー同士通信を行うことで、連合が行われ、Fediverseを形成しています。
+
+## AiScript
+(読み: あいすくりぷと) Misskey上で使用できるプログラミング言語です。詳細は[こちら。](../advanced/aiscript)
+
+## API
+(読み: えーぴーあい) Misskeyのサーバーが公開している、プログラムからMisskeyを扱うためのインターフェース。詳細は[こちら。](../advanced/api)
+
+## Bot
+(読み: ぼっと) プログラムによって動作しているアカウント。
+
+## CW
+(読み: こんてんつわーにんぐ) Contents Warningの略。ノートの内容を、操作なしには表示しないようにできる機能。主に長大な内容を隠すためや、ネタバレ防止などに使われます。
+
+## Fediverse
+(読み: ふぇでぃばーす) Misskeyを含む様々な分散型ソフトウェアのサーバーで構成されたネットワーク。
+
+## GTL
+グローバルタイムライン(Global TimeLine)の略。タイムラインの詳細は[こちら。](../features/timeline)
+
+## HTL
+ホームタイムライン(Home TimeLine)の略。タイムラインの詳細は[こちら。](../features/timeline)
+
+## LTL
+ローカルタイムライン(Local TimeLine)の略。タイムラインの詳細は[こちら。](../features/timeline)
+
+## MFM
+(読み: えむえふえむ) Misskey Flavored Markdownの略で、Misskey上で使用できるマークアップ言語です。詳細は[こちら。](../features/mfm)
+
+## NSFW
+(読み: のっとせーふふぉーわーく) Not Safe For Workの略。画像を「閲覧注意」扱いにし、操作なしには表示しないようにすることができる機能。
+
+## Renote
+(読み: りのーと) 既にあるノートを引用、もしくはそのノートを新しいノートとして共有する行為、またそれによって作成されたノート。詳細は[こちら。](../features/note)
+
+## STL
+ソーシャルタイムライン(Social TimeLine)の略。タイムラインの詳細は[こちら。](../features/timeline)
+
+## 藍
+(読み: あい) Misskeyの看板娘(公式キャラクター)です。
+
+## アクティブユーザー
+インスタンスにアカウントを作っているユーザーのうち、現在も実際にサービスを利用しているユーザーのこと。
+
+## Instance
+todo
+
+## コントロールパネル
+インスタンスの設定画面のこと。
+
+## Server
+todo
+
+## Silence
+ノートをパブリックな公開範囲で投稿できなくされている状態。モデレーターの判断でユーザーごとに設定されます。詳細は[こちら。](../features/silence)
+
+## Suspend
+アカウントが使用不可に設定されている状態。
+
+## Drive
+Misskeyにアップロードしたファイルを管理する機能。詳細は[こちら。](../features/drive)
+
+## Notes
+Misskeyに投稿される、文章、ファイル、アンケートなどを含めることができるコンテンツ。詳細は[こちら。](../features/note)
+
+## ミスキスト
+Misskeyを使う人のこと。
+
+## Moderator
+スパムの凍結およびサイレンスや不適切な投稿の削除など、コミュニティ運営に関する権限を持つユーザー。
+
+## Remote
+他サーバーのことを指します。リモートユーザーといったように接頭辞としても使われます。ローカルの逆です。
+
+## Federation
+サーバー上で作成された情報が他のサーバーに伝わること。
+
+## Local
+自サーバーのことを指します。ローカルユーザー、ローカルタイムラインといったように接頭辞としても使われます。リモートの逆です。
diff --git a/src/docs/en-US/general/links.md b/src/docs/en-US/general/links.md
new file mode 100644
index 0000000000..d6b16856fb
--- /dev/null
+++ b/src/docs/en-US/general/links.md
@@ -0,0 +1,5 @@
+# リンク集
+
+## ライブラリ
+- [misskey-dev/misskey.js](https://github.com/misskey-dev/misskey.js) - JavaScriptのMisskey SDK
+- [misskey-dev/mfm.js](https://github.com/misskey-dev/mfm.js) - JavaScriptのMFMパーサー実装
diff --git a/src/docs/en-US/general/misskey.md b/src/docs/en-US/general/misskey.md
new file mode 100644
index 0000000000..0e09e008fc
--- /dev/null
+++ b/src/docs/en-US/general/misskey.md
@@ -0,0 +1,87 @@
+# About Misskey
+
+Misskeyはオープンソースの分散型マイクロブログプラットフォームプロジェクトです。 開発は日本でsyuiloによって2014年から開始されました。 ドライブ、リアクションなどの豊富な機能や、高いカスタマイズ性を備えたUIを持つことが特徴です。
+
+## 歴史
+開発当初は掲示板がメインのサービスでしたが、ユーザーが短文を投稿し、それを時系列で流れるタイムライン機能を追加したところ人気が高まり、徐々にそれがメインとして開発が進むようになりました。 当初は分散型ではありませんでしたが、2018年にAcitivityPubを実装し分散型になったことで、より多くの方に認知され利用されるサービスになり、現在に至ります。
+<div class="info">ℹ️ Misskeyという名前は、syuiloが当時聴いていたMay'nというアーティストの楽曲、Brain Diverの歌詞に由来します。</div>
+
+誰でも開発に参加することができ、現在でも活発に開発が続いています。
+
+## 分散型とは何か?
+
+<b>分散(distributed)型</b>とは、<b>非中央集権(decentralized)</b>とも呼ばれ、コミュニティが多数のサーバーに分散して存在し、それらが相互に<b>通信(連合、federation)</b>することでコンテンツ共有<b>ネットワーク(Fediverse)</b>を形成していることが特徴のサービスです。 単一のサーバーしか存在しない、もしくは複数存在しても互いに独立している場合は中央集権なサービスと言われ、例えばTwitterやFacebookなどほとんどのサービスがそれに該当します。 分散型のメリットは、自分に合った運営者やテーマのサーバーを選択できることです。自分でサーバーを作成することもできます。連合するおかげで、どのサーバーを選んでも、同じコミュニティにアクセスできます。
+
+## 常にオープンソース
+Misskeyはこれまでもこれからも、オープンソースであり続けます。オープンソースとは、簡単に言うと<b>ソフトウェアのソースコード(プログラム)が公開されている</b>ことです。ソースコードの修正や再配布が可能であることを定義に含めることもあります。 Misskeyのすべてのソースコードは[AGPL](https://github.com/misskey-dev/misskey/blob/develop/LICENSE)というオープンソースライセンスの下に[公開](https://github.com/misskey-dev)されていて、誰でも自由に閲覧、使用、修正、改変、再配布をすることができます。 オープンソースは、自分で好きなように変えたり、有害な処理が含まれていないことを確認することができたり、誰でも開発に参加できるなどの、様々なメリットがあります。 上述の分散型を実現するためにも、オープンソースであるということは必要不可欠な要素です。 再び引き合いに出しますが、TwitterやFacebookなどの利益を得ているほとんどのサービスはオープンソースではありません。
+
+<div class="info">ℹ️ 技術的に言うと、MisskeyのソースコードはGitで管理されていて、リポジトリは<a href="https://github.com/misskey-dev" target="_blank">GitHub上でホスティングされています。</a></div>
+
+## 開発に参加する、プロジェクトを支援する
+Misskeyを気に入っていただけたら、ぜひプロジェクトを支援してください。プロジェクトに貢献するには、以下で紹介するようにいろいろな方法があります。方法によっては開発のスキルは不要なので、誰でも気軽に参加し貢献することができます。いつでもお待ちしています。
+
+### 機能を追加したり、バグを修正する
+ソフトウェアエンジニアのスキルをお持ちの方であれば、ソースコードを編集する形でプロジェクトに貢献することができます。 貢献についてのガイドは[こちら](https://github.com/misskey-dev/misskey/blob/develop/CONTRIBUTING.md)です。
+
+### 議論に参加する
+新しい機能、または既存の機能について意見を述べたり、不具合を報告したりすることでも貢献できます。 そのようなディスカッションは[GitHub](https://github.com/misskey-dev)上か、[フォーラム](https://forum.misskey.io/)等で行われます。
+
+### テキストを翻訳する
+Misskeyは様々な言語に対応しています(i18n -internationalizationの略- と呼ばれます)。元の言語は基本的に日本語ですが、有志によって他の言語へと翻訳されています。 その翻訳作業に加わっていただくことでもMisskeyに貢献できます。 Misskeyは[Crowdinというサービスを使用して翻訳の管理を行っています。](https://crowdin.com/project/misskey)
+
+### 感想を投稿する
+不具合報告等だけではなく、Misskeyの良い点、楽しい点といったポジティブな意見もぜひ共有してください。開発の励みになり、それは間接的ですがプロジェクトへの貢献です。
+
+### ミスキストを増やす
+ミスキストとは、Misskeyを使用する人のことです。 知り合いに紹介するなどしてMisskeyを広めていただければ、ミスキストが増え開発のモチベーションが上がります。
+
+### 寄付をする
+Misskeyはビジネスではなく、利用は無料であるため、収益は皆様からの寄付のみです。(インスタンスによっては広告収入を得ているような場合もありますが、それは運営者の収入であり直接開発者への収入にはなりません) 寄付をしていただければ、今後も開発を続けることが可能になり、プロジェクトへの貢献になります。 寄付は基本的には[Patreon](https://www.patreon.com/syuilo)で受け付けています。 一定額寄付していただけると、Misskeyの[情報ページ](/about-misskey)に名前を記載することができます。
+
+また、サーバーの運営者も、基本的には収益を得ていません。サーバーの運営にはコストがかかるので、運営者の支援をすることもご検討ください。 開発には直接関係しませんが、サーバーがあってこそのプロジェクトなので、運営が維持されるというのは開発と同じくらい重要なことです。
+
+## クレジット
+Misskeyの開発者や、Misskeyに寄付をしてくださった方の一覧は[こちら](/about-misskey)で見ることができます。
+
+## よくある質問
+### プロジェクトは何を目指していますか?
+強いて言うと、漠然的になりますが広く使われる汎用的なプラットフォームになることを目指しています。 Misskeyは他のプロジェクトとは違い、何らかの思想(例えば、反中央集権)やビジョンに基づいて開発が行われているわけではなく、その点ではフラットです。 それが逆に、特定の方向性に縛られないフレキシブルさを生み出すことに繋がっていると感じています。
+<!-- TODO: ここにロードマップへのリンク -->
+
+### 企業によって開発されていますか?
+いいえ。Misskeyの開発は個人で行われており、商業的でもないため、特定の企業の関りはありません。 開発メンバーも基本的にはボランティアです。 また、開発に対し企業のスポンサーがつくこともありますが、その場合でもやはり開発は個人のコミュニティが主体です。
+
+### 誰が運営していますか?
+Misskeyは分散型なため、各サーバーにそれぞれ異なった運営者がいます。従って、特定の個人や企業によって、Misskeyの全てが運営されているわけではありません。 また、開発チームが運営を行うわけでもないため、運営に関する連絡は、お使いのサーバーの運営者に行ってください。 サーバーの運営者は、[このページ](/about)で確認することができます。 あなたがサーバーを作成すれば、あなたが運営者になります。
+
+### どのサーバーを選べばいいですか?
+[サーバー一覧が公開されています。](https://join.misskey.page/ja-JP/instances) サーバーによってコミュニティのテーマ(特定のこと、ものが好き 等)が決められている場合があるので、自分に合ったテーマのサーバーがあれば、そこを選ぶと良いかもしれません。 他にも、サーバーの規模、ユーザー層、国および言語、運営者が信頼できるかどうか、などの観点があります。 なお、Misskey公式のサーバーというものはありません。自身で新しくサーバーを作成するという選択肢もあります。
+
+基本的にどのサーバーを選んだとしても、他の全てのサーバーのユーザーと繋がることができます。
+
+### サーバーを建てるにはどうしたらいいですか?
+Misskeyサーバーの作成に興味を持っていただきありがとうございます。 2021年現在、Misskeyのホスティングサービスは存在しないため、サーバーの作成にはある程度の知識が必要です。 サーバーの作成方法については[こちら](todo)をご覧ください。
+
+### どのような技術を使用していますか?
+Misskeyは開発が進むにつれ使用する技術も大きく変わってきました。開発当初はMySQL + PHP + jQueryといった構成でしたが、現在は以下のようになっています。
+- サーバーサイド: Node.js
+- データベース: PostgreSQL、Redis
+- UIフレームワーク: Vue.js
+- プログラミング言語: TypeScript
+
+また、MFMやAiScriptなどの、Misskeyから派生して独自の技術も開発しています。
+
+### Mastodonのフォークですか?
+いいえ。MisskeyはMastodonやその他のプロジェクトとは全く別のプロジェクトです。 開発に関しても、Misskeyの方が昔から開発されています。ただし、分散型になったのはMastodonの登場より後です。 同じAcitivityPubという分散のためのプロトコルを実装しているという点以外、両者に特に関りがあるわけでもありません。
+
+### iOS/Androidのアプリはありますか?
+公式にはそういったOSのネイティブアプリを開発していませんが、サードパーティ製のアプリがいくつかあります。 詳しくは[こちら](./apps)をご覧ください。
+
+ただ、サードパーティ製アプリはどうしても機能への対応が遅れてしまうため、とくに拘りがなければ公式のWebクライアントの利用をおすすめします。 なお、MisskeyのWebクライアントはPWAに対応しているので、ネイティブアプリのように動作させることも可能です。 詳しくは[こちら](todo)をご覧ください。
+
+### Misskeyのロゴ、アイコンはどこで入手できますか?
+(準備中)
+
+### 時折目にする猫耳の可愛い女の子は?
+Misskeyの守り神、藍ちゃんです。アイチャンカワイイヤッター!
+<div class="info">ℹ️ 藍ちゃんについては<a href="https://xn--931a.moe/" target="_blank">こちら</a>です。</div>
diff --git a/src/docs/en-US/general/report-issue.md b/src/docs/en-US/general/report-issue.md
new file mode 100644
index 0000000000..63527e32af
--- /dev/null
+++ b/src/docs/en-US/general/report-issue.md
@@ -0,0 +1,8 @@
+# 不具合の報告
+不具合と思われる状況に遭遇したときは、まず[トラブルシューティング](./troubleshooting)をご一読ください。 それでも問題が解決しないときは、以下の情報を含めて[フォーラム](https://forum.misskey.io/)に投稿してください。 投稿することで、解決策が見つかったり、不具合と判断されれば開発チームによって修正が行われます。
+
+## 含める情報
+- Misskeyのバージョン([情報ページ](/about)で確認できます)
+- お使いのブラウザの種類とバージョン
+- お使いのOSの種類とバージョン
+- 問題の再現手順
diff --git a/src/docs/en-US/general/troubleshooting.md b/src/docs/en-US/general/troubleshooting.md
new file mode 100644
index 0000000000..8d1d8b7ace
--- /dev/null
+++ b/src/docs/en-US/general/troubleshooting.md
@@ -0,0 +1,36 @@
+# Troubleshooting
+<div class="info">ℹ️ <a href="./faq">よくある質問</a>も合わせてお役立てください。</div>
+
+問題が発生したときは、まずこちらをご確認ください。 該当する項目が無い、もしくは手順を試しても効果がない場合は、サーバーの管理者に連絡するか[不具合を報告](./report-issue)してください。
+
+## クライアントが起動しない
+ほとんどの場合、お使いのブラウザまたはOSのバージョンが古いことが原因です。 ブラウザおよびOSのバージョンを最新のものに更新してから、再度試してみてください。
+
+これは稀ですが、それでも起動しない場合は、キャッシュが原因の場合があります。ブラウザのキャッシュをクリアして、再度試してみてください。
+
+## ページが読み込めない
+クライアントが起動するもののページが読み込めないというエラーが出る場合は、ネットワークに問題がないか確認してください。また、サーバーがダウンしていないか確認してください。
+
+これは稀ですが、キャッシュが原因の場合があります。ブラウザのキャッシュをクリアして、再度試してみてください。
+
+まだ問題がある場合は、サーバーの問題と思われるのでサーバーの管理者に連絡してください。
+
+## クライアントの動作が遅い
+以下を試してみてください:
+
+- クライアント設定で「UIのアニメーションを減らす」を有効にする
+- クライアント設定で「モーダルにぼかし効果を使用」を無効にする
+- お使いのブラウザの設定でハードウェアアクセラレーションを有効にする
+- お使いのデバイスのスペックを上げる
+
+## 通知やアンテナ等の点滅が消えない
+点滅は、未読のコンテンツがあることを示しています。通常点滅が消えない場合は、コンテンツを遡ると未読なコンテンツが残っています。 すべて既読にしたと思われるのに、それでもなお点滅が続く場合(おそらく不具合と思われます)は設定から強制的にすべて既読扱いにすることができます。
+
+## Renoteができない
+フォロワー限定のノートはRenoteすることはできません。
+
+## UI上で特定の要素が表示されない
+広告ブロッカーを使用しているとそのような不具合が発生することがあります。Misskeyではオフにしてご利用ください。
+
+## UI上で未翻訳の部分がある
+ほとんどの場合、単に翻訳が間に合っていないだけで、不具合ではありません。翻訳が終わるまでお待ちください。 [翻訳に参加](./misskey)していただくことも可能です。
diff --git a/src/docs/eo-UY/admin/disable-timelines.md b/src/docs/eo-UY/admin/disable-timelines.md
new file mode 100644
index 0000000000..b081e35ab0
--- /dev/null
+++ b/src/docs/eo-UY/admin/disable-timelines.md
@@ -0,0 +1,8 @@
+# LTL/STL/GTLの無効化
+Misskeyでは、LTL/STL/GTLをそれぞれ無効化することができます。有効/無効を切り替えるには、インスタンスコントロールパネルで設定します。
+
+LTLやSTLは、そのインスタンス全員の投稿が見れるため、新規のユーザーにとってはユーザーを探す必要がなくなり、興味のあるユーザーを見つけやすいという利点があります。 しかし同時に、フォロー機能が活用されなくなったり、不適切な投稿が目につきやすくなったり、チャットのようになることで内輪感が生じて逆に新規ユーザーが参加しにくくなるといったデメリットも持ち合わせています。 サーバーによってメリット/デメリットどちらが優勢かは異なるので、オプションとして無効にできるようになっています。 もしデメリットの方が上回っていると感じたら、それらのタイムラインを無効化することも検討してください。
+
+<div class="warn">⚠️ 無効化を行うと、ユーザーが困惑し、短期的に見て利用者が減る可能性があります。そのため、無効化の際は影響を慎重に検討し、事前に説明してフォローを整える期間を一定程度設けることを推奨します。</div>
+
+なお、管理者/モデレーターは、これらのタイムラインの無効化状態は適用されず、引き続き利用することが可能です。
diff --git a/src/docs/eo-UY/admin/faq.md b/src/docs/eo-UY/admin/faq.md
new file mode 100644
index 0000000000..317b4e0655
--- /dev/null
+++ b/src/docs/eo-UY/admin/faq.md
@@ -0,0 +1,5 @@
+# よくある質問
+ここでは、サーバー管理者向けのよくある質問を掲載しています。
+
+## デフォルトテーマを設定したい
+現在、デフォルトテーマ設定機能は実装されていません。
diff --git a/src/docs/eo-UY/advanced/aiscript.md b/src/docs/eo-UY/advanced/aiscript.md
new file mode 100644
index 0000000000..604d17daa8
--- /dev/null
+++ b/src/docs/eo-UY/advanced/aiscript.md
@@ -0,0 +1,7 @@
+# AiScript
+AiScriptは、Misskeyで使用できるスクリプト言語です。
+
+<div class="info">ℹ️ AiScript実装はMisskeyとは別リポジトリで、<a href="https://github.com/syuilo/aiscript" target="_blank">オープンソースで公開されています。</a></div>
+
+## 使い方
+AiScriptの構文や組み込み関数などのドキュメントは、[こちら](https://github.com/syuilo/aiscript/tree/master/docs)で公開されています。
diff --git a/src/docs/eo-UY/advanced/api.md b/src/docs/eo-UY/advanced/api.md
new file mode 100644
index 0000000000..76019b6145
--- /dev/null
+++ b/src/docs/eo-UY/advanced/api.md
@@ -0,0 +1,58 @@
+# Misskey API
+
+MisskeyAPIを使ってMisskeyクライアント、Misskey連携Webサービス、Bot等(以下「アプリケーション」と呼びます)を開発できます。 ストリーミングAPIもあるので、リアルタイム性のあるアプリケーションを作ることも可能です。
+
+APIを使い始めるには、まずアクセストークンを取得する必要があります。 このドキュメントでは、アクセストークンを取得する手順を説明した後、基本的なAPIの使い方を説明します。
+
+## アクセストークンの取得
+基本的に、APIはリクエストにはアクセストークンが必要となります。 APIにリクエストするのが自分自身なのか、不特定の利用者に使ってもらうアプリケーションなのかによって取得手順は異なります。
+
+* 前者の場合: [「自分自身のアクセストークンを手動発行する」](#自分自身のアクセストークンを手動発行する)に進む
+* 後者の場合: [「アプリケーション利用者にアクセストークンの発行をリクエストする」](#アプリケーション利用者にアクセストークンの発行をリクエストする)に進む
+
+### 自分自身のアクセストークンを手動発行する
+「設定 > API」で、自分のアクセストークンを発行できます。
+
+[「APIの使い方」へ進む](#APIの使い方)
+
+### アプリケーション利用者にアクセストークンの発行をリクエストする
+アプリケーション利用者のアクセストークンを取得するには、以下の手順で発行をリクエストします。
+
+#### Step 1
+
+UUIDを生成する。以後これをセッションIDと呼びます。
+
+> このセッションIDは毎回生成し、使いまわさないようにしてください。
+
+#### Step 2
+
+`{_URL_}/miauth/{session}`をユーザーのブラウザで表示させる。`{session}`の部分は、セッションIDに置き換えてください。
+> 例: `{_URL_}/miauth/c1f6d42b-468b-4fd2-8274-e58abdedef6f`
+
+表示する際、URLにクエリパラメータとしていくつかのオプションを設定できます:
+* `name` ... アプリケーション名
+    * > 例: `MissDeck`
+* `icon` ... アプリケーションのアイコン画像URL
+    * > 例: `https://missdeck.example.com/icon.png`
+* `callback` ... 認証が終わった後にリダイレクトするURL
+    * > 例: `https://missdeck.example.com/callback`
+    * リダイレクト時には、`session`というクエリパラメータでセッションIDが付きます
+* `permission` ... アプリケーションが要求する権限
+    * > 例: `write:notes,write:following,read:drive`
+    * 要求する権限を`,`で区切って列挙します
+    * どのような権限があるかは[APIリファレンス](/api-doc)で確認できます
+
+#### Step 3
+ユーザーが発行を許可した後、`{_URL_}/api/miauth/{session}/check`にPOSTリクエストすると、レスポンスとしてアクセストークンを含むJSONが返ります。
+
+レスポンスに含まれるプロパティ:
+* `token` ... ユーザーのアクセストークン
+* `user` ... ユーザーの情報
+
+[「APIの使い方」へ進む](#APIの使い方)
+
+## APIの使い方
+**APIはすべてPOSTで、リクエスト/レスポンスともにJSON形式です。RESTではありません。** アクセストークンは、`i`というパラメータ名でリクエストに含めます。
+
+* [APIリファレンス](/api-doc)
+* [ストリーミングAPI](./stream)
diff --git a/src/docs/eo-UY/advanced/create-plugin.md b/src/docs/eo-UY/advanced/create-plugin.md
new file mode 100644
index 0000000000..0d2fa19178
--- /dev/null
+++ b/src/docs/eo-UY/advanced/create-plugin.md
@@ -0,0 +1,74 @@
+# プラグインの作成
+Misskey Webクライアントのプラグイン機能を使うと、クライアントを拡張し、様々な機能を追加できます。 ここではプラグインの作成にあたってのメタデータ定義や、AiScript APIリファレンスを掲載します。
+
+## メタデータ
+プラグインは、AiScriptのメタデータ埋め込み機能を使って、デフォルトとしてプラグインのメタデータを定義する必要があります。 メタデータは次のプロパティを含むオブジェクトです。
+
+### name
+プラグイン名
+
+### author
+プラグイン作者
+
+### version
+プラグインバージョン。数値を指定してください。
+
+### description
+プラグインの説明
+
+### permissions
+プラグインが要求する権限。MisskeyAPIにリクエストする際に用いられます。
+
+### config
+プラグインの設定情報を表すオブジェクト。 キーに設定名、値に以下のプロパティを含めます。
+
+#### type
+設定値の種類を表す文字列。以下から選択します。 string number boolean
+
+#### label
+ユーザーに表示する設定名
+
+#### description
+設定の説明
+
+#### default
+設定のデフォルト値
+
+## APIリファレンス
+AiScript標準で組み込まれているAPIは掲載しません。
+
+### Mk:dialog(title text type)
+ダイアログを表示します。typeには以下の値が設定できます。 info success warn error question 省略すると info になります。
+
+### Mk:confirm(title text type)
+確認ダイアログを表示します。typeには以下の値が設定できます。 info success warn error question 省略すると question になります。 ユーザーが"OK"を選択した場合は true を、"キャンセル"を選択した場合は false が返ります。
+
+### Mk:api(endpoint params)
+Misskey APIにリクエストします。第一引数にエンドポイント名、第二引数にパラメータオブジェクトを渡します。
+
+### Mk:save(key value)
+任意の値に任意の名前を付けて永続化します。永続化した値は、AiScriptコンテキストが終了しても残り、Mk:loadで読み取ることができます。
+
+### Mk:load(key)
+Mk:saveで永続化した指定の名前の値を読み取ります。
+
+### Plugin:register_post_form_action(title fn)
+投稿フォームにアクションを追加します。第一引数にアクション名、第二引数にアクションが選択された際のコールバック関数を渡します。 コールバック関数には、第一引数に投稿フォームオブジェクトが渡されます。
+
+### Plugin:register_note_action(title fn)
+ノートメニューに項目を追加します。第一引数に項目名、第二引数に項目が選択された際のコールバック関数を渡します。 コールバック関数には、第一引数に対象のノートオブジェクトが渡されます。
+
+### Plugin:register_user_action(title fn)
+ユーザーメニューに項目を追加します。第一引数に項目名、第二引数に項目が選択された際のコールバック関数を渡します。 コールバック関数には、第一引数に対象のユーザーオブジェクトが渡されます。
+
+### Plugin:register_note_view_interruptor(fn)
+UIに表示されるノート情報を書き換えます。 コールバック関数には、第一引数に対象のノートオブジェクトが渡されます。 コールバック関数の返り値でノートが書き換えられます。
+
+### Plugin:register_note_post_interruptor(fn)
+ノート投稿時にノート情報を書き換えます。 コールバック関数には、第一引数に対象のノートオブジェクトが渡されます。 コールバック関数の返り値でノートが書き換えられます。
+
+### Plugin:open_url(url)
+第一引数に渡されたURLをブラウザの新しいタブで開きます。
+
+### Plugin:config
+プラグインの設定が格納されるオブジェクト。プラグイン定義のconfigで設定したキーで値が入ります。
diff --git a/src/docs/eo-UY/advanced/develop-bot.md b/src/docs/eo-UY/advanced/develop-bot.md
new file mode 100644
index 0000000000..7f825e9bc4
--- /dev/null
+++ b/src/docs/eo-UY/advanced/develop-bot.md
@@ -0,0 +1,6 @@
+# Botの作成
+[Misskey API](./api)を利用してBotの開発が可能です。 また、いくつかのBot実装が公開されているため、ぜひ参考にしてください。
+
+- [syuilo/ai](https://github.com/syuilo/ai) ... Node.js上で動く、TypeScript製Bot実装
+
+Botを作成したときは、プロフィール設定からBotフラグをオンにしておくことを強くおすすめします。
diff --git a/src/docs/eo-UY/advanced/reversi-bot.md b/src/docs/eo-UY/advanced/reversi-bot.md
new file mode 100644
index 0000000000..7ab2a7212e
--- /dev/null
+++ b/src/docs/eo-UY/advanced/reversi-bot.md
@@ -0,0 +1,160 @@
+# MisskeyリバーシBotの開発
+Misskeyのリバーシ機能に対応したBotの開発方法をここに記します。
+
+1. `games/reversi`ストリームに以下のパラメータを付けて接続する:
+    * `i`: botアカウントのAPIキー
+
+2. 対局への招待が来たら、ストリームから`invited`イベントが流れてくる
+    * イベントの中身に、`parent`という名前で対局へ誘ってきたユーザーの情報が含まれている
+
+3. `games/reversi/match`へ、`user_id`として`parent`の`id`が含まれたリクエストを送信する
+
+4. 上手くいくとゲーム情報が返ってくるので、`games/reversi-game`ストリームへ、以下のパラメータを付けて接続する:
+    * `i`: botアカウントのAPIキー
+    * `game`: `game`の`id`
+
+5. この間、相手がゲームの設定を変更するとその都度`update-settings`イベントが流れてくるので、必要であれば何かしらの処理を行う
+
+6. 設定に満足したら、`{ type: 'accept' }`メッセージをストリームに送信する
+
+7. ゲームが開始すると、`started`イベントが流れてくる
+    * イベントの中身にはゲーム情報が含まれている
+
+8. 石を打つには、ストリームに`{ type: 'set', pos: <位置> }`を送信する(位置の計算方法は後述)
+
+9. 相手または自分が石を打つと、ストリームから`set`イベントが流れてくる
+    * `color`として石の色が含まれている
+    * `pos`として位置情報が含まれている
+
+## 位置の計算法
+8x8のマップを考える場合、各マスの位置(インデックスと呼びます)は次のようになっています:
+```
++--+--+--+--+--+--+--+--+
+| 0| 1| 2| 3| 4| 5| 6| 7|
++--+--+--+--+--+--+--+--+
+| 8| 9|10|11|12|13|14|15|
++--+--+--+--+--+--+--+--+
+|16|17|18|19|20|21|22|23|
+...
+```
+
+### X,Y座標 から インデックス に変換する
+```
+pos = x + (y * mapWidth)
+```
+`mapWidth`は、ゲーム情報の`map`から、次のようにして計算できます:
+```
+mapWidth = map[0].length
+```
+
+### インデックス から X,Y座標 に変換する
+```
+x = pos % mapWidth
+y = Math.floor(pos / mapWidth)
+```
+
+## マップ情報
+マップ情報は、ゲーム情報の`map`に入っています。 文字列の配列になっており、ひとつひとつの文字がマス情報を表しています。 それをもとにマップのデザインを知る事が出来ます:
+* `(スペース)` ... マス無し
+* `-` ... マス
+* `b` ... 初期配置される黒石
+* `w` ... 初期配置される白石
+
+例えば、4*4の次のような単純なマップがあるとします:
+```text
++---+---+---+---+
+|   |   |   |   |
++---+---+---+---+
+|   | ○ | ● |   |
++---+---+---+---+
+|   | ● | ○ |   |
++---+---+---+---+
+|   |   |   |   |
++---+---+---+---+
+```
+
+この場合、マップデータはこのようになります:
+```javascript
+['----', '-wb-', '-bw-', '----']
+```
+
+## ユーザーにフォームを提示して対話可能Botを作成する
+ユーザーとのコミュニケーションを行うため、ゲームの設定画面でユーザーにフォームを提示することができます。 例えば、Botの強さをユーザーが設定できるようにする、といったシナリオが考えられます。
+
+フォームを提示するには、`reversi-game`ストリームに次のメッセージを送信します:
+```javascript
+{
+  type: 'init-form',
+  body: [フォームコントロールの配列]
+}
+```
+
+フォームコントロールの配列については今から説明します。 フォームコントロールは、次のようなオブジェクトです:
+```javascript
+{
+  id: 'switch1',
+  type: 'switch',
+  label: 'Enable hoge',
+  value: false
+}
+```
+`id` ... コントロールのID。 `type` ... コントロールの種類。後述します。 `label` ... コントロールと一緒に表記するテキスト。 `value` ... コントロールのデフォルト値。
+
+### フォームの操作を受け取る
+ユーザーがフォームを操作すると、ストリームから`update-form`イベントが流れてきます。 イベントの中身には、コントロールのIDと、ユーザーが設定した値が含まれています。 例えば、上で示したスイッチをユーザーがオンにしたとすると、次のイベントが流れてきます:
+```javascript
+{
+  id: 'switch1',
+  value: true
+}
+```
+
+### フォームコントロールの種類
+#### スイッチ
+type: `switch` スイッチを表示します。何かの機能をオン/オフさせたい場合に有用です。
+
+##### プロパティ
+`label` ... スイッチに表記するテキスト。
+
+#### ラジオボタン
+type: `radio` ラジオボタンを表示します。選択肢を提示するのに有用です。例えば、Botの強さを設定させるなどです。
+
+##### プロパティ
+`items` ... ラジオボタンの選択肢。例:
+```javascript
+items: [{
+  label: 'å¼±',
+  value: 1
+}, {
+  label: '中',
+  value: 2
+}, {
+  label: 'å¼·',
+  value: 3
+}]
+```
+
+#### スライダー
+type: `slider` スライダーを表示します。
+
+##### プロパティ
+`min` ... スライダーの下限。 `max` ... スライダーの上限。 `step` ... 入力欄で刻むステップ値。
+
+#### テキストボックス
+type: `textbox` テキストボックスを表示します。ユーザーになにか入力させる一般的な用途に利用できます。
+
+## ユーザーにメッセージを表示する
+設定画面でユーザーと対話する、フォーム以外のもうひとつの方法がこれです。ユーザーになにかメッセージを表示することができます。 例えば、ユーザーがBotの対応していないモードやマップを選択したとき、警告を表示するなどです。 メッセージを表示するには、次のメッセージをストリームに送信します:
+```javascript
+{
+  type: 'message',
+  body: {
+    text: 'メッセージ内容',
+    type: 'メッセージの種類'
+  }
+}
+```
+メッセージの種類: `success`, `info`, `warning`, `error`。
+
+## 投了する
+投了をするには、<a href="./api/endpoints/games/reversi/games/surrender">このエンドポイント</a>にリクエストします。
diff --git a/src/docs/eo-UY/advanced/stream.md b/src/docs/eo-UY/advanced/stream.md
new file mode 100644
index 0000000000..932da90f25
--- /dev/null
+++ b/src/docs/eo-UY/advanced/stream.md
@@ -0,0 +1,350 @@
+# ストリーミングAPI
+
+ストリーミングAPIを使うと、リアルタイムで様々な情報(例えばタイムラインに新しい投稿が流れてきた、メッセージが届いた、フォローされた、など)を受け取ったり、様々な操作を行ったりすることができます。
+
+## ストリームに接続する
+
+ストリーミングAPIを利用するには、まずMisskeyサーバーに**websocket**接続する必要があります。
+
+以下のURLに、`i`というパラメータ名で認証情報を含めて、websocket接続してください。例:
+```
+%WS_URL%/streaming?i=xxxxxxxxxxxxxxx
+```
+
+認証情報は、自分のAPIキーや、アプリケーションからストリームに接続する際はユーザーのアクセストークンのことを指します。
+
+<div class="info">ℹ️ 認証情報の取得については、<a href="./api">こちらのドキュメント</a>をご確認ください。</div>
+
+---
+
+認証情報は省略することもできますが、その場合非ログインでの利用ということになり、受信できる情報や可能な操作は限られます。例:
+
+```
+%WS_URL%/streaming
+```
+
+---
+
+ストリームに接続すると、後述するAPI操作や、投稿の購読を行ったりすることができます。 しかしまだこの段階では、例えばタイムラインへの新しい投稿を受信したりすることはできません。 それを行うには、ストリーム上で、後述する**チャンネル**に接続する必要があります。
+
+**ストリームでのやり取りはすべてJSONです。**
+
+## Kanalo
+MisskeyのストリーミングAPIにはチャンネルという概念があります。これは、送受信する情報を分離するための仕組みです。 Misskeyのストリームに接続しただけでは、まだリアルタイムでタイムラインの投稿を受信したりはできません。 ストリーム上でチャンネルに接続することで、様々な情報を受け取ったり情報を送信したりすることができるようになります。
+
+ひとつのストリーム上で、同時に複数のチャンネルに接続することができます。
+
+### チャンネルに接続する
+チャンネルに接続するには、次のようなデータをJSONでストリームに送信します:
+
+```json
+{
+    type: 'connect',
+    body: {
+        channel: 'xxxxxxxx',
+        id: 'foobar',
+        params: {
+            ...
+        }
+    }
+}
+```
+
+ここで、
+* `channel`には接続したいチャンネル名を設定します。チャンネルの種類については後述します。
+* `id`にはそのチャンネルとやり取りするための任意のIDを設定します。ストリームでは様々なメッセージが流れるので、そのメッセージがどのチャンネルからのものなのか識別する必要があるからです。このIDは、UUIDや、乱数のようなもので構いません。
+* `params`はチャンネルに接続する際のパラメータです。チャンネルによって接続時に必要とされるパラメータは異なります。パラメータ不要のチャンネルに接続する際は、このプロパティは省略可能です。
+
+<div class="info">ℹ️ IDはチャンネルごとではなく「チャンネルの接続ごと」です。なぜなら、同じチャンネルに異なるパラメータで複数接続するケースもあるからです。</div>
+
+### チャンネルからのメッセージを受け取る
+例えばタイムラインのチャンネルなら、新しい投稿があった時にメッセージを発します。そのメッセージを受け取ることで、タイムラインに新しい投稿がされたことをリアルタイムで知ることができます。
+
+チャンネルがメッセージを発すると、次のようなデータがJSONでストリームに流れてきます:
+```json
+{
+    type: 'channel',
+    body: {
+        id: 'foobar',
+        type: 'something',
+        body: {
+            some: 'thing'
+        }
+    }
+}
+```
+
+ここで、
+* `id`には前述したそのチャンネルに接続する際に設定したIDが設定されています。これで、このメッセージがどのチャンネルからのものなのか知ることができます。
+* `type`にはメッセージの種類が設定されます。チャンネルによって、どのような種類のメッセージが流れてくるかは異なります。
+* `body`にはメッセージの内容が設定されます。チャンネルによって、どのような内容のメッセージが流れてくるかは異なります。
+
+### チャンネルに向けてメッセージを送信する
+チャンネルによっては、メッセージを受け取るだけでなく、こちらから何かメッセージを送信し、何らかの操作を行える場合があります。
+
+チャンネルにメッセージを送信するには、次のようなデータをJSONでストリームに送信します:
+```json
+{
+    type: 'channel',
+    body: {
+        id: 'foobar',
+        type: 'something',
+        body: {
+            some: 'thing'
+        }
+    }
+}
+```
+
+ここで、
+* `id`には前述したそのチャンネルに接続する際に設定したIDを設定します。これで、このメッセージがどのチャンネルに向けたものなのか識別させることができます。
+* `type`にはメッセージの種類を設定します。チャンネルによって、どのような種類のメッセージを受け付けるかは異なります。
+* `body`にはメッセージの内容を設定します。チャンネルによって、どのような内容のメッセージを受け付けるかは異なります。
+
+### チャンネルから切断する
+チャンネルから切断するには、次のようなデータをJSONでストリームに送信します:
+
+```json
+{
+    type: 'disconnect',
+    body: {
+        id: 'foobar'
+    }
+}
+```
+
+ここで、
+* `id`には前述したそのチャンネルに接続する際に設定したIDを設定します。
+
+## ストリームを経由してAPIリクエストする
+
+ストリームを経由してAPIリクエストすると、HTTPリクエストを発生させずにAPIを利用できます。そのため、コードを簡潔にできたり、パフォーマンスの向上を見込めるかもしれません。
+
+ストリームを経由してAPIリクエストするには、次のようなデータをJSONでストリームに送信します:
+```json
+{
+    type: 'api',
+    body: {
+        id: 'xxxxxxxxxxxxxxxx',
+        endpoint: 'notes/create',
+        data: {
+            text: 'yee haw!'
+        }
+    }
+}
+```
+
+ここで、
+* `id`には、APIのレスポンスを識別するための、APIリクエストごとの一意なIDを設定する必要があります。UUIDや、簡単な乱数のようなもので構いません。
+* `endpoint`には、あなたがリクエストしたいAPIのエンドポイントを指定します。
+* `data`には、エンドポイントのパラメータを含めます。
+
+<div class="info">ℹ️ APIのエンドポイントやパラメータについてはAPIリファレンスをご確認ください。</div>
+
+### レスポンスの受信
+
+APIへリクエストすると、レスポンスがストリームから次のような形式で流れてきます。
+
+```json
+{
+    type: 'api:xxxxxxxxxxxxxxxx',
+    body: {
+        ...
+    }
+}
+```
+
+ここで、
+* `xxxxxxxxxxxxxxxx`の部分には、リクエストの際に設定された`id`が含まれています。これにより、どのリクエストに対するレスポンスなのか判別することができます。
+* `body`には、レスポンスが含まれています。
+
+## 投稿のキャプチャ
+
+Misskeyは投稿のキャプチャと呼ばれる仕組みを提供しています。これは、指定した投稿のイベントをストリームで受け取る機能です。
+
+例えばタイムラインを取得してユーザーに表示したとします。ここで誰かがそのタイムラインに含まれるどれかの投稿に対してリアクションしたとします。
+
+しかし、クライアントからするとある投稿にリアクションが付いたことなどは知る由がないため、リアルタイムでリアクションをタイムライン上の投稿に反映して表示するといったことができません。
+
+この問題を解決するために、Misskeyは投稿のキャプチャ機構を用意しています。投稿をキャプチャすると、その投稿に関するイベントを受け取ることができるため、リアルタイムでリアクションを反映させたりすることが可能になります。
+
+### 投稿をキャプチャする
+
+投稿をキャプチャするには、ストリームに次のようなメッセージを送信します:
+
+```json
+{
+    type: 'subNote',
+    body: {
+        id: 'xxxxxxxxxxxxxxxx'
+    }
+}
+```
+
+ここで、
+* `id`にキャプチャしたい投稿の`id`を設定します。
+
+このメッセージを送信すると、Misskeyにキャプチャを要請したことになり、以後、その投稿に関するイベントが流れてくるようになります。
+
+例えば投稿にリアクションが付いたとすると、次のようなメッセージが流れてきます:
+
+```json
+{
+    type: 'noteUpdated',
+    body: {
+        id: 'xxxxxxxxxxxxxxxx',
+        type: 'reacted',
+        body: {
+            reaction: 'like',
+            userId: 'yyyyyyyyyyyyyyyy'
+        }
+    }
+}
+```
+
+ここで、
+* `body`内の`id`に、イベントを発生させた投稿のIDが設定されます。
+* `body`内の`type`に、イベントの種類が設定されます。
+* `body`内の`body`に、イベントの詳細が設定されます。
+
+#### イベントの種類
+
+##### `reacted`
+その投稿にリアクションがされた時に発生します。
+
+* `reaction`に、リアクションの種類が設定されます。
+* `userId`に、リアクションを行ったユーザーのIDが設定されます。
+
+例:
+```json
+{
+    type: 'noteUpdated',
+    body: {
+        id: 'xxxxxxxxxxxxxxxx',
+        type: 'reacted',
+        body: {
+            reaction: 'like',
+            userId: 'yyyyyyyyyyyyyyyy'
+        }
+    }
+}
+```
+
+##### `deleted`
+その投稿が削除された時に発生します。
+
+* `deletedAt`に、削除日時が設定されます。
+
+例:
+```json
+{
+    type: 'noteUpdated',
+    body: {
+        id: 'xxxxxxxxxxxxxxxx',
+        type: 'deleted',
+        body: {
+            deletedAt: '2018-10-22T02:17:09.703Z'
+        }
+    }
+}
+```
+
+##### `pollVoted`
+その投稿に添付されたアンケートに投票された時に発生します。
+
+* `choice`に、選択肢IDが設定されます。
+* `userId`に、投票を行ったユーザーのIDが設定されます。
+
+例:
+```json
+{
+    type: 'noteUpdated',
+    body: {
+        id: 'xxxxxxxxxxxxxxxx',
+        type: 'pollVoted',
+        body: {
+            choice: 2,
+            userId: 'yyyyyyyyyyyyyyyy'
+        }
+    }
+}
+```
+
+### 投稿のキャプチャを解除する
+
+その投稿がもう画面に表示されなくなったりして、その投稿に関するイベントをもう受け取る必要がなくなったときは、キャプチャの解除を申請してください。
+
+次のメッセージを送信します:
+
+```json
+{
+    type: 'unsubNote',
+    body: {
+        id: 'xxxxxxxxxxxxxxxx'
+    }
+}
+```
+
+ここで、
+* `id`にキャプチャを解除したい投稿の`id`を設定します。
+
+このメッセージを送信すると、以後、その投稿に関するイベントは流れてこないようになります。
+
+# チャンネル一覧
+## `main`
+アカウントに関する基本的な情報が流れてきます。このチャンネルにパラメータはありません。
+
+### 流れてくるイベント一覧
+
+#### `renote`
+自分の投稿がRenoteされた時に発生するイベントです。自分自身の投稿をRenoteしたときは発生しません。
+
+#### `mention`
+誰かからメンションされたときに発生するイベントです。
+
+#### `readAllNotifications`
+自分宛ての通知がすべて既読になったことを表すイベントです。このイベントを利用して、「通知があることを示すアイコン」のようなものをオフにしたりする等のケースが想定されます。
+
+#### `meUpdated`
+自分の情報が更新されたことを表すイベントです。
+
+#### `follow`
+自分が誰かをフォローしたときに発生するイベントです。
+
+#### `unfollow`
+自分が誰かのフォローを解除したときに発生するイベントです。
+
+#### `followed`
+自分が誰かにフォローされたときに発生するイベントです。
+
+## `homeTimeline`
+ホームタイムラインの投稿情報が流れてきます。このチャンネルにパラメータはありません。
+
+### 流れてくるイベント一覧
+
+#### `note`
+タイムラインに新しい投稿が流れてきたときに発生するイベントです。
+
+## `localTimeline`
+ローカルタイムラインの投稿情報が流れてきます。このチャンネルにパラメータはありません。
+
+### 流れてくるイベント一覧
+
+#### `note`
+ローカルタイムラインに新しい投稿が流れてきたときに発生するイベントです。
+
+## `hybridTimeline`
+ソーシャルタイムラインの投稿情報が流れてきます。このチャンネルにパラメータはありません。
+
+### 流れてくるイベント一覧
+
+#### `note`
+ソーシャルタイムラインに新しい投稿が流れてきたときに発生するイベントです。
+
+## `globalTimeline`
+グローバルタイムラインの投稿情報が流れてきます。このチャンネルにパラメータはありません。
+
+### 流れてくるイベント一覧
+
+#### `note`
+グローバルタイムラインに新しい投稿が流れてきたときに発生するイベントです。
diff --git a/src/docs/eo-UY/features/antenna.md b/src/docs/eo-UY/features/antenna.md
new file mode 100644
index 0000000000..94ad9e4aea
--- /dev/null
+++ b/src/docs/eo-UY/features/antenna.md
@@ -0,0 +1,4 @@
+# アンテナ
+アンテナは、自由に条件を設定して、合致するノートを自動で収集することができる機能です。
+
+条件を設定したアンテナが作成された状態で、条件に合致するノートが投稿されると、リアルタイムでそのアンテナのタイムラインにノートが追加されます。
diff --git a/src/docs/eo-UY/features/custom-emoji.md b/src/docs/eo-UY/features/custom-emoji.md
new file mode 100644
index 0000000000..ab8c6c7f12
--- /dev/null
+++ b/src/docs/eo-UY/features/custom-emoji.md
@@ -0,0 +1,2 @@
+# Personecigitaj emoĵioj
+カスタム絵文字は、インスタンスで用意された画像を絵文字のように使える機能です。 ノート、リアクション、チャット、自己紹介、名前などの場所で使うことができます。 カスタム絵文字をそれらの場所で使うには、絵文字ピッカーボタン(ある場合)を押すか、`:`を入力して絵文字サジェストを表示します。 テキスト内に`:foo:`のような形式の文字列が見つかると、`foo`の部分がカスタム絵文字名と解釈され、表示時には対応したカスタム絵文字に置き換わります。
diff --git a/src/docs/eo-UY/features/deck.md b/src/docs/eo-UY/features/deck.md
new file mode 100644
index 0000000000..8057e262fd
--- /dev/null
+++ b/src/docs/eo-UY/features/deck.md
@@ -0,0 +1,18 @@
+# デッキ
+
+デッキは利用可能なUIのひとつです。「カラム」と呼ばれるビューを複数並べて表示させることで、カスタマイズ性が高く、情報量の多いUIが構築できることが特徴です。
+
+## カラムの追加
+デッキの背景を右クリックし、「カラムを追加」して任意のカラムを追加できます。
+
+## カラムの移動
+カラムは、ドラッグアンドドロップで他のカラムと位置を入れ替えることが出来るほか、カラムメニュー(カラムのヘッダー右クリック)から位置を移動させることもできます。
+
+## カラムの水平分割
+カラムは左右だけでなく、上下に並べることもできます。 カラムメニューを開き、「左に重ねる」を選択すると、左のカラムの下に現在のカラムが移動します。 上下分割を解除するには、カラムメニューの「右に出す」を選択します。
+
+## カラムの設定
+カラムメニューの「編集」を選択するとカラムの設定を編集できます。カラムの名前を変えたり、幅を変えたりできます。
+
+## デッキの設定
+デッキに関する設定は、[settings/deck](/settings/deck)で行えます。
diff --git a/src/docs/eo-UY/features/drive.md b/src/docs/eo-UY/features/drive.md
new file mode 100644
index 0000000000..517050e0b4
--- /dev/null
+++ b/src/docs/eo-UY/features/drive.md
@@ -0,0 +1,17 @@
+# Diskingo
+ドライブは、Misskey上でファイルを管理できる機能です。
+
+[ドライブのページ](/my/drive)から任意のファイルをアップロードできるほか、アバターに設定した画像や、ノートに添付したファイルなどもすべてドライブにアップロードされます。
+
+<div class="warn">⚠️ ドライブからファイルを削除すると、そのファイルが添付されたノートも消えます。</div>
+
+ドライブにアップロードされたファイルは、いつでもダウンロードすることができるほか、ノート作成時に「ドライブからファイルを添付」することでファイルを再利用することもできます。
+
+ドライブ内にフォルダを作り、複数のファイルをまとめて整理することもできます。
+
+## 閲覧注意 (NSFW)
+<div class="info">ℹ️ この項目が閲覧注意なわけではありません</div>
+
+閲覧注意またはNSFW (Not safe for work) は、ドライブのファイルに設定することができるフラグです。 閲覧注意フラグを設定されたファイルは、表示される際に閲覧者の操作なしには表示されなくなります。 このフラグは、例えば職場や公共の場で閲覧するのに適切でないと思われる画像などに設定し、そのような画像が突然表示されてしまうことを防ぐ目的で使われます。
+
+このフラグは手動でオンオフを切り替えられるほか、モデレーターの判断で設定される場合もあります。
diff --git a/src/docs/eo-UY/features/favorite.md b/src/docs/eo-UY/features/favorite.md
new file mode 100644
index 0000000000..d87cb83e46
--- /dev/null
+++ b/src/docs/eo-UY/features/favorite.md
@@ -0,0 +1,4 @@
+# Preferi
+[ノート](./node)をお気に入りとして登録できる機能です。 お気に入り登録したノートは、[お気に入りページ](./my/favorites)で一覧することができます。 お気に入りに登録したことは相手に通知されず、お気に入りは自分しか見ることができません。
+
+ノートをお気に入り登録するには、ノートメニューの「お気に入り」を押します。お気に入り解除するには、ノートメニューの「お気に入り解除」を押します。
diff --git a/src/docs/eo-UY/features/follow.md b/src/docs/eo-UY/features/follow.md
new file mode 100644
index 0000000000..69f6b96311
--- /dev/null
+++ b/src/docs/eo-UY/features/follow.md
@@ -0,0 +1,2 @@
+# Sekvatoj
+ユーザーをフォローすると、タイムラインにそのユーザーの投稿が表示されるようになります。ただし、他のユーザーに対する返信は含まれません。 ユーザーをフォローするには、ユーザーページの「フォロー」ボタンをクリックします。フォローを解除するには、もう一度クリックします。
diff --git a/src/docs/eo-UY/features/keyboard-shortcut.md b/src/docs/eo-UY/features/keyboard-shortcut.md
new file mode 100644
index 0000000000..dd44428127
--- /dev/null
+++ b/src/docs/eo-UY/features/keyboard-shortcut.md
@@ -0,0 +1,66 @@
+# キーボードショートカット
+
+## Konfederacia
+これらのショートカットは基本的にどこでも使えます。
+<table>
+    <thead>
+        <tr><th>ショートカット</th><th>効果</th><th>由来</th></tr>
+    </thead>
+    <tbody>
+        <tr><td><kbd class="key">P</kbd>, <kbd class="key">N</kbd></td><td>新規投稿</td><td><b>P</b>ost, <b>N</b>ew, <b>N</b>ote</td></tr>
+        <tr><td><kbd class="key">T</kbd></td><td>タイムラインの最も新しい投稿にフォーカス</td><td><b>T</b>imeline, <b>T</b>op</td></tr>
+        <tr><td><kbd class="group"><kbd class="key">Shift</kbd> + <kbd class="key">N</kbd></kbd></td><td>通知を表示/隠す</td><td><b>N</b>otifications</td></tr>
+        <tr><td><kbd class="key">S</kbd></td><td>Serĉi</td><td><b>S</b>earch</td></tr>
+        <tr><td><kbd class="key">H</kbd>, <kbd class="key">?</kbd></td><td>ヘルプを表示</td><td><b>H</b>elp</td></tr>
+    </tbody>
+</table>
+
+## 投稿にフォーカスされた状態
+<table>
+    <thead>
+        <tr><th>ショートカット</th><th>効果</th><th>由来</th></tr>
+    </thead>
+    <tbody>
+        <tr><td><kbd class="key">↑</kbd>, <kbd class="key">K</kbd>, <kbd class="group"><kbd class="key">Shift</kbd> + <kbd class="key">Tab</kbd></kbd></td><td>上の投稿にフォーカスを移動</td><td>-</td></tr>
+        <tr><td><kbd class="key">↓</kbd>, <kbd class="key">J</kbd>, <kbd class="key">Tab</kbd></td><td>下の投稿にフォーカスを移動</td><td>-</td></tr>
+        <tr><td><kbd class="key">R</kbd></td><td>返信フォームを開く</td><td><b>R</b>eply</td></tr>
+        <tr><td><kbd class="key">Q</kbd></td><td>Renoteフォームを開く</td><td><b>Q</b>uote</td></tr>
+        <tr><td><kbd class="group"><kbd class="key">Ctrl</kbd> + <kbd class="key">Q</kbd></kbd></td><td>即刻Renoteする(フォームを開かずに)</td><td>-</td></tr>
+        <tr><td><kbd class="key">E</kbd>, <kbd class="key">A</kbd>, <kbd class="key">+</kbd></td><td>リアクションフォームを開く</td><td><b>E</b>mote, re<b>A</b>ction</td></tr>
+        <tr><td><kbd class="key">0</kbd>~<kbd class="key">9</kbd></td><td>数字に対応したリアクションをする(対応については後述)</td><td>-</td></tr>
+        <tr><td><kbd class="key">F</kbd>, <kbd class="key">B</kbd></td><td>お気に入りに登録</td><td><b>F</b>avorite, <b>B</b>ookmark</td></tr>
+        <tr><td><kbd class="key">Del</kbd>, <kbd class="group"><kbd class="key">Ctrl</kbd> + <kbd class="key">D</kbd></kbd></td><td>投稿を削除</td><td><b>D</b>elete</tr>
+        <tr><td><kbd class="key">M</kbd>, <kbd class="key">O</kbd></td><td>投稿に対するメニューを開く</td><td><b>M</b>ore, <b>O</b>ther</td></tr>
+        <tr><td><kbd class="key">S</kbd></td><td>CWで隠された部分を表示 or 隠す</td><td><b>S</b>how, <b>S</b>ee</td></tr>
+        <tr><td><kbd class="key">Esc</kbd></td><td>フォーカスを外す</td><td>-</td></tr>
+    </tbody>
+</table>
+
+## Renoteフォーム
+<table>
+    <thead>
+        <tr><th>ショートカット</th><th>効果</th><th>由来</th></tr>
+    </thead>
+    <tbody>
+        <tr><td><kbd class="key">Enter</kbd></td><td>Renoteする</td><td>-</td></tr>
+        <tr><td><kbd class="key">Q</kbd></td><td>フォームを展開する</td><td><b>Q</b>uote</td></tr>
+        <tr><td><kbd class="key">Esc</kbd></td><td>フォームを閉じる</td><td>-</td></tr>
+    </tbody>
+</table>
+
+## リアクションフォーム
+デフォルトで「👍」にフォーカスが当たっている状態です。
+<table>
+    <thead>
+        <tr><th>ショートカット</th><th>効果</th><th>由来</th></tr>
+    </thead>
+    <tbody>
+        <tr><td><kbd class="key">↑</kbd>, <kbd class="key">K</kbd></td><td>上のリアクションにフォーカスを移動</td><td>-</td></tr>
+        <tr><td><kbd class="key">↓</kbd>, <kbd class="key">J</kbd></td><td>下のリアクションにフォーカスを移動</td><td>-</td></tr>
+        <tr><td><kbd class="key">←</kbd>, <kbd class="key">H</kbd>, <kbd class="group"><kbd class="key">Shift</kbd> + <kbd class="key">Tab</kbd></kbd></td><td>左のリアクションにフォーカスを移動</td><td>-</td></tr>
+        <tr><td><kbd class="key">→</kbd>, <kbd class="key">L</kbd>, <kbd class="key">Tab</kbd></td><td>右のリアクションにフォーカスを移動</td><td>-</td></tr>
+        <tr><td><kbd class="key">Enter</kbd>, <kbd class="key">Space</kbd>, <kbd class="key">+</kbd></td><td>リアクション確定</td><td>-</td></tr>
+        <tr><td><kbd class="key">0</kbd>~<kbd class="key">9</kbd></td><td>数字に対応したリアクションで確定</td><td>-</td></tr>
+        <tr><td><kbd class="key">Esc</kbd></td><td>リアクションするのをやめる</td><td>-</td></tr>
+    </tbody>
+</table>
diff --git a/src/docs/eo-UY/features/mfm.md b/src/docs/eo-UY/features/mfm.md
new file mode 100644
index 0000000000..5be2df4f30
--- /dev/null
+++ b/src/docs/eo-UY/features/mfm.md
@@ -0,0 +1,12 @@
+# MFM
+MFMは、Misskey Flavored Markdownの略で、Misskeyの様々な場所で使用できる専用のマークアップ言語です。 MFMで使用可能な構文は[MFMチートシート](/mfm-cheat-sheet)で確認できます。
+
+## MFMが使用可能な場所の例
+- ノート本文
+- CW注釈
+- ユーザーの名前
+- ユーザーの自己紹介
+
+## 開発者向け情報
+MFMのパーサー実装はライブラリとして公開されており、簡単にクライアントにMFMを組み込むことが可能です。
+- [misskey-dev/mfm.js](https://github.com/misskey-dev/mfm.js) - JavaScriptパーサー実装
diff --git a/src/docs/eo-UY/features/mute.md b/src/docs/eo-UY/features/mute.md
new file mode 100644
index 0000000000..3a36c00f7a
--- /dev/null
+++ b/src/docs/eo-UY/features/mute.md
@@ -0,0 +1,13 @@
+# Silentigi
+
+ユーザーをミュートすると、そのユーザーに関する次のコンテンツがMisskeyに表示されなくなります:
+
+* タイムラインや投稿の検索結果内の、そのユーザーの投稿(およびそれらの投稿に対する返信やRenote)
+* そのユーザーからの通知
+* メッセージ履歴一覧内の、そのユーザーとのメッセージ履歴
+
+ユーザーをミュートするには、対象のユーザーのユーザーページに表示されている「ミュート」ボタンを押します。
+
+ミュートを行ったことは相手に通知されず、ミュートされていることを知ることもできません。
+
+設定>ミュート から、自分がミュートしているユーザー一覧を確認することができます。
diff --git a/src/docs/eo-UY/features/note.md b/src/docs/eo-UY/features/note.md
new file mode 100644
index 0000000000..3355e8d4d0
--- /dev/null
+++ b/src/docs/eo-UY/features/note.md
@@ -0,0 +1,51 @@
+# Notoj
+ノートは、Misskeyに投稿される、文章、ファイル、アンケートなどを含むコンテンツで、Misskeyの中心的概念です。また、そのノートを作成する行為自体もノートと呼ばれます。
+
+ノートが作成されると、[タイムライン](./timeline)に追加され、自分の[フォロワー](./follow)やサーバーのユーザーが見れるようになります。
+
+ノートには、[リアクション](./reaction)を行うことができます。また、返信や引用もできます。
+
+ノートを[お気に入り](./favorite)登録することで、後で簡単に見返すことができます。
+
+## ノートを作成する
+ノートを作成するには、画面上にある鉛筆マークのボタンを押して、作成フォームを開きます。作成フォームに内容を入力し、「ノート」ボタンを押すことでノートが作成されます。 ノートには、画像、動画など任意のファイルや、[アンケート](./poll)を添付することができます。また、本文中には[MFM](./mfm)が使用でき、[メンション](./mention)や[ハッシュタグ](./hashtag)を含めることもできます。 他にも、CWや公開範囲といった設定も行えます(詳細は後述)。
+<div class="info">ℹ️ コンピューターのクリップボードに画像データがある状態で、フォーム内のテキストボックスにペーストするとその画像を添付することができます。</div>
+<div class="info">ℹ️ テキストボックス内で<kbd class="key">Ctrl + Enter</kbd>を押すことでも投稿できます。</div>
+
+## Fari renoton
+既にあるノートを引用、もしくはそのノートを新しいノートとして共有する行為、またそれによって作成されたノートをRenoteと呼びます。 自分がフォローしているユーザーの、気に入ったノートを自分のフォロワーに共有したい場合や、過去の自分のノートを再度共有したい場合に使います。 同じノートに対して無制限にRenoteを行うことができますが、あまり連続して使用すると迷惑になる場合もあるので、注意しましょう。
+<div class="warn">⚠️ 公開範囲がフォロワーやダイレクトのノートはRenoteできません</div>
+
+Renoteを削除するには、Renoteの時刻表示の隣にある「...」を押し、「Renote解除」を選択します。
+
+## CW
+Contents Warningの略で、ノートの内容を、閲覧者の操作なしには表示しないようにできる機能です。主に長大な内容を隠すためや、ネタバレ防止などに使うことができます。 設定するには、フォームの「内容を隠す」ボタン(目のアイコン)を押します。すると新しい入力エリアが表れるので、そこに内容の要約を記入します。
+
+## 公開範囲
+ノートごとに、そのノートが公開される範囲を設定することができます。フォームの「ノート」ボタンの左にあるアイコンを押すと公開範囲を以下から選択できます。
+
+### パブリック
+全ての人に対してノートが公開されるほか、サーバーの全てのタイムライン(ホームタイムライン、ローカルタイムライン、ソーシャルタイムライン、グローバルタイムライン)にノートが流れます。
+<div class="warn">⚠️ アカウントが<a href="./silence">サイレンス</a>状態の時は、この公開範囲は使用できません。</div>
+
+### Hejmo
+全ての人に対してノートが公開されますが、フォロワー以外のローカルタイムライン、ソーシャルタイムライン、グローバルタイムラインにはノートは流れません。
+
+### Sekvantoj
+自分のフォロワーに対してのみノートを公開します。フォロワーの全てのタイムラインに流れます。
+
+### ダイレクト
+指定したユーザーに対してのみノートを公開します。指定したユーザーの全てのタイムラインに流れます。
+
+### 「ローカルのみ」オプション
+このオプションを有効にすると、リモートにノートを連合しなくなります。
+
+### 公開範囲の比較
+<table>
+    <tr><th></th><th>パブリック</th><th>Hejmo</th><th>Sekvantoj</th><th>ダイレクト</th></tr>
+    <tr><th>フォロワーのLTL/STL/GTL</th><td>✔</td><td>✔</td><td>✔</td><td></td></tr>
+    <tr><th>非フォロワーのLTL/STL/GTL</th><td>✔</td><td></td><td></td><td></td></tr>
+</table>
+
+## Alpingli sur la profilo
+ノートをピン留めすると、ユーザーページに常にそのノートを表示しておくことができます。 ノートのメニューを開き、「ピン留め」を選択してピン留めできます。 複数のノートをピン留めできます。
diff --git a/src/docs/eo-UY/features/pages.md b/src/docs/eo-UY/features/pages.md
new file mode 100644
index 0000000000..a7311b95e6
--- /dev/null
+++ b/src/docs/eo-UY/features/pages.md
@@ -0,0 +1,10 @@
+# Pages
+
+## 変数
+変数を使うことで動的なページを作成できます。テキスト内で <b>{ 変数名 }</b> と書くとそこに変数の値を埋め込めます。例えば <b>Hello { thing } world!</b> というテキストで、変数(thing)の値が <b>ai</b> だった場合、テキストは <b>Hello ai world!</b> になります。
+
+変数の評価(値を算出すること)は上から下に行われるので、ある変数の中で自分より下の変数を参照することはできません。例えば上から <b>A、B、C</b> と3つの変数を定義したとき、<b>C</b>の中で<b>A</b>や<b>B</b>を参照することはできますが、<b>A</b>の中で<b>B</b>や<b>C</b>を参照することはできません。
+
+ユーザーからの入力を受け取るには、ページに「ユーザー入力」ブロックを設置し、「変数名」に入力を格納したい変数名を設定します(変数は自動で作成されます)。その変数を使ってユーザー入力に応じた動作を行えます。
+
+関数を使うと、値の算出処理を再利用可能な形にまとめることができます。関数を作るには、「関数」タイプの変数を作成します。関数にはスロット(引数)を設定することができ、スロットの値は関数内で変数として利用可能です。また、関数を引数に取る関数(高階関数と呼ばれます)も存在します。関数は予め定義しておくほかに、このような高階関数のスロットに即席でセットすることもできます。
diff --git a/src/docs/eo-UY/features/reaction.md b/src/docs/eo-UY/features/reaction.md
new file mode 100644
index 0000000000..d53bfd313e
--- /dev/null
+++ b/src/docs/eo-UY/features/reaction.md
@@ -0,0 +1,11 @@
+# Reagoj
+他の人のノートに、絵文字を付けて簡単にあなたの反応を伝えられる機能です。 リアクションするには、ノートの + アイコンをクリックしてピッカーを表示し、絵文字を選択します。 リアクションには[カスタム絵文字](./custom-emoji)も使用できます。
+
+## リアクションピッカーのカスタマイズ
+ピッカーに表示される絵文字を自分好みにカスタマイズすることができます。 設定の「リアクション」で設定します。
+
+## リモート投稿へのリアクションについて
+リアクションはMisskeyオリジナルの機能であるため、リモートインスタンスがMisskeyでない限りは、ほとんどの場合「Like」としてアクティビティが送信されます。一般的にはLikeは「お気に入り」として実装されているようです。
+
+## リモートからのリアクションについて
+リモートから「Like」アクティビティを受信したとき、Misskeyでは「👍」のリアクションとして解釈されます。
diff --git a/src/docs/eo-UY/features/silence.md b/src/docs/eo-UY/features/silence.md
new file mode 100644
index 0000000000..7e26feab0d
--- /dev/null
+++ b/src/docs/eo-UY/features/silence.md
@@ -0,0 +1,6 @@
+# サイレンス
+サイレンスは、アカウントに設定される状態のひとつです。
+
+アカウントがサイレンス状態になると、ノートの公開範囲をパブリックにできなくなります。 ホーム、フォロワー、ダイレクトは選択可能なため、サイレンスを受けた場合でもフォロワーやあなたのユーザーページを直接訪れた場合は投稿を閲覧できますが、GTL(連合タイムライン)やLTL(ローカルタイムライン)には投稿が流れません。
+
+アカウントのサイレンス状態は、サーバーのモデレーターによって有効化/無効化されます。
diff --git a/src/docs/eo-UY/features/theme.md b/src/docs/eo-UY/features/theme.md
new file mode 100644
index 0000000000..a406f3433c
--- /dev/null
+++ b/src/docs/eo-UY/features/theme.md
@@ -0,0 +1,68 @@
+# テーマ
+
+テーマを設定して、Misskeyクライアントの見た目を変更できます。
+
+## テーマの設定
+設定 > テーマ
+
+## テーマを作成する
+テーマコードはJSON5で記述されたテーマオブジェクトです。 テーマは以下のようなオブジェクトです。
+``` js
+{
+    id: '17587283-dd92-4a2c-a22c-be0637c9e22a',
+
+    name: 'Danboard',
+    author: 'syuilo',
+
+    base: 'light',
+
+    props: {
+        accent: 'rgb(218, 141, 49)',
+        bg: 'rgb(218, 212, 190)',
+        fg: 'rgb(115, 108, 92)',
+        panel: 'rgb(236, 232, 220)',
+        renote: 'rgb(100, 152, 106)',
+        link: 'rgb(100, 152, 106)',
+        mention: '@accent',
+        hashtag: 'rgb(100, 152, 106)',
+        header: 'rgba(239, 227, 213, 0.75)',
+        navBg: 'rgb(216, 206, 182)',
+        inputBorder: 'rgba(0, 0, 0, 0.1)',
+    },
+}
+
+```
+
+* `id` ... テーマの一意なID。UUIDをおすすめします。
+* `name` ... テーマ名
+* `author` ... テーマの作者
+* `desc` ... テーマの説明(オプション)
+* `base` ... 明るいテーマか、暗いテーマか
+    * `light`にすると明るいテーマになり、`dark`にすると暗いテーマになります。
+    * テーマはここで設定されたベーステーマを継承します。
+* `props` ... テーマのスタイル定義。これから説明します。
+
+### テーマのスタイル定義
+`props`下にはテーマのスタイルを定義します。 キーがCSSの変数名になり、バリューで中身を指定します。 なお、この`props`オブジェクトはベーステーマから継承されます。 ベーステーマは、このテーマの`base`が`light`なら[_light.json5](https://github.com/misskey-dev/misskey/blob/develop/src/client/themes/_light.json5)で、`dark`なら[_dark.json5](https://github.com/misskey-dev/misskey/blob/develop/src/client/themes/_dark.json5)です。 つまり、このテーマ内の`props`に`panel`というキーが無くても、そこにはベーステーマの`panel`があると見なされます。
+
+#### バリューで使える構文
+* 16進数で表された色
+    * 例: `#00ff00`
+* `rgb(r, g, b)`形式で表された色
+    * 例: `rgb(0, 255, 0)`
+* `rgb(r, g, b, a)`形式で表された透明度を含む色
+    * 例: `rgba(0, 255, 0, 0.5)`
+* 他のキーの値の参照
+    * `@{キー名}`と書くと他のキーの値の参照になります。`{キー名}`は参照したいキーの名前に置き換えます。
+    * 例: `@panel`
+* 定数(後述)の参照
+    * `${定数名}`と書くと定数の参照になります。`{定数名}`は参照したい定数の名前に置き換えます。
+    * 例: `$main`
+* 関数(後述)
+    * `:{関数名}<{引数}<{色}`
+
+#### 定数
+「CSS変数として出力はしたくないが、他のCSS変数の値として使いまわしたい」値があるときは、定数を使うと便利です。 キー名を`$`で始めると、そのキーはCSS変数として出力されません。
+
+#### 関数
+wip
diff --git a/src/docs/eo-UY/features/timeline.md b/src/docs/eo-UY/features/timeline.md
new file mode 100644
index 0000000000..80ea42f040
--- /dev/null
+++ b/src/docs/eo-UY/features/timeline.md
@@ -0,0 +1,31 @@
+# Templinio
+タイムラインは、[ノート](./note)が時系列で表示される機能です。 タイムラインには以下で示す種類があり、種類によって表示されるノートも異なります。 なお、タイムラインの種類によってはサーバーにより無効になっている場合があります。
+
+## Hejmo
+自分のフォローしているユーザーの投稿が流れます。HTLと略されます。
+
+## Loka
+全てのローカルユーザーの「ホーム」指定されていない投稿が流れます。LTLと略されます。
+
+## Sociala
+自分のフォローしているユーザーの投稿と、全てのローカルユーザーの「ホーム」指定されていない投稿が流れます。STLと略されます。
+
+## Konfederacia
+全てのローカルユーザーの「ホーム」指定されていない投稿と、サーバーに届いた全てのリモートユーザーの「ホーム」指定されていない投稿が流れます。GTLと略されます。
+
+## 比較
+| ソース          |           |       | Templinio |         |              |
+| ------------ | --------- | ----- | --------- | ------- | ------------ |
+| Uzanto       | 公開範囲      | Hejmo | Loka      | Sociala | Konfederacia |
+| ローカル (フォロー)  | Publikigi | ✔     | ✔         | ✔       | ✔            |
+|              | Hejmo     | ✔     |           | ✔       |              |
+|              | Sekvantoj | ✔     | ✔         | ✔       | ✔            |
+| リモート (フォロー)  | Publikigi | ✔     |           | ✔       | ✔            |
+|              | Hejmo     | ✔     |           | ✔       |              |
+|              | Sekvantoj | ✔     |           | ✔       | ✔            |
+| ローカル (未フォロー) | Publikigi |       | ✔         | ✔       | ✔            |
+|              | Hejmo     |       |           |         |              |
+|              | Sekvantoj |       |           |         |              |
+| リモート (未フォロー) | Publikigi |       |           |         | ✔            |
+|              | Hejmo     |       |           |         |              |
+|              | Sekvantoj |       |           |         |              |
diff --git a/src/docs/eo-UY/features/widgets.md b/src/docs/eo-UY/features/widgets.md
new file mode 100644
index 0000000000..a7c2c1d1d6
--- /dev/null
+++ b/src/docs/eo-UY/features/widgets.md
@@ -0,0 +1,7 @@
+# ウィジェット
+ウィジェットは、MisskeyのUI上に設置できる小型の情報表示、操作が行えるパーツです。
+
+ウィジェットを編集するには、ウィジェット編集モードに切り替えます。切り替え方法はUIによって異なります。 ウィジェット編集モードでは、ウィジェットの追加、削除、並び替え、およびそれぞれのウィジェットの設定を行えます。
+
+## 利用可能なウィジェット一覧
+todo
diff --git a/src/docs/eo-UY/general/apps.md b/src/docs/eo-UY/general/apps.md
new file mode 100644
index 0000000000..1f4c85fe8f
--- /dev/null
+++ b/src/docs/eo-UY/general/apps.md
@@ -0,0 +1,6 @@
+# サードパーティアプリのリスト
+## クライアント
+todo
+
+## 連携サービス
+todo
diff --git a/src/docs/eo-UY/general/faq.md b/src/docs/eo-UY/general/faq.md
new file mode 100644
index 0000000000..ecb664e32e
--- /dev/null
+++ b/src/docs/eo-UY/general/faq.md
@@ -0,0 +1,22 @@
+# よくある質問
+ここでは利用上のよくある質問について掲載しています。 Misskeyのプロジェクト自体についてのよくある質問は[こちら](./misskey)に掲載されています。
+
+### iOS/Androidのアプリはありますか?
+公式にはそういったOSのネイティブアプリを開発していませんが、サードパーティ製のアプリがいくつかあります。 詳しくは[こちら](./apps)をご覧ください。
+
+ただ、サードパーティ製アプリはどうしても機能への対応が遅れてしまうため、とくに拘りがなければ公式のWebクライアントの利用をおすすめします。 なお、MisskeyのWebクライアントはPWAに対応しているので、ネイティブアプリのように動作させることも可能です。 詳しくは[こちら](todo)をご覧ください。
+
+## 他のサーバーのユーザーをフォローするときは?
+メニューから検索を選び、ユーザー名をホスト込みで入力します。例: `@syuilo@misskey.io`
+
+## Renoteを削除するには?
+Renoteの時刻表示の隣にある「...」を押し、「Renote解除」を選択します。 Renoteについては[こちら](../features/note)をご確認ください。
+
+## URLのプレビューを表示させたくない
+MFMには、そのURLのプレビューを無効にする構文があります。詳細は[MFMチートシート](/mfm-cheat-sheet)をご確認ください。
+
+## カスタム絵文字を追加したい
+運営者のみがカスタム絵文字を追加、編集、削除できます。それらを希望する場合は運営者に依頼してください。
+
+## Botを開発したい
+Misskey APIを利用してBotの開発が可能です。[こちら](../advanced/develop-bot)をご確認ください。
diff --git a/src/docs/eo-UY/general/glossary.md b/src/docs/eo-UY/general/glossary.md
new file mode 100644
index 0000000000..dabcca5030
--- /dev/null
+++ b/src/docs/eo-UY/general/glossary.md
@@ -0,0 +1,83 @@
+# 用語集
+Misskeyに関する用語集です。
+
+## AcitivityPub
+(読み: あくてぃびてぃぱぶ) 分散型を実現するために用いられるプロトコル(仕様)。このプロトコルに則ってサーバー同士通信を行うことで、連合が行われ、Fediverseを形成しています。
+
+## AiScript
+(読み: あいすくりぷと) Misskey上で使用できるプログラミング言語です。詳細は[こちら。](../advanced/aiscript)
+
+## API
+(読み: えーぴーあい) Misskeyのサーバーが公開している、プログラムからMisskeyを扱うためのインターフェース。詳細は[こちら。](../advanced/api)
+
+## Bot
+(読み: ぼっと) プログラムによって動作しているアカウント。
+
+## CW
+(読み: こんてんつわーにんぐ) Contents Warningの略。ノートの内容を、操作なしには表示しないようにできる機能。主に長大な内容を隠すためや、ネタバレ防止などに使われます。
+
+## Fediverse
+(読み: ふぇでぃばーす) Misskeyを含む様々な分散型ソフトウェアのサーバーで構成されたネットワーク。
+
+## GTL
+グローバルタイムライン(Global TimeLine)の略。タイムラインの詳細は[こちら。](../features/timeline)
+
+## HTL
+ホームタイムライン(Home TimeLine)の略。タイムラインの詳細は[こちら。](../features/timeline)
+
+## LTL
+ローカルタイムライン(Local TimeLine)の略。タイムラインの詳細は[こちら。](../features/timeline)
+
+## MFM
+(読み: えむえふえむ) Misskey Flavored Markdownの略で、Misskey上で使用できるマークアップ言語です。詳細は[こちら。](../features/mfm)
+
+## NSFW
+(読み: のっとせーふふぉーわーく) Not Safe For Workの略。画像を「閲覧注意」扱いにし、操作なしには表示しないようにすることができる機能。
+
+## Fari renoton
+(読み: りのーと) 既にあるノートを引用、もしくはそのノートを新しいノートとして共有する行為、またそれによって作成されたノート。詳細は[こちら。](../features/note)
+
+## STL
+ソーシャルタイムライン(Social TimeLine)の略。タイムラインの詳細は[こちら。](../features/timeline)
+
+## 藍
+(読み: あい) Misskeyの看板娘(公式キャラクター)です。
+
+## アクティブユーザー
+インスタンスにアカウントを作っているユーザーのうち、現在も実際にサービスを利用しているユーザーのこと。
+
+## Ekzemplo
+todo
+
+## コントロールパネル
+インスタンスの設定画面のこと。
+
+## Servilo
+todo
+
+## サイレンス
+ノートをパブリックな公開範囲で投稿できなくされている状態。モデレーターの判断でユーザーごとに設定されます。詳細は[こちら。](../features/silence)
+
+## Flostigi
+アカウントが使用不可に設定されている状態。
+
+## Diskingo
+Misskeyにアップロードしたファイルを管理する機能。詳細は[こちら。](../features/drive)
+
+## Notoj
+Misskeyに投稿される、文章、ファイル、アンケートなどを含めることができるコンテンツ。詳細は[こちら。](../features/note)
+
+## ミスキスト
+Misskeyを使う人のこと。
+
+## モデレーター
+スパムの凍結およびサイレンスや不適切な投稿の削除など、コミュニティ運営に関する権限を持つユーザー。
+
+## Transa
+他サーバーのことを指します。リモートユーザーといったように接頭辞としても使われます。ローカルの逆です。
+
+## Fediverso
+サーバー上で作成された情報が他のサーバーに伝わること。
+
+## Loka
+自サーバーのことを指します。ローカルユーザー、ローカルタイムラインといったように接頭辞としても使われます。リモートの逆です。
diff --git a/src/docs/eo-UY/general/links.md b/src/docs/eo-UY/general/links.md
new file mode 100644
index 0000000000..d6b16856fb
--- /dev/null
+++ b/src/docs/eo-UY/general/links.md
@@ -0,0 +1,5 @@
+# リンク集
+
+## ライブラリ
+- [misskey-dev/misskey.js](https://github.com/misskey-dev/misskey.js) - JavaScriptのMisskey SDK
+- [misskey-dev/mfm.js](https://github.com/misskey-dev/mfm.js) - JavaScriptのMFMパーサー実装
diff --git a/src/docs/eo-UY/general/misskey.md b/src/docs/eo-UY/general/misskey.md
new file mode 100644
index 0000000000..9220389b2f
--- /dev/null
+++ b/src/docs/eo-UY/general/misskey.md
@@ -0,0 +1,87 @@
+# Pri Miskejo
+
+Misskeyはオープンソースの分散型マイクロブログプラットフォームプロジェクトです。 開発は日本でsyuiloによって2014年から開始されました。 ドライブ、リアクションなどの豊富な機能や、高いカスタマイズ性を備えたUIを持つことが特徴です。
+
+## 歴史
+開発当初は掲示板がメインのサービスでしたが、ユーザーが短文を投稿し、それを時系列で流れるタイムライン機能を追加したところ人気が高まり、徐々にそれがメインとして開発が進むようになりました。 当初は分散型ではありませんでしたが、2018年にAcitivityPubを実装し分散型になったことで、より多くの方に認知され利用されるサービスになり、現在に至ります。
+<div class="info">ℹ️ Misskeyという名前は、syuiloが当時聴いていたMay'nというアーティストの楽曲、Brain Diverの歌詞に由来します。</div>
+
+誰でも開発に参加することができ、現在でも活発に開発が続いています。
+
+## 分散型とは何か?
+
+<b>分散(distributed)型</b>とは、<b>非中央集権(decentralized)</b>とも呼ばれ、コミュニティが多数のサーバーに分散して存在し、それらが相互に<b>通信(連合、federation)</b>することでコンテンツ共有<b>ネットワーク(Fediverse)</b>を形成していることが特徴のサービスです。 単一のサーバーしか存在しない、もしくは複数存在しても互いに独立している場合は中央集権なサービスと言われ、例えばTwitterやFacebookなどほとんどのサービスがそれに該当します。 分散型のメリットは、自分に合った運営者やテーマのサーバーを選択できることです。自分でサーバーを作成することもできます。連合するおかげで、どのサーバーを選んでも、同じコミュニティにアクセスできます。
+
+## 常にオープンソース
+Misskeyはこれまでもこれからも、オープンソースであり続けます。オープンソースとは、簡単に言うと<b>ソフトウェアのソースコード(プログラム)が公開されている</b>ことです。ソースコードの修正や再配布が可能であることを定義に含めることもあります。 Misskeyのすべてのソースコードは[AGPL](https://github.com/misskey-dev/misskey/blob/develop/LICENSE)というオープンソースライセンスの下に[公開](https://github.com/misskey-dev)されていて、誰でも自由に閲覧、使用、修正、改変、再配布をすることができます。 オープンソースは、自分で好きなように変えたり、有害な処理が含まれていないことを確認することができたり、誰でも開発に参加できるなどの、様々なメリットがあります。 上述の分散型を実現するためにも、オープンソースであるということは必要不可欠な要素です。 再び引き合いに出しますが、TwitterやFacebookなどの利益を得ているほとんどのサービスはオープンソースではありません。
+
+<div class="info">ℹ️ 技術的に言うと、MisskeyのソースコードはGitで管理されていて、リポジトリは<a href="https://github.com/misskey-dev" target="_blank">GitHub上でホスティングされています。</a></div>
+
+## 開発に参加する、プロジェクトを支援する
+Misskeyを気に入っていただけたら、ぜひプロジェクトを支援してください。プロジェクトに貢献するには、以下で紹介するようにいろいろな方法があります。方法によっては開発のスキルは不要なので、誰でも気軽に参加し貢献することができます。いつでもお待ちしています。
+
+### 機能を追加したり、バグを修正する
+ソフトウェアエンジニアのスキルをお持ちの方であれば、ソースコードを編集する形でプロジェクトに貢献することができます。 貢献についてのガイドは[こちら](https://github.com/misskey-dev/misskey/blob/develop/CONTRIBUTING.md)です。
+
+### 議論に参加する
+新しい機能、または既存の機能について意見を述べたり、不具合を報告したりすることでも貢献できます。 そのようなディスカッションは[GitHub](https://github.com/misskey-dev)上か、[フォーラム](https://forum.misskey.io/)等で行われます。
+
+### テキストを翻訳する
+Misskeyは様々な言語に対応しています(i18n -internationalizationの略- と呼ばれます)。元の言語は基本的に日本語ですが、有志によって他の言語へと翻訳されています。 その翻訳作業に加わっていただくことでもMisskeyに貢献できます。 Misskeyは[Crowdinというサービスを使用して翻訳の管理を行っています。](https://crowdin.com/project/misskey)
+
+### 感想を投稿する
+不具合報告等だけではなく、Misskeyの良い点、楽しい点といったポジティブな意見もぜひ共有してください。開発の励みになり、それは間接的ですがプロジェクトへの貢献です。
+
+### ミスキストを増やす
+ミスキストとは、Misskeyを使用する人のことです。 知り合いに紹介するなどしてMisskeyを広めていただければ、ミスキストが増え開発のモチベーションが上がります。
+
+### 寄付をする
+Misskeyはビジネスではなく、利用は無料であるため、収益は皆様からの寄付のみです。(インスタンスによっては広告収入を得ているような場合もありますが、それは運営者の収入であり直接開発者への収入にはなりません) 寄付をしていただければ、今後も開発を続けることが可能になり、プロジェクトへの貢献になります。 寄付は基本的には[Patreon](https://www.patreon.com/syuilo)で受け付けています。 一定額寄付していただけると、Misskeyの[情報ページ](/about-misskey)に名前を記載することができます。
+
+また、サーバーの運営者も、基本的には収益を得ていません。サーバーの運営にはコストがかかるので、運営者の支援をすることもご検討ください。 開発には直接関係しませんが、サーバーがあってこそのプロジェクトなので、運営が維持されるというのは開発と同じくらい重要なことです。
+
+## クレジット
+Misskeyの開発者や、Misskeyに寄付をしてくださった方の一覧は[こちら](/about-misskey)で見ることができます。
+
+## よくある質問
+### プロジェクトは何を目指していますか?
+強いて言うと、漠然的になりますが広く使われる汎用的なプラットフォームになることを目指しています。 Misskeyは他のプロジェクトとは違い、何らかの思想(例えば、反中央集権)やビジョンに基づいて開発が行われているわけではなく、その点ではフラットです。 それが逆に、特定の方向性に縛られないフレキシブルさを生み出すことに繋がっていると感じています。
+<!-- TODO: ここにロードマップへのリンク -->
+
+### 企業によって開発されていますか?
+いいえ。Misskeyの開発は個人で行われており、商業的でもないため、特定の企業の関りはありません。 開発メンバーも基本的にはボランティアです。 また、開発に対し企業のスポンサーがつくこともありますが、その場合でもやはり開発は個人のコミュニティが主体です。
+
+### 誰が運営していますか?
+Misskeyは分散型なため、各サーバーにそれぞれ異なった運営者がいます。従って、特定の個人や企業によって、Misskeyの全てが運営されているわけではありません。 また、開発チームが運営を行うわけでもないため、運営に関する連絡は、お使いのサーバーの運営者に行ってください。 サーバーの運営者は、[このページ](/about)で確認することができます。 あなたがサーバーを作成すれば、あなたが運営者になります。
+
+### どのサーバーを選べばいいですか?
+[サーバー一覧が公開されています。](https://join.misskey.page/ja-JP/instances) サーバーによってコミュニティのテーマ(特定のこと、ものが好き 等)が決められている場合があるので、自分に合ったテーマのサーバーがあれば、そこを選ぶと良いかもしれません。 他にも、サーバーの規模、ユーザー層、国および言語、運営者が信頼できるかどうか、などの観点があります。 なお、Misskey公式のサーバーというものはありません。自身で新しくサーバーを作成するという選択肢もあります。
+
+基本的にどのサーバーを選んだとしても、他の全てのサーバーのユーザーと繋がることができます。
+
+### サーバーを建てるにはどうしたらいいですか?
+Misskeyサーバーの作成に興味を持っていただきありがとうございます。 2021年現在、Misskeyのホスティングサービスは存在しないため、サーバーの作成にはある程度の知識が必要です。 サーバーの作成方法については[こちら](todo)をご覧ください。
+
+### どのような技術を使用していますか?
+Misskeyは開発が進むにつれ使用する技術も大きく変わってきました。開発当初はMySQL + PHP + jQueryといった構成でしたが、現在は以下のようになっています。
+- サーバーサイド: Node.js
+- データベース: PostgreSQL、Redis
+- UIフレームワーク: Vue.js
+- プログラミング言語: TypeScript
+
+また、MFMやAiScriptなどの、Misskeyから派生して独自の技術も開発しています。
+
+### Mastodonのフォークですか?
+いいえ。MisskeyはMastodonやその他のプロジェクトとは全く別のプロジェクトです。 開発に関しても、Misskeyの方が昔から開発されています。ただし、分散型になったのはMastodonの登場より後です。 同じAcitivityPubという分散のためのプロトコルを実装しているという点以外、両者に特に関りがあるわけでもありません。
+
+### iOS/Androidのアプリはありますか?
+公式にはそういったOSのネイティブアプリを開発していませんが、サードパーティ製のアプリがいくつかあります。 詳しくは[こちら](./apps)をご覧ください。
+
+ただ、サードパーティ製アプリはどうしても機能への対応が遅れてしまうため、とくに拘りがなければ公式のWebクライアントの利用をおすすめします。 なお、MisskeyのWebクライアントはPWAに対応しているので、ネイティブアプリのように動作させることも可能です。 詳しくは[こちら](todo)をご覧ください。
+
+### Misskeyのロゴ、アイコンはどこで入手できますか?
+(準備中)
+
+### 時折目にする猫耳の可愛い女の子は?
+Misskeyの守り神、藍ちゃんです。アイチャンカワイイヤッター!
+<div class="info">ℹ️ 藍ちゃんについては<a href="https://xn--931a.moe/" target="_blank">こちら</a>です。</div>
diff --git a/src/docs/eo-UY/general/report-issue.md b/src/docs/eo-UY/general/report-issue.md
new file mode 100644
index 0000000000..63527e32af
--- /dev/null
+++ b/src/docs/eo-UY/general/report-issue.md
@@ -0,0 +1,8 @@
+# 不具合の報告
+不具合と思われる状況に遭遇したときは、まず[トラブルシューティング](./troubleshooting)をご一読ください。 それでも問題が解決しないときは、以下の情報を含めて[フォーラム](https://forum.misskey.io/)に投稿してください。 投稿することで、解決策が見つかったり、不具合と判断されれば開発チームによって修正が行われます。
+
+## 含める情報
+- Misskeyのバージョン([情報ページ](/about)で確認できます)
+- お使いのブラウザの種類とバージョン
+- お使いのOSの種類とバージョン
+- 問題の再現手順
diff --git a/src/docs/eo-UY/general/troubleshooting.md b/src/docs/eo-UY/general/troubleshooting.md
new file mode 100644
index 0000000000..4a35091299
--- /dev/null
+++ b/src/docs/eo-UY/general/troubleshooting.md
@@ -0,0 +1,36 @@
+# トラブルシューティング
+<div class="info">ℹ️ <a href="./faq">よくある質問</a>も合わせてお役立てください。</div>
+
+問題が発生したときは、まずこちらをご確認ください。 該当する項目が無い、もしくは手順を試しても効果がない場合は、サーバーの管理者に連絡するか[不具合を報告](./report-issue)してください。
+
+## クライアントが起動しない
+ほとんどの場合、お使いのブラウザまたはOSのバージョンが古いことが原因です。 ブラウザおよびOSのバージョンを最新のものに更新してから、再度試してみてください。
+
+これは稀ですが、それでも起動しない場合は、キャッシュが原因の場合があります。ブラウザのキャッシュをクリアして、再度試してみてください。
+
+## ページが読み込めない
+クライアントが起動するもののページが読み込めないというエラーが出る場合は、ネットワークに問題がないか確認してください。また、サーバーがダウンしていないか確認してください。
+
+これは稀ですが、キャッシュが原因の場合があります。ブラウザのキャッシュをクリアして、再度試してみてください。
+
+まだ問題がある場合は、サーバーの問題と思われるのでサーバーの管理者に連絡してください。
+
+## クライアントの動作が遅い
+以下を試してみてください:
+
+- クライアント設定で「UIのアニメーションを減らす」を有効にする
+- クライアント設定で「モーダルにぼかし効果を使用」を無効にする
+- お使いのブラウザの設定でハードウェアアクセラレーションを有効にする
+- お使いのデバイスのスペックを上げる
+
+## 通知やアンテナ等の点滅が消えない
+点滅は、未読のコンテンツがあることを示しています。通常点滅が消えない場合は、コンテンツを遡ると未読なコンテンツが残っています。 すべて既読にしたと思われるのに、それでもなお点滅が続く場合(おそらく不具合と思われます)は設定から強制的にすべて既読扱いにすることができます。
+
+## Renoteができない
+フォロワー限定のノートはRenoteすることはできません。
+
+## UI上で特定の要素が表示されない
+広告ブロッカーを使用しているとそのような不具合が発生することがあります。Misskeyではオフにしてご利用ください。
+
+## UI上で未翻訳の部分がある
+ほとんどの場合、単に翻訳が間に合っていないだけで、不具合ではありません。翻訳が終わるまでお待ちください。 [翻訳に参加](./misskey)していただくことも可能です。
diff --git a/src/docs/es-ES/admin/disable-timelines.md b/src/docs/es-ES/admin/disable-timelines.md
new file mode 100644
index 0000000000..b081e35ab0
--- /dev/null
+++ b/src/docs/es-ES/admin/disable-timelines.md
@@ -0,0 +1,8 @@
+# LTL/STL/GTLの無効化
+Misskeyでは、LTL/STL/GTLをそれぞれ無効化することができます。有効/無効を切り替えるには、インスタンスコントロールパネルで設定します。
+
+LTLやSTLは、そのインスタンス全員の投稿が見れるため、新規のユーザーにとってはユーザーを探す必要がなくなり、興味のあるユーザーを見つけやすいという利点があります。 しかし同時に、フォロー機能が活用されなくなったり、不適切な投稿が目につきやすくなったり、チャットのようになることで内輪感が生じて逆に新規ユーザーが参加しにくくなるといったデメリットも持ち合わせています。 サーバーによってメリット/デメリットどちらが優勢かは異なるので、オプションとして無効にできるようになっています。 もしデメリットの方が上回っていると感じたら、それらのタイムラインを無効化することも検討してください。
+
+<div class="warn">⚠️ 無効化を行うと、ユーザーが困惑し、短期的に見て利用者が減る可能性があります。そのため、無効化の際は影響を慎重に検討し、事前に説明してフォローを整える期間を一定程度設けることを推奨します。</div>
+
+なお、管理者/モデレーターは、これらのタイムラインの無効化状態は適用されず、引き続き利用することが可能です。
diff --git a/src/docs/es-ES/admin/faq.md b/src/docs/es-ES/admin/faq.md
new file mode 100644
index 0000000000..317b4e0655
--- /dev/null
+++ b/src/docs/es-ES/admin/faq.md
@@ -0,0 +1,5 @@
+# よくある質問
+ここでは、サーバー管理者向けのよくある質問を掲載しています。
+
+## デフォルトテーマを設定したい
+現在、デフォルトテーマ設定機能は実装されていません。
diff --git a/src/docs/es-ES/advanced/aiscript.md b/src/docs/es-ES/advanced/aiscript.md
new file mode 100644
index 0000000000..604d17daa8
--- /dev/null
+++ b/src/docs/es-ES/advanced/aiscript.md
@@ -0,0 +1,7 @@
+# AiScript
+AiScriptは、Misskeyで使用できるスクリプト言語です。
+
+<div class="info">ℹ️ AiScript実装はMisskeyとは別リポジトリで、<a href="https://github.com/syuilo/aiscript" target="_blank">オープンソースで公開されています。</a></div>
+
+## 使い方
+AiScriptの構文や組み込み関数などのドキュメントは、[こちら](https://github.com/syuilo/aiscript/tree/master/docs)で公開されています。
diff --git a/src/docs/es-ES/advanced/api.md b/src/docs/es-ES/advanced/api.md
new file mode 100644
index 0000000000..76019b6145
--- /dev/null
+++ b/src/docs/es-ES/advanced/api.md
@@ -0,0 +1,58 @@
+# Misskey API
+
+MisskeyAPIを使ってMisskeyクライアント、Misskey連携Webサービス、Bot等(以下「アプリケーション」と呼びます)を開発できます。 ストリーミングAPIもあるので、リアルタイム性のあるアプリケーションを作ることも可能です。
+
+APIを使い始めるには、まずアクセストークンを取得する必要があります。 このドキュメントでは、アクセストークンを取得する手順を説明した後、基本的なAPIの使い方を説明します。
+
+## アクセストークンの取得
+基本的に、APIはリクエストにはアクセストークンが必要となります。 APIにリクエストするのが自分自身なのか、不特定の利用者に使ってもらうアプリケーションなのかによって取得手順は異なります。
+
+* 前者の場合: [「自分自身のアクセストークンを手動発行する」](#自分自身のアクセストークンを手動発行する)に進む
+* 後者の場合: [「アプリケーション利用者にアクセストークンの発行をリクエストする」](#アプリケーション利用者にアクセストークンの発行をリクエストする)に進む
+
+### 自分自身のアクセストークンを手動発行する
+「設定 > API」で、自分のアクセストークンを発行できます。
+
+[「APIの使い方」へ進む](#APIの使い方)
+
+### アプリケーション利用者にアクセストークンの発行をリクエストする
+アプリケーション利用者のアクセストークンを取得するには、以下の手順で発行をリクエストします。
+
+#### Step 1
+
+UUIDを生成する。以後これをセッションIDと呼びます。
+
+> このセッションIDは毎回生成し、使いまわさないようにしてください。
+
+#### Step 2
+
+`{_URL_}/miauth/{session}`をユーザーのブラウザで表示させる。`{session}`の部分は、セッションIDに置き換えてください。
+> 例: `{_URL_}/miauth/c1f6d42b-468b-4fd2-8274-e58abdedef6f`
+
+表示する際、URLにクエリパラメータとしていくつかのオプションを設定できます:
+* `name` ... アプリケーション名
+    * > 例: `MissDeck`
+* `icon` ... アプリケーションのアイコン画像URL
+    * > 例: `https://missdeck.example.com/icon.png`
+* `callback` ... 認証が終わった後にリダイレクトするURL
+    * > 例: `https://missdeck.example.com/callback`
+    * リダイレクト時には、`session`というクエリパラメータでセッションIDが付きます
+* `permission` ... アプリケーションが要求する権限
+    * > 例: `write:notes,write:following,read:drive`
+    * 要求する権限を`,`で区切って列挙します
+    * どのような権限があるかは[APIリファレンス](/api-doc)で確認できます
+
+#### Step 3
+ユーザーが発行を許可した後、`{_URL_}/api/miauth/{session}/check`にPOSTリクエストすると、レスポンスとしてアクセストークンを含むJSONが返ります。
+
+レスポンスに含まれるプロパティ:
+* `token` ... ユーザーのアクセストークン
+* `user` ... ユーザーの情報
+
+[「APIの使い方」へ進む](#APIの使い方)
+
+## APIの使い方
+**APIはすべてPOSTで、リクエスト/レスポンスともにJSON形式です。RESTではありません。** アクセストークンは、`i`というパラメータ名でリクエストに含めます。
+
+* [APIリファレンス](/api-doc)
+* [ストリーミングAPI](./stream)
diff --git a/src/docs/es-ES/advanced/create-plugin.md b/src/docs/es-ES/advanced/create-plugin.md
new file mode 100644
index 0000000000..46db702206
--- /dev/null
+++ b/src/docs/es-ES/advanced/create-plugin.md
@@ -0,0 +1,74 @@
+# プラグインの作成
+Misskey Webクライアントのプラグイン機能を使うと、クライアントを拡張し、様々な機能を追加できます。 ここではプラグインの作成にあたってのメタデータ定義や、AiScript APIリファレンスを掲載します。
+
+## Metadatos
+プラグインは、AiScriptのメタデータ埋め込み機能を使って、デフォルトとしてプラグインのメタデータを定義する必要があります。 メタデータは次のプロパティを含むオブジェクトです。
+
+### name
+プラグイン名
+
+### author
+プラグイン作者
+
+### version
+プラグインバージョン。数値を指定してください。
+
+### description
+プラグインの説明
+
+### permissions
+プラグインが要求する権限。MisskeyAPIにリクエストする際に用いられます。
+
+### config
+プラグインの設定情報を表すオブジェクト。 キーに設定名、値に以下のプロパティを含めます。
+
+#### type
+設定値の種類を表す文字列。以下から選択します。 string number boolean
+
+#### label
+ユーザーに表示する設定名
+
+#### description
+設定の説明
+
+#### default
+設定のデフォルト値
+
+## APIリファレンス
+AiScript標準で組み込まれているAPIは掲載しません。
+
+### Mk:dialog(title text type)
+ダイアログを表示します。typeには以下の値が設定できます。 info success warn error question 省略すると info になります。
+
+### Mk:confirm(title text type)
+確認ダイアログを表示します。typeには以下の値が設定できます。 info success warn error question 省略すると question になります。 ユーザーが"OK"を選択した場合は true を、"キャンセル"を選択した場合は false が返ります。
+
+### Mk:api(endpoint params)
+Misskey APIにリクエストします。第一引数にエンドポイント名、第二引数にパラメータオブジェクトを渡します。
+
+### Mk:save(key value)
+任意の値に任意の名前を付けて永続化します。永続化した値は、AiScriptコンテキストが終了しても残り、Mk:loadで読み取ることができます。
+
+### Mk:load(key)
+Mk:saveで永続化した指定の名前の値を読み取ります。
+
+### Plugin:register_post_form_action(title fn)
+投稿フォームにアクションを追加します。第一引数にアクション名、第二引数にアクションが選択された際のコールバック関数を渡します。 コールバック関数には、第一引数に投稿フォームオブジェクトが渡されます。
+
+### Plugin:register_note_action(title fn)
+ノートメニューに項目を追加します。第一引数に項目名、第二引数に項目が選択された際のコールバック関数を渡します。 コールバック関数には、第一引数に対象のノートオブジェクトが渡されます。
+
+### Plugin:register_user_action(title fn)
+ユーザーメニューに項目を追加します。第一引数に項目名、第二引数に項目が選択された際のコールバック関数を渡します。 コールバック関数には、第一引数に対象のユーザーオブジェクトが渡されます。
+
+### Plugin:register_note_view_interruptor(fn)
+UIに表示されるノート情報を書き換えます。 コールバック関数には、第一引数に対象のノートオブジェクトが渡されます。 コールバック関数の返り値でノートが書き換えられます。
+
+### Plugin:register_note_post_interruptor(fn)
+ノート投稿時にノート情報を書き換えます。 コールバック関数には、第一引数に対象のノートオブジェクトが渡されます。 コールバック関数の返り値でノートが書き換えられます。
+
+### Plugin:open_url(url)
+第一引数に渡されたURLをブラウザの新しいタブで開きます。
+
+### Plugin:config
+プラグインの設定が格納されるオブジェクト。プラグイン定義のconfigで設定したキーで値が入ります。
diff --git a/src/docs/es-ES/advanced/develop-bot.md b/src/docs/es-ES/advanced/develop-bot.md
new file mode 100644
index 0000000000..7f825e9bc4
--- /dev/null
+++ b/src/docs/es-ES/advanced/develop-bot.md
@@ -0,0 +1,6 @@
+# Botの作成
+[Misskey API](./api)を利用してBotの開発が可能です。 また、いくつかのBot実装が公開されているため、ぜひ参考にしてください。
+
+- [syuilo/ai](https://github.com/syuilo/ai) ... Node.js上で動く、TypeScript製Bot実装
+
+Botを作成したときは、プロフィール設定からBotフラグをオンにしておくことを強くおすすめします。
diff --git a/src/docs/es-ES/advanced/reversi-bot.md b/src/docs/es-ES/advanced/reversi-bot.md
new file mode 100644
index 0000000000..1019fa4470
--- /dev/null
+++ b/src/docs/es-ES/advanced/reversi-bot.md
@@ -0,0 +1,160 @@
+# MisskeyリバーシBotの開発
+Misskeyのリバーシ機能に対応したBotの開発方法をここに記します。
+
+1. `games/reversi`ストリームに以下のパラメータを付けて接続する:
+    * `i`: botアカウントのAPIキー
+
+2. 対局への招待が来たら、ストリームから`invited`イベントが流れてくる
+    * イベントの中身に、`parent`という名前で対局へ誘ってきたユーザーの情報が含まれている
+
+3. `games/reversi/match`へ、`user_id`として`parent`の`id`が含まれたリクエストを送信する
+
+4. 上手くいくとゲーム情報が返ってくるので、`games/reversi-game`ストリームへ、以下のパラメータを付けて接続する:
+    * `i`: botアカウントのAPIキー
+    * `game`: `game`の`id`
+
+5. この間、相手がゲームの設定を変更するとその都度`update-settings`イベントが流れてくるので、必要であれば何かしらの処理を行う
+
+6. 設定に満足したら、`{ type: 'accept' }`メッセージをストリームに送信する
+
+7. ゲームが開始すると、`started`イベントが流れてくる
+    * イベントの中身にはゲーム情報が含まれている
+
+8. 石を打つには、ストリームに`{ type: 'set', pos: <位置> }`を送信する(位置の計算方法は後述)
+
+9. 相手または自分が石を打つと、ストリームから`set`イベントが流れてくる
+    * `color`として石の色が含まれている
+    * `pos`として位置情報が含まれている
+
+## 位置の計算法
+8x8のマップを考える場合、各マスの位置(インデックスと呼びます)は次のようになっています:
+```
++--+--+--+--+--+--+--+--+
+| 0| 1| 2| 3| 4| 5| 6| 7|
++--+--+--+--+--+--+--+--+
+| 8| 9|10|11|12|13|14|15|
++--+--+--+--+--+--+--+--+
+|16|17|18|19|20|21|22|23|
+...
+```
+
+### X,Y座標 から インデックス に変換する
+```
+pos = x + (y * mapWidth)
+```
+`mapWidth`は、ゲーム情報の`map`から、次のようにして計算できます:
+```
+mapWidth = map[0].length
+```
+
+### インデックス から X,Y座標 に変換する
+```
+x = pos % mapWidth
+y = Math.floor(pos / mapWidth)
+```
+
+## マップ情報
+マップ情報は、ゲーム情報の`map`に入っています。 文字列の配列になっており、ひとつひとつの文字がマス情報を表しています。 それをもとにマップのデザインを知る事が出来ます:
+* `(スペース)` ... マス無し
+* `-` ... マス
+* `b` ... 初期配置される黒石
+* `w` ... 初期配置される白石
+
+例えば、4*4の次のような単純なマップがあるとします:
+```text
++---+---+---+---+
+|   |   |   |   |
++---+---+---+---+
+|   | ○ | ● |   |
++---+---+---+---+
+|   | ● | ○ |   |
++---+---+---+---+
+|   |   |   |   |
++---+---+---+---+
+```
+
+この場合、マップデータはこのようになります:
+```javascript
+['----', '-wb-', '-bw-', '----']
+```
+
+## ユーザーにフォームを提示して対話可能Botを作成する
+ユーザーとのコミュニケーションを行うため、ゲームの設定画面でユーザーにフォームを提示することができます。 例えば、Botの強さをユーザーが設定できるようにする、といったシナリオが考えられます。
+
+フォームを提示するには、`reversi-game`ストリームに次のメッセージを送信します:
+```javascript
+{
+  type: 'init-form',
+  body: [フォームコントロールの配列]
+}
+```
+
+フォームコントロールの配列については今から説明します。 フォームコントロールは、次のようなオブジェクトです:
+```javascript
+{
+  id: 'switch1',
+  type: 'switch',
+  label: 'Enable hoge',
+  value: false
+}
+```
+`id` ... コントロールのID。 `type` ... コントロールの種類。後述します。 `label` ... コントロールと一緒に表記するテキスト。 `value` ... コントロールのデフォルト値。
+
+### フォームの操作を受け取る
+ユーザーがフォームを操作すると、ストリームから`update-form`イベントが流れてきます。 イベントの中身には、コントロールのIDと、ユーザーが設定した値が含まれています。 例えば、上で示したスイッチをユーザーがオンにしたとすると、次のイベントが流れてきます:
+```javascript
+{
+  id: 'switch1',
+  value: true
+}
+```
+
+### フォームコントロールの種類
+#### Interruptor
+type: `switch` スイッチを表示します。何かの機能をオン/オフさせたい場合に有用です。
+
+##### プロパティ
+`label` ... スイッチに表記するテキスト。
+
+#### ラジオボタン
+type: `radio` ラジオボタンを表示します。選択肢を提示するのに有用です。例えば、Botの強さを設定させるなどです。
+
+##### プロパティ
+`items` ... ラジオボタンの選択肢。例:
+```javascript
+items: [{
+  label: 'å¼±',
+  value: 1
+}, {
+  label: '中',
+  value: 2
+}, {
+  label: 'å¼·',
+  value: 3
+}]
+```
+
+#### スライダー
+type: `slider` スライダーを表示します。
+
+##### プロパティ
+`min` ... スライダーの下限。 `max` ... スライダーの上限。 `step` ... 入力欄で刻むステップ値。
+
+#### テキストボックス
+type: `textbox` テキストボックスを表示します。ユーザーになにか入力させる一般的な用途に利用できます。
+
+## ユーザーにメッセージを表示する
+設定画面でユーザーと対話する、フォーム以外のもうひとつの方法がこれです。ユーザーになにかメッセージを表示することができます。 例えば、ユーザーがBotの対応していないモードやマップを選択したとき、警告を表示するなどです。 メッセージを表示するには、次のメッセージをストリームに送信します:
+```javascript
+{
+  type: 'message',
+  body: {
+    text: 'メッセージ内容',
+    type: 'メッセージの種類'
+  }
+}
+```
+メッセージの種類: `success`, `info`, `warning`, `error`。
+
+## 投了する
+投了をするには、<a href="./api/endpoints/games/reversi/games/surrender">このエンドポイント</a>にリクエストします。
diff --git a/src/docs/es-ES/advanced/stream.md b/src/docs/es-ES/advanced/stream.md
new file mode 100644
index 0000000000..97e30e98de
--- /dev/null
+++ b/src/docs/es-ES/advanced/stream.md
@@ -0,0 +1,350 @@
+# ストリーミングAPI
+
+ストリーミングAPIを使うと、リアルタイムで様々な情報(例えばタイムラインに新しい投稿が流れてきた、メッセージが届いた、フォローされた、など)を受け取ったり、様々な操作を行ったりすることができます。
+
+## ストリームに接続する
+
+ストリーミングAPIを利用するには、まずMisskeyサーバーに**websocket**接続する必要があります。
+
+以下のURLに、`i`というパラメータ名で認証情報を含めて、websocket接続してください。例:
+```
+%WS_URL%/streaming?i=xxxxxxxxxxxxxxx
+```
+
+認証情報は、自分のAPIキーや、アプリケーションからストリームに接続する際はユーザーのアクセストークンのことを指します。
+
+<div class="info">ℹ️ 認証情報の取得については、<a href="./api">こちらのドキュメント</a>をご確認ください。</div>
+
+---
+
+認証情報は省略することもできますが、その場合非ログインでの利用ということになり、受信できる情報や可能な操作は限られます。例:
+
+```
+%WS_URL%/streaming
+```
+
+---
+
+ストリームに接続すると、後述するAPI操作や、投稿の購読を行ったりすることができます。 しかしまだこの段階では、例えばタイムラインへの新しい投稿を受信したりすることはできません。 それを行うには、ストリーム上で、後述する**チャンネル**に接続する必要があります。
+
+**ストリームでのやり取りはすべてJSONです。**
+
+## Canal
+MisskeyのストリーミングAPIにはチャンネルという概念があります。これは、送受信する情報を分離するための仕組みです。 Misskeyのストリームに接続しただけでは、まだリアルタイムでタイムラインの投稿を受信したりはできません。 ストリーム上でチャンネルに接続することで、様々な情報を受け取ったり情報を送信したりすることができるようになります。
+
+ひとつのストリーム上で、同時に複数のチャンネルに接続することができます。
+
+### チャンネルに接続する
+チャンネルに接続するには、次のようなデータをJSONでストリームに送信します:
+
+```json
+{
+    type: 'connect',
+    body: {
+        channel: 'xxxxxxxx',
+        id: 'foobar',
+        params: {
+            ...
+        }
+    }
+}
+```
+
+ここで、
+* `channel`には接続したいチャンネル名を設定します。チャンネルの種類については後述します。
+* `id`にはそのチャンネルとやり取りするための任意のIDを設定します。ストリームでは様々なメッセージが流れるので、そのメッセージがどのチャンネルからのものなのか識別する必要があるからです。このIDは、UUIDや、乱数のようなもので構いません。
+* `params`はチャンネルに接続する際のパラメータです。チャンネルによって接続時に必要とされるパラメータは異なります。パラメータ不要のチャンネルに接続する際は、このプロパティは省略可能です。
+
+<div class="info">ℹ️ IDはチャンネルごとではなく「チャンネルの接続ごと」です。なぜなら、同じチャンネルに異なるパラメータで複数接続するケースもあるからです。</div>
+
+### チャンネルからのメッセージを受け取る
+例えばタイムラインのチャンネルなら、新しい投稿があった時にメッセージを発します。そのメッセージを受け取ることで、タイムラインに新しい投稿がされたことをリアルタイムで知ることができます。
+
+チャンネルがメッセージを発すると、次のようなデータがJSONでストリームに流れてきます:
+```json
+{
+    type: 'channel',
+    body: {
+        id: 'foobar',
+        type: 'something',
+        body: {
+            some: 'thing'
+        }
+    }
+}
+```
+
+ここで、
+* `id`には前述したそのチャンネルに接続する際に設定したIDが設定されています。これで、このメッセージがどのチャンネルからのものなのか知ることができます。
+* `type`にはメッセージの種類が設定されます。チャンネルによって、どのような種類のメッセージが流れてくるかは異なります。
+* `body`にはメッセージの内容が設定されます。チャンネルによって、どのような内容のメッセージが流れてくるかは異なります。
+
+### チャンネルに向けてメッセージを送信する
+チャンネルによっては、メッセージを受け取るだけでなく、こちらから何かメッセージを送信し、何らかの操作を行える場合があります。
+
+チャンネルにメッセージを送信するには、次のようなデータをJSONでストリームに送信します:
+```json
+{
+    type: 'channel',
+    body: {
+        id: 'foobar',
+        type: 'something',
+        body: {
+            some: 'thing'
+        }
+    }
+}
+```
+
+ここで、
+* `id`には前述したそのチャンネルに接続する際に設定したIDを設定します。これで、このメッセージがどのチャンネルに向けたものなのか識別させることができます。
+* `type`にはメッセージの種類を設定します。チャンネルによって、どのような種類のメッセージを受け付けるかは異なります。
+* `body`にはメッセージの内容を設定します。チャンネルによって、どのような内容のメッセージを受け付けるかは異なります。
+
+### チャンネルから切断する
+チャンネルから切断するには、次のようなデータをJSONでストリームに送信します:
+
+```json
+{
+    type: 'disconnect',
+    body: {
+        id: 'foobar'
+    }
+}
+```
+
+ここで、
+* `id`には前述したそのチャンネルに接続する際に設定したIDを設定します。
+
+## ストリームを経由してAPIリクエストする
+
+ストリームを経由してAPIリクエストすると、HTTPリクエストを発生させずにAPIを利用できます。そのため、コードを簡潔にできたり、パフォーマンスの向上を見込めるかもしれません。
+
+ストリームを経由してAPIリクエストするには、次のようなデータをJSONでストリームに送信します:
+```json
+{
+    type: 'api',
+    body: {
+        id: 'xxxxxxxxxxxxxxxx',
+        endpoint: 'notes/create',
+        data: {
+            text: 'yee haw!'
+        }
+    }
+}
+```
+
+ここで、
+* `id`には、APIのレスポンスを識別するための、APIリクエストごとの一意なIDを設定する必要があります。UUIDや、簡単な乱数のようなもので構いません。
+* `endpoint`には、あなたがリクエストしたいAPIのエンドポイントを指定します。
+* `data`には、エンドポイントのパラメータを含めます。
+
+<div class="info">ℹ️ APIのエンドポイントやパラメータについてはAPIリファレンスをご確認ください。</div>
+
+### レスポンスの受信
+
+APIへリクエストすると、レスポンスがストリームから次のような形式で流れてきます。
+
+```json
+{
+    type: 'api:xxxxxxxxxxxxxxxx',
+    body: {
+        ...
+    }
+}
+```
+
+ここで、
+* `xxxxxxxxxxxxxxxx`の部分には、リクエストの際に設定された`id`が含まれています。これにより、どのリクエストに対するレスポンスなのか判別することができます。
+* `body`には、レスポンスが含まれています。
+
+## 投稿のキャプチャ
+
+Misskeyは投稿のキャプチャと呼ばれる仕組みを提供しています。これは、指定した投稿のイベントをストリームで受け取る機能です。
+
+例えばタイムラインを取得してユーザーに表示したとします。ここで誰かがそのタイムラインに含まれるどれかの投稿に対してリアクションしたとします。
+
+しかし、クライアントからするとある投稿にリアクションが付いたことなどは知る由がないため、リアルタイムでリアクションをタイムライン上の投稿に反映して表示するといったことができません。
+
+この問題を解決するために、Misskeyは投稿のキャプチャ機構を用意しています。投稿をキャプチャすると、その投稿に関するイベントを受け取ることができるため、リアルタイムでリアクションを反映させたりすることが可能になります。
+
+### 投稿をキャプチャする
+
+投稿をキャプチャするには、ストリームに次のようなメッセージを送信します:
+
+```json
+{
+    type: 'subNote',
+    body: {
+        id: 'xxxxxxxxxxxxxxxx'
+    }
+}
+```
+
+ここで、
+* `id`にキャプチャしたい投稿の`id`を設定します。
+
+このメッセージを送信すると、Misskeyにキャプチャを要請したことになり、以後、その投稿に関するイベントが流れてくるようになります。
+
+例えば投稿にリアクションが付いたとすると、次のようなメッセージが流れてきます:
+
+```json
+{
+    type: 'noteUpdated',
+    body: {
+        id: 'xxxxxxxxxxxxxxxx',
+        type: 'reacted',
+        body: {
+            reaction: 'like',
+            userId: 'yyyyyyyyyyyyyyyy'
+        }
+    }
+}
+```
+
+ここで、
+* `body`内の`id`に、イベントを発生させた投稿のIDが設定されます。
+* `body`内の`type`に、イベントの種類が設定されます。
+* `body`内の`body`に、イベントの詳細が設定されます。
+
+#### イベントの種類
+
+##### `reacted`
+その投稿にリアクションがされた時に発生します。
+
+* `reaction`に、リアクションの種類が設定されます。
+* `userId`に、リアクションを行ったユーザーのIDが設定されます。
+
+例:
+```json
+{
+    type: 'noteUpdated',
+    body: {
+        id: 'xxxxxxxxxxxxxxxx',
+        type: 'reacted',
+        body: {
+            reaction: 'like',
+            userId: 'yyyyyyyyyyyyyyyy'
+        }
+    }
+}
+```
+
+##### `deleted`
+その投稿が削除された時に発生します。
+
+* `deletedAt`に、削除日時が設定されます。
+
+例:
+```json
+{
+    type: 'noteUpdated',
+    body: {
+        id: 'xxxxxxxxxxxxxxxx',
+        type: 'deleted',
+        body: {
+            deletedAt: '2018-10-22T02:17:09.703Z'
+        }
+    }
+}
+```
+
+##### `pollVoted`
+その投稿に添付されたアンケートに投票された時に発生します。
+
+* `choice`に、選択肢IDが設定されます。
+* `userId`に、投票を行ったユーザーのIDが設定されます。
+
+例:
+```json
+{
+    type: 'noteUpdated',
+    body: {
+        id: 'xxxxxxxxxxxxxxxx',
+        type: 'pollVoted',
+        body: {
+            choice: 2,
+            userId: 'yyyyyyyyyyyyyyyy'
+        }
+    }
+}
+```
+
+### 投稿のキャプチャを解除する
+
+その投稿がもう画面に表示されなくなったりして、その投稿に関するイベントをもう受け取る必要がなくなったときは、キャプチャの解除を申請してください。
+
+次のメッセージを送信します:
+
+```json
+{
+    type: 'unsubNote',
+    body: {
+        id: 'xxxxxxxxxxxxxxxx'
+    }
+}
+```
+
+ここで、
+* `id`にキャプチャを解除したい投稿の`id`を設定します。
+
+このメッセージを送信すると、以後、その投稿に関するイベントは流れてこないようになります。
+
+# チャンネル一覧
+## `main`
+アカウントに関する基本的な情報が流れてきます。このチャンネルにパラメータはありません。
+
+### 流れてくるイベント一覧
+
+#### `renote`
+自分の投稿がRenoteされた時に発生するイベントです。自分自身の投稿をRenoteしたときは発生しません。
+
+#### `mention`
+誰かからメンションされたときに発生するイベントです。
+
+#### `readAllNotifications`
+自分宛ての通知がすべて既読になったことを表すイベントです。このイベントを利用して、「通知があることを示すアイコン」のようなものをオフにしたりする等のケースが想定されます。
+
+#### `meUpdated`
+自分の情報が更新されたことを表すイベントです。
+
+#### `follow`
+自分が誰かをフォローしたときに発生するイベントです。
+
+#### `unfollow`
+自分が誰かのフォローを解除したときに発生するイベントです。
+
+#### `followed`
+自分が誰かにフォローされたときに発生するイベントです。
+
+## `homeTimeline`
+ホームタイムラインの投稿情報が流れてきます。このチャンネルにパラメータはありません。
+
+### 流れてくるイベント一覧
+
+#### `note`
+タイムラインに新しい投稿が流れてきたときに発生するイベントです。
+
+## `localTimeline`
+ローカルタイムラインの投稿情報が流れてきます。このチャンネルにパラメータはありません。
+
+### 流れてくるイベント一覧
+
+#### `note`
+ローカルタイムラインに新しい投稿が流れてきたときに発生するイベントです。
+
+## `hybridTimeline`
+ソーシャルタイムラインの投稿情報が流れてきます。このチャンネルにパラメータはありません。
+
+### 流れてくるイベント一覧
+
+#### `note`
+ソーシャルタイムラインに新しい投稿が流れてきたときに発生するイベントです。
+
+## `globalTimeline`
+グローバルタイムラインの投稿情報が流れてきます。このチャンネルにパラメータはありません。
+
+### 流れてくるイベント一覧
+
+#### `note`
+グローバルタイムラインに新しい投稿が流れてきたときに発生するイベントです。
diff --git a/src/docs/es-ES/features/antenna.md b/src/docs/es-ES/features/antenna.md
new file mode 100644
index 0000000000..f321d79e2d
--- /dev/null
+++ b/src/docs/es-ES/features/antenna.md
@@ -0,0 +1,4 @@
+# Antenas
+アンテナは、自由に条件を設定して、合致するノートを自動で収集することができる機能です。
+
+条件を設定したアンテナが作成された状態で、条件に合致するノートが投稿されると、リアルタイムでそのアンテナのタイムラインにノートが追加されます。
diff --git a/src/docs/es-ES/features/custom-emoji.md b/src/docs/es-ES/features/custom-emoji.md
new file mode 100644
index 0000000000..842db20f02
--- /dev/null
+++ b/src/docs/es-ES/features/custom-emoji.md
@@ -0,0 +1,2 @@
+# Emojis personalizados
+カスタム絵文字は、インスタンスで用意された画像を絵文字のように使える機能です。 ノート、リアクション、チャット、自己紹介、名前などの場所で使うことができます。 カスタム絵文字をそれらの場所で使うには、絵文字ピッカーボタン(ある場合)を押すか、`:`を入力して絵文字サジェストを表示します。 テキスト内に`:foo:`のような形式の文字列が見つかると、`foo`の部分がカスタム絵文字名と解釈され、表示時には対応したカスタム絵文字に置き換わります。
diff --git a/src/docs/es-ES/features/deck.md b/src/docs/es-ES/features/deck.md
new file mode 100644
index 0000000000..73e9efdaaf
--- /dev/null
+++ b/src/docs/es-ES/features/deck.md
@@ -0,0 +1,18 @@
+# Deck
+
+デッキは利用可能なUIのひとつです。「カラム」と呼ばれるビューを複数並べて表示させることで、カスタマイズ性が高く、情報量の多いUIが構築できることが特徴です。
+
+## カラムの追加
+デッキの背景を右クリックし、「カラムを追加」して任意のカラムを追加できます。
+
+## カラムの移動
+カラムは、ドラッグアンドドロップで他のカラムと位置を入れ替えることが出来るほか、カラムメニュー(カラムのヘッダー右クリック)から位置を移動させることもできます。
+
+## カラムの水平分割
+カラムは左右だけでなく、上下に並べることもできます。 カラムメニューを開き、「左に重ねる」を選択すると、左のカラムの下に現在のカラムが移動します。 上下分割を解除するには、カラムメニューの「右に出す」を選択します。
+
+## カラムの設定
+カラムメニューの「編集」を選択するとカラムの設定を編集できます。カラムの名前を変えたり、幅を変えたりできます。
+
+## デッキの設定
+デッキに関する設定は、[settings/deck](/settings/deck)で行えます。
diff --git a/src/docs/es-ES/features/drive.md b/src/docs/es-ES/features/drive.md
new file mode 100644
index 0000000000..c445b99a86
--- /dev/null
+++ b/src/docs/es-ES/features/drive.md
@@ -0,0 +1,17 @@
+# Drive
+ドライブは、Misskey上でファイルを管理できる機能です。
+
+[ドライブのページ](/my/drive)から任意のファイルをアップロードできるほか、アバターに設定した画像や、ノートに添付したファイルなどもすべてドライブにアップロードされます。
+
+<div class="warn">⚠️ ドライブからファイルを削除すると、そのファイルが添付されたノートも消えます。</div>
+
+ドライブにアップロードされたファイルは、いつでもダウンロードすることができるほか、ノート作成時に「ドライブからファイルを添付」することでファイルを再利用することもできます。
+
+ドライブ内にフォルダを作り、複数のファイルをまとめて整理することもできます。
+
+## 閲覧注意 (NSFW)
+<div class="info">ℹ️ この項目が閲覧注意なわけではありません</div>
+
+閲覧注意またはNSFW (Not safe for work) は、ドライブのファイルに設定することができるフラグです。 閲覧注意フラグを設定されたファイルは、表示される際に閲覧者の操作なしには表示されなくなります。 このフラグは、例えば職場や公共の場で閲覧するのに適切でないと思われる画像などに設定し、そのような画像が突然表示されてしまうことを防ぐ目的で使われます。
+
+このフラグは手動でオンオフを切り替えられるほか、モデレーターの判断で設定される場合もあります。
diff --git a/src/docs/es-ES/features/favorite.md b/src/docs/es-ES/features/favorite.md
new file mode 100644
index 0000000000..f108d22319
--- /dev/null
+++ b/src/docs/es-ES/features/favorite.md
@@ -0,0 +1,4 @@
+# Favorito
+[ノート](./node)をお気に入りとして登録できる機能です。 お気に入り登録したノートは、[お気に入りページ](./my/favorites)で一覧することができます。 お気に入りに登録したことは相手に通知されず、お気に入りは自分しか見ることができません。
+
+ノートをお気に入り登録するには、ノートメニューの「お気に入り」を押します。お気に入り解除するには、ノートメニューの「お気に入り解除」を押します。
diff --git a/src/docs/es-ES/features/follow.md b/src/docs/es-ES/features/follow.md
new file mode 100644
index 0000000000..474cc594fb
--- /dev/null
+++ b/src/docs/es-ES/features/follow.md
@@ -0,0 +1,2 @@
+# Siguiendo
+ユーザーをフォローすると、タイムラインにそのユーザーの投稿が表示されるようになります。ただし、他のユーザーに対する返信は含まれません。 ユーザーをフォローするには、ユーザーページの「フォロー」ボタンをクリックします。フォローを解除するには、もう一度クリックします。
diff --git a/src/docs/es-ES/features/keyboard-shortcut.md b/src/docs/es-ES/features/keyboard-shortcut.md
new file mode 100644
index 0000000000..026b0ea0c0
--- /dev/null
+++ b/src/docs/es-ES/features/keyboard-shortcut.md
@@ -0,0 +1,66 @@
+# キーボードショートカット
+
+## Global
+これらのショートカットは基本的にどこでも使えます。
+<table>
+    <thead>
+        <tr><th>ショートカット</th><th>効果</th><th>由来</th></tr>
+    </thead>
+    <tbody>
+        <tr><td><kbd class="key">P</kbd>, <kbd class="key">N</kbd></td><td>新規投稿</td><td><b>P</b>ost, <b>N</b>ew, <b>N</b>ote</td></tr>
+        <tr><td><kbd class="key">T</kbd></td><td>タイムラインの最も新しい投稿にフォーカス</td><td><b>T</b>imeline, <b>T</b>op</td></tr>
+        <tr><td><kbd class="group"><kbd class="key">Shift</kbd> + <kbd class="key">N</kbd></kbd></td><td>通知を表示/隠す</td><td><b>N</b>otifications</td></tr>
+        <tr><td><kbd class="key">S</kbd></td><td>Buscar</td><td><b>S</b>earch</td></tr>
+        <tr><td><kbd class="key">H</kbd>, <kbd class="key">?</kbd></td><td>ヘルプを表示</td><td><b>H</b>elp</td></tr>
+    </tbody>
+</table>
+
+## 投稿にフォーカスされた状態
+<table>
+    <thead>
+        <tr><th>ショートカット</th><th>効果</th><th>由来</th></tr>
+    </thead>
+    <tbody>
+        <tr><td><kbd class="key">↑</kbd>, <kbd class="key">K</kbd>, <kbd class="group"><kbd class="key">Shift</kbd> + <kbd class="key">Tab</kbd></kbd></td><td>上の投稿にフォーカスを移動</td><td>-</td></tr>
+        <tr><td><kbd class="key">↓</kbd>, <kbd class="key">J</kbd>, <kbd class="key">Tab</kbd></td><td>下の投稿にフォーカスを移動</td><td>-</td></tr>
+        <tr><td><kbd class="key">R</kbd></td><td>返信フォームを開く</td><td><b>R</b>eply</td></tr>
+        <tr><td><kbd class="key">Q</kbd></td><td>Renoteフォームを開く</td><td><b>Q</b>uote</td></tr>
+        <tr><td><kbd class="group"><kbd class="key">Ctrl</kbd> + <kbd class="key">Q</kbd></kbd></td><td>即刻Renoteする(フォームを開かずに)</td><td>-</td></tr>
+        <tr><td><kbd class="key">E</kbd>, <kbd class="key">A</kbd>, <kbd class="key">+</kbd></td><td>リアクションフォームを開く</td><td><b>E</b>mote, re<b>A</b>ction</td></tr>
+        <tr><td><kbd class="key">0</kbd>~<kbd class="key">9</kbd></td><td>数字に対応したリアクションをする(対応については後述)</td><td>-</td></tr>
+        <tr><td><kbd class="key">F</kbd>, <kbd class="key">B</kbd></td><td>お気に入りに登録</td><td><b>F</b>avorite, <b>B</b>ookmark</td></tr>
+        <tr><td><kbd class="key">Del</kbd>, <kbd class="group"><kbd class="key">Ctrl</kbd> + <kbd class="key">D</kbd></kbd></td><td>投稿を削除</td><td><b>D</b>elete</tr>
+        <tr><td><kbd class="key">M</kbd>, <kbd class="key">O</kbd></td><td>投稿に対するメニューを開く</td><td><b>M</b>ore, <b>O</b>ther</td></tr>
+        <tr><td><kbd class="key">S</kbd></td><td>CWで隠された部分を表示 or 隠す</td><td><b>S</b>how, <b>S</b>ee</td></tr>
+        <tr><td><kbd class="key">Esc</kbd></td><td>フォーカスを外す</td><td>-</td></tr>
+    </tbody>
+</table>
+
+## Renoteフォーム
+<table>
+    <thead>
+        <tr><th>ショートカット</th><th>効果</th><th>由来</th></tr>
+    </thead>
+    <tbody>
+        <tr><td><kbd class="key">Enter</kbd></td><td>Renoteする</td><td>-</td></tr>
+        <tr><td><kbd class="key">Q</kbd></td><td>フォームを展開する</td><td><b>Q</b>uote</td></tr>
+        <tr><td><kbd class="key">Esc</kbd></td><td>フォームを閉じる</td><td>-</td></tr>
+    </tbody>
+</table>
+
+## リアクションフォーム
+デフォルトで「👍」にフォーカスが当たっている状態です。
+<table>
+    <thead>
+        <tr><th>ショートカット</th><th>効果</th><th>由来</th></tr>
+    </thead>
+    <tbody>
+        <tr><td><kbd class="key">↑</kbd>, <kbd class="key">K</kbd></td><td>上のリアクションにフォーカスを移動</td><td>-</td></tr>
+        <tr><td><kbd class="key">↓</kbd>, <kbd class="key">J</kbd></td><td>下のリアクションにフォーカスを移動</td><td>-</td></tr>
+        <tr><td><kbd class="key">←</kbd>, <kbd class="key">H</kbd>, <kbd class="group"><kbd class="key">Shift</kbd> + <kbd class="key">Tab</kbd></kbd></td><td>左のリアクションにフォーカスを移動</td><td>-</td></tr>
+        <tr><td><kbd class="key">→</kbd>, <kbd class="key">L</kbd>, <kbd class="key">Tab</kbd></td><td>右のリアクションにフォーカスを移動</td><td>-</td></tr>
+        <tr><td><kbd class="key">Enter</kbd>, <kbd class="key">Space</kbd>, <kbd class="key">+</kbd></td><td>リアクション確定</td><td>-</td></tr>
+        <tr><td><kbd class="key">0</kbd>~<kbd class="key">9</kbd></td><td>数字に対応したリアクションで確定</td><td>-</td></tr>
+        <tr><td><kbd class="key">Esc</kbd></td><td>リアクションするのをやめる</td><td>-</td></tr>
+    </tbody>
+</table>
diff --git a/src/docs/es-ES/features/mfm.md b/src/docs/es-ES/features/mfm.md
new file mode 100644
index 0000000000..5be2df4f30
--- /dev/null
+++ b/src/docs/es-ES/features/mfm.md
@@ -0,0 +1,12 @@
+# MFM
+MFMは、Misskey Flavored Markdownの略で、Misskeyの様々な場所で使用できる専用のマークアップ言語です。 MFMで使用可能な構文は[MFMチートシート](/mfm-cheat-sheet)で確認できます。
+
+## MFMが使用可能な場所の例
+- ノート本文
+- CW注釈
+- ユーザーの名前
+- ユーザーの自己紹介
+
+## 開発者向け情報
+MFMのパーサー実装はライブラリとして公開されており、簡単にクライアントにMFMを組み込むことが可能です。
+- [misskey-dev/mfm.js](https://github.com/misskey-dev/mfm.js) - JavaScriptパーサー実装
diff --git a/src/docs/es-ES/features/mute.md b/src/docs/es-ES/features/mute.md
new file mode 100644
index 0000000000..331e5cc10a
--- /dev/null
+++ b/src/docs/es-ES/features/mute.md
@@ -0,0 +1,13 @@
+# Silenciar
+
+ユーザーをミュートすると、そのユーザーに関する次のコンテンツがMisskeyに表示されなくなります:
+
+* タイムラインや投稿の検索結果内の、そのユーザーの投稿(およびそれらの投稿に対する返信やRenote)
+* そのユーザーからの通知
+* メッセージ履歴一覧内の、そのユーザーとのメッセージ履歴
+
+ユーザーをミュートするには、対象のユーザーのユーザーページに表示されている「ミュート」ボタンを押します。
+
+ミュートを行ったことは相手に通知されず、ミュートされていることを知ることもできません。
+
+設定>ミュート から、自分がミュートしているユーザー一覧を確認することができます。
diff --git a/src/docs/es-ES/features/note.md b/src/docs/es-ES/features/note.md
new file mode 100644
index 0000000000..70f4a0ddf5
--- /dev/null
+++ b/src/docs/es-ES/features/note.md
@@ -0,0 +1,51 @@
+# Notas
+ノートは、Misskeyに投稿される、文章、ファイル、アンケートなどを含むコンテンツで、Misskeyの中心的概念です。また、そのノートを作成する行為自体もノートと呼ばれます。
+
+ノートが作成されると、[タイムライン](./timeline)に追加され、自分の[フォロワー](./follow)やサーバーのユーザーが見れるようになります。
+
+ノートには、[リアクション](./reaction)を行うことができます。また、返信や引用もできます。
+
+ノートを[お気に入り](./favorite)登録することで、後で簡単に見返すことができます。
+
+## ノートを作成する
+ノートを作成するには、画面上にある鉛筆マークのボタンを押して、作成フォームを開きます。作成フォームに内容を入力し、「ノート」ボタンを押すことでノートが作成されます。 ノートには、画像、動画など任意のファイルや、[アンケート](./poll)を添付することができます。また、本文中には[MFM](./mfm)が使用でき、[メンション](./mention)や[ハッシュタグ](./hashtag)を含めることもできます。 他にも、CWや公開範囲といった設定も行えます(詳細は後述)。
+<div class="info">ℹ️ コンピューターのクリップボードに画像データがある状態で、フォーム内のテキストボックスにペーストするとその画像を添付することができます。</div>
+<div class="info">ℹ️ テキストボックス内で<kbd class="key">Ctrl + Enter</kbd>を押すことでも投稿できます。</div>
+
+## Renotar
+既にあるノートを引用、もしくはそのノートを新しいノートとして共有する行為、またそれによって作成されたノートをRenoteと呼びます。 自分がフォローしているユーザーの、気に入ったノートを自分のフォロワーに共有したい場合や、過去の自分のノートを再度共有したい場合に使います。 同じノートに対して無制限にRenoteを行うことができますが、あまり連続して使用すると迷惑になる場合もあるので、注意しましょう。
+<div class="warn">⚠️ 公開範囲がフォロワーやダイレクトのノートはRenoteできません</div>
+
+Renoteを削除するには、Renoteの時刻表示の隣にある「...」を押し、「Renote解除」を選択します。
+
+## CW
+Contents Warningの略で、ノートの内容を、閲覧者の操作なしには表示しないようにできる機能です。主に長大な内容を隠すためや、ネタバレ防止などに使うことができます。 設定するには、フォームの「内容を隠す」ボタン(目のアイコン)を押します。すると新しい入力エリアが表れるので、そこに内容の要約を記入します。
+
+## Visibilidad
+ノートごとに、そのノートが公開される範囲を設定することができます。フォームの「ノート」ボタンの左にあるアイコンを押すと公開範囲を以下から選択できます。
+
+### Público
+全ての人に対してノートが公開されるほか、サーバーの全てのタイムライン(ホームタイムライン、ローカルタイムライン、ソーシャルタイムライン、グローバルタイムライン)にノートが流れます。
+<div class="warn">⚠️ アカウントが<a href="./silence">サイレンス</a>状態の時は、この公開範囲は使用できません。</div>
+
+### Inicio
+全ての人に対してノートが公開されますが、フォロワー以外のローカルタイムライン、ソーシャルタイムライン、グローバルタイムラインにはノートは流れません。
+
+### Seguidores
+自分のフォロワーに対してのみノートを公開します。フォロワーの全てのタイムラインに流れます。
+
+### Mensaje directo
+指定したユーザーに対してのみノートを公開します。指定したユーザーの全てのタイムラインに流れます。
+
+### 「ローカルのみ」オプション
+このオプションを有効にすると、リモートにノートを連合しなくなります。
+
+### 公開範囲の比較
+<table>
+    <tr><th></th><th>Público</th><th>Inicio</th><th>Seguidores</th><th>Mensaje directo</th></tr>
+    <tr><th>フォロワーのLTL/STL/GTL</th><td>✔</td><td>✔</td><td>✔</td><td></td></tr>
+    <tr><th>非フォロワーのLTL/STL/GTL</th><td>✔</td><td></td><td></td><td></td></tr>
+</table>
+
+## Fijar
+ノートをピン留めすると、ユーザーページに常にそのノートを表示しておくことができます。 ノートのメニューを開き、「ピン留め」を選択してピン留めできます。 複数のノートをピン留めできます。
diff --git a/src/docs/es-ES/features/pages.md b/src/docs/es-ES/features/pages.md
new file mode 100644
index 0000000000..7fc6ee29c3
--- /dev/null
+++ b/src/docs/es-ES/features/pages.md
@@ -0,0 +1,10 @@
+# Pages
+
+## Variables
+変数を使うことで動的なページを作成できます。テキスト内で <b>{ 変数名 }</b> と書くとそこに変数の値を埋め込めます。例えば <b>Hello { thing } world!</b> というテキストで、変数(thing)の値が <b>ai</b> だった場合、テキストは <b>Hello ai world!</b> になります。
+
+変数の評価(値を算出すること)は上から下に行われるので、ある変数の中で自分より下の変数を参照することはできません。例えば上から <b>A、B、C</b> と3つの変数を定義したとき、<b>C</b>の中で<b>A</b>や<b>B</b>を参照することはできますが、<b>A</b>の中で<b>B</b>や<b>C</b>を参照することはできません。
+
+ユーザーからの入力を受け取るには、ページに「ユーザー入力」ブロックを設置し、「変数名」に入力を格納したい変数名を設定します(変数は自動で作成されます)。その変数を使ってユーザー入力に応じた動作を行えます。
+
+関数を使うと、値の算出処理を再利用可能な形にまとめることができます。関数を作るには、「関数」タイプの変数を作成します。関数にはスロット(引数)を設定することができ、スロットの値は関数内で変数として利用可能です。また、関数を引数に取る関数(高階関数と呼ばれます)も存在します。関数は予め定義しておくほかに、このような高階関数のスロットに即席でセットすることもできます。
diff --git a/src/docs/es-ES/features/reaction.md b/src/docs/es-ES/features/reaction.md
new file mode 100644
index 0000000000..3d13c8faed
--- /dev/null
+++ b/src/docs/es-ES/features/reaction.md
@@ -0,0 +1,11 @@
+# Reacción
+他の人のノートに、絵文字を付けて簡単にあなたの反応を伝えられる機能です。 リアクションするには、ノートの + アイコンをクリックしてピッカーを表示し、絵文字を選択します。 リアクションには[カスタム絵文字](./custom-emoji)も使用できます。
+
+## リアクションピッカーのカスタマイズ
+ピッカーに表示される絵文字を自分好みにカスタマイズすることができます。 設定の「リアクション」で設定します。
+
+## リモート投稿へのリアクションについて
+リアクションはMisskeyオリジナルの機能であるため、リモートインスタンスがMisskeyでない限りは、ほとんどの場合「Like」としてアクティビティが送信されます。一般的にはLikeは「お気に入り」として実装されているようです。
+
+## リモートからのリアクションについて
+リモートから「Like」アクティビティを受信したとき、Misskeyでは「👍」のリアクションとして解釈されます。
diff --git a/src/docs/es-ES/features/silence.md b/src/docs/es-ES/features/silence.md
new file mode 100644
index 0000000000..31292d9057
--- /dev/null
+++ b/src/docs/es-ES/features/silence.md
@@ -0,0 +1,6 @@
+# Silenciar
+サイレンスは、アカウントに設定される状態のひとつです。
+
+アカウントがサイレンス状態になると、ノートの公開範囲をパブリックにできなくなります。 ホーム、フォロワー、ダイレクトは選択可能なため、サイレンスを受けた場合でもフォロワーやあなたのユーザーページを直接訪れた場合は投稿を閲覧できますが、GTL(連合タイムライン)やLTL(ローカルタイムライン)には投稿が流れません。
+
+アカウントのサイレンス状態は、サーバーのモデレーターによって有効化/無効化されます。
diff --git a/src/docs/es-ES/features/theme.md b/src/docs/es-ES/features/theme.md
new file mode 100644
index 0000000000..3e379ee5f5
--- /dev/null
+++ b/src/docs/es-ES/features/theme.md
@@ -0,0 +1,68 @@
+# Tema
+
+テーマを設定して、Misskeyクライアントの見た目を変更できます。
+
+## テーマの設定
+設定 > テーマ
+
+## テーマを作成する
+テーマコードはJSON5で記述されたテーマオブジェクトです。 テーマは以下のようなオブジェクトです。
+``` js
+{
+    id: '17587283-dd92-4a2c-a22c-be0637c9e22a',
+
+    name: 'Danboard',
+    author: 'syuilo',
+
+    base: 'light',
+
+    props: {
+        accent: 'rgb(218, 141, 49)',
+        bg: 'rgb(218, 212, 190)',
+        fg: 'rgb(115, 108, 92)',
+        panel: 'rgb(236, 232, 220)',
+        renote: 'rgb(100, 152, 106)',
+        link: 'rgb(100, 152, 106)',
+        mention: '@accent',
+        hashtag: 'rgb(100, 152, 106)',
+        header: 'rgba(239, 227, 213, 0.75)',
+        navBg: 'rgb(216, 206, 182)',
+        inputBorder: 'rgba(0, 0, 0, 0.1)',
+    },
+}
+
+```
+
+* `id` ... テーマの一意なID。UUIDをおすすめします。
+* `name` ... テーマ名
+* `author` ... テーマの作者
+* `desc` ... テーマの説明(オプション)
+* `base` ... 明るいテーマか、暗いテーマか
+    * `light`にすると明るいテーマになり、`dark`にすると暗いテーマになります。
+    * テーマはここで設定されたベーステーマを継承します。
+* `props` ... テーマのスタイル定義。これから説明します。
+
+### テーマのスタイル定義
+`props`下にはテーマのスタイルを定義します。 キーがCSSの変数名になり、バリューで中身を指定します。 なお、この`props`オブジェクトはベーステーマから継承されます。 ベーステーマは、このテーマの`base`が`light`なら[_light.json5](https://github.com/misskey-dev/misskey/blob/develop/src/client/themes/_light.json5)で、`dark`なら[_dark.json5](https://github.com/misskey-dev/misskey/blob/develop/src/client/themes/_dark.json5)です。 つまり、このテーマ内の`props`に`panel`というキーが無くても、そこにはベーステーマの`panel`があると見なされます。
+
+#### バリューで使える構文
+* 16進数で表された色
+    * 例: `#00ff00`
+* `rgb(r, g, b)`形式で表された色
+    * 例: `rgb(0, 255, 0)`
+* `rgb(r, g, b, a)`形式で表された透明度を含む色
+    * 例: `rgba(0, 255, 0, 0.5)`
+* 他のキーの値の参照
+    * `@{キー名}`と書くと他のキーの値の参照になります。`{キー名}`は参照したいキーの名前に置き換えます。
+    * 例: `@panel`
+* 定数(後述)の参照
+    * `${定数名}`と書くと定数の参照になります。`{定数名}`は参照したい定数の名前に置き換えます。
+    * 例: `$main`
+* 関数(後述)
+    * `:{関数名}<{引数}<{色}`
+
+#### Constante
+「CSS変数として出力はしたくないが、他のCSS変数の値として使いまわしたい」値があるときは、定数を使うと便利です。 キー名を`$`で始めると、そのキーはCSS変数として出力されません。
+
+#### funciones
+wip
diff --git a/src/docs/es-ES/features/timeline.md b/src/docs/es-ES/features/timeline.md
new file mode 100644
index 0000000000..026f2139f2
--- /dev/null
+++ b/src/docs/es-ES/features/timeline.md
@@ -0,0 +1,31 @@
+# Linea de tiempo
+タイムラインは、[ノート](./note)が時系列で表示される機能です。 タイムラインには以下で示す種類があり、種類によって表示されるノートも異なります。 なお、タイムラインの種類によってはサーバーにより無効になっている場合があります。
+
+## Inicio
+自分のフォローしているユーザーの投稿が流れます。HTLと略されます。
+
+## Local
+全てのローカルユーザーの「ホーム」指定されていない投稿が流れます。LTLと略されます。
+
+## Social
+自分のフォローしているユーザーの投稿と、全てのローカルユーザーの「ホーム」指定されていない投稿が流れます。STLと略されます。
+
+## Global
+全てのローカルユーザーの「ホーム」指定されていない投稿と、サーバーに届いた全てのリモートユーザーの「ホーム」指定されていない投稿が流れます。GTLと略されます。
+
+## Comparar
+| ソース          |             |        | Linea de tiempo |        |        |
+| ------------ | ----------- | ------ | --------------- | ------ | ------ |
+| Usuarios     | Visibilidad | Inicio | Local           | Social | Global |
+| ローカル (フォロー)  | 公開          | ✔      | ✔               | ✔      | ✔      |
+|              | Inicio      | ✔      |                 | ✔      |        |
+|              | Seguidores  | ✔      | ✔               | ✔      | ✔      |
+| リモート (フォロー)  | 公開          | ✔      |                 | ✔      | ✔      |
+|              | Inicio      | ✔      |                 | ✔      |        |
+|              | Seguidores  | ✔      |                 | ✔      | ✔      |
+| ローカル (未フォロー) | 公開          |        | ✔               | ✔      | ✔      |
+|              | Inicio      |        |                 |        |        |
+|              | Seguidores  |        |                 |        |        |
+| リモート (未フォロー) | 公開          |        |                 |        | ✔      |
+|              | Inicio      |        |                 |        |        |
+|              | Seguidores  |        |                 |        |        |
diff --git a/src/docs/es-ES/features/widgets.md b/src/docs/es-ES/features/widgets.md
new file mode 100644
index 0000000000..7c5cacb39a
--- /dev/null
+++ b/src/docs/es-ES/features/widgets.md
@@ -0,0 +1,7 @@
+# Widgets
+ウィジェットは、MisskeyのUI上に設置できる小型の情報表示、操作が行えるパーツです。
+
+ウィジェットを編集するには、ウィジェット編集モードに切り替えます。切り替え方法はUIによって異なります。 ウィジェット編集モードでは、ウィジェットの追加、削除、並び替え、およびそれぞれのウィジェットの設定を行えます。
+
+## 利用可能なウィジェット一覧
+todo
diff --git a/src/docs/es-ES/general/apps.md b/src/docs/es-ES/general/apps.md
new file mode 100644
index 0000000000..1f4c85fe8f
--- /dev/null
+++ b/src/docs/es-ES/general/apps.md
@@ -0,0 +1,6 @@
+# サードパーティアプリのリスト
+## クライアント
+todo
+
+## 連携サービス
+todo
diff --git a/src/docs/es-ES/general/faq.md b/src/docs/es-ES/general/faq.md
new file mode 100644
index 0000000000..ecb664e32e
--- /dev/null
+++ b/src/docs/es-ES/general/faq.md
@@ -0,0 +1,22 @@
+# よくある質問
+ここでは利用上のよくある質問について掲載しています。 Misskeyのプロジェクト自体についてのよくある質問は[こちら](./misskey)に掲載されています。
+
+### iOS/Androidのアプリはありますか?
+公式にはそういったOSのネイティブアプリを開発していませんが、サードパーティ製のアプリがいくつかあります。 詳しくは[こちら](./apps)をご覧ください。
+
+ただ、サードパーティ製アプリはどうしても機能への対応が遅れてしまうため、とくに拘りがなければ公式のWebクライアントの利用をおすすめします。 なお、MisskeyのWebクライアントはPWAに対応しているので、ネイティブアプリのように動作させることも可能です。 詳しくは[こちら](todo)をご覧ください。
+
+## 他のサーバーのユーザーをフォローするときは?
+メニューから検索を選び、ユーザー名をホスト込みで入力します。例: `@syuilo@misskey.io`
+
+## Renoteを削除するには?
+Renoteの時刻表示の隣にある「...」を押し、「Renote解除」を選択します。 Renoteについては[こちら](../features/note)をご確認ください。
+
+## URLのプレビューを表示させたくない
+MFMには、そのURLのプレビューを無効にする構文があります。詳細は[MFMチートシート](/mfm-cheat-sheet)をご確認ください。
+
+## カスタム絵文字を追加したい
+運営者のみがカスタム絵文字を追加、編集、削除できます。それらを希望する場合は運営者に依頼してください。
+
+## Botを開発したい
+Misskey APIを利用してBotの開発が可能です。[こちら](../advanced/develop-bot)をご確認ください。
diff --git a/src/docs/es-ES/general/glossary.md b/src/docs/es-ES/general/glossary.md
new file mode 100644
index 0000000000..dcafe8e0cf
--- /dev/null
+++ b/src/docs/es-ES/general/glossary.md
@@ -0,0 +1,83 @@
+# 用語集
+Misskeyに関する用語集です。
+
+## AcitivityPub
+(読み: あくてぃびてぃぱぶ) 分散型を実現するために用いられるプロトコル(仕様)。このプロトコルに則ってサーバー同士通信を行うことで、連合が行われ、Fediverseを形成しています。
+
+## AiScript
+(読み: あいすくりぷと) Misskey上で使用できるプログラミング言語です。詳細は[こちら。](../advanced/aiscript)
+
+## API
+(読み: えーぴーあい) Misskeyのサーバーが公開している、プログラムからMisskeyを扱うためのインターフェース。詳細は[こちら。](../advanced/api)
+
+## Bot
+(読み: ぼっと) プログラムによって動作しているアカウント。
+
+## CW
+(読み: こんてんつわーにんぐ) Contents Warningの略。ノートの内容を、操作なしには表示しないようにできる機能。主に長大な内容を隠すためや、ネタバレ防止などに使われます。
+
+## Fediverse
+(読み: ふぇでぃばーす) Misskeyを含む様々な分散型ソフトウェアのサーバーで構成されたネットワーク。
+
+## GTL
+グローバルタイムライン(Global TimeLine)の略。タイムラインの詳細は[こちら。](../features/timeline)
+
+## HTL
+ホームタイムライン(Home TimeLine)の略。タイムラインの詳細は[こちら。](../features/timeline)
+
+## LTL
+ローカルタイムライン(Local TimeLine)の略。タイムラインの詳細は[こちら。](../features/timeline)
+
+## MFM
+(読み: えむえふえむ) Misskey Flavored Markdownの略で、Misskey上で使用できるマークアップ言語です。詳細は[こちら。](../features/mfm)
+
+## NSFW
+(読み: のっとせーふふぉーわーく) Not Safe For Workの略。画像を「閲覧注意」扱いにし、操作なしには表示しないようにすることができる機能。
+
+## Renotar
+(読み: りのーと) 既にあるノートを引用、もしくはそのノートを新しいノートとして共有する行為、またそれによって作成されたノート。詳細は[こちら。](../features/note)
+
+## STL
+ソーシャルタイムライン(Social TimeLine)の略。タイムラインの詳細は[こちら。](../features/timeline)
+
+## 藍
+(読み: あい) Misskeyの看板娘(公式キャラクター)です。
+
+## アクティブユーザー
+インスタンスにアカウントを作っているユーザーのうち、現在も実際にサービスを利用しているユーザーのこと。
+
+## Instancia
+todo
+
+## コントロールパネル
+インスタンスの設定画面のこと。
+
+## Servidor
+todo
+
+## Silenciar
+ノートをパブリックな公開範囲で投稿できなくされている状態。モデレーターの判断でユーザーごとに設定されます。詳細は[こちら。](../features/silence)
+
+## Suspender
+アカウントが使用不可に設定されている状態。
+
+## Drive
+Misskeyにアップロードしたファイルを管理する機能。詳細は[こちら。](../features/drive)
+
+## Notas
+Misskeyに投稿される、文章、ファイル、アンケートなどを含めることができるコンテンツ。詳細は[こちら。](../features/note)
+
+## ミスキスト
+Misskeyを使う人のこと。
+
+## Moderador
+スパムの凍結およびサイレンスや不適切な投稿の削除など、コミュニティ運営に関する権限を持つユーザー。
+
+## Remoto
+他サーバーのことを指します。リモートユーザーといったように接頭辞としても使われます。ローカルの逆です。
+
+## Federación
+サーバー上で作成された情報が他のサーバーに伝わること。
+
+## Local
+自サーバーのことを指します。ローカルユーザー、ローカルタイムラインといったように接頭辞としても使われます。リモートの逆です。
diff --git a/src/docs/es-ES/general/links.md b/src/docs/es-ES/general/links.md
new file mode 100644
index 0000000000..d6b16856fb
--- /dev/null
+++ b/src/docs/es-ES/general/links.md
@@ -0,0 +1,5 @@
+# リンク集
+
+## ライブラリ
+- [misskey-dev/misskey.js](https://github.com/misskey-dev/misskey.js) - JavaScriptのMisskey SDK
+- [misskey-dev/mfm.js](https://github.com/misskey-dev/mfm.js) - JavaScriptのMFMパーサー実装
diff --git a/src/docs/es-ES/general/misskey.md b/src/docs/es-ES/general/misskey.md
new file mode 100644
index 0000000000..5a45c421ef
--- /dev/null
+++ b/src/docs/es-ES/general/misskey.md
@@ -0,0 +1,87 @@
+# Sobre Misskey
+
+Misskeyはオープンソースの分散型マイクロブログプラットフォームプロジェクトです。 開発は日本でsyuiloによって2014年から開始されました。 ドライブ、リアクションなどの豊富な機能や、高いカスタマイズ性を備えたUIを持つことが特徴です。
+
+## 歴史
+開発当初は掲示板がメインのサービスでしたが、ユーザーが短文を投稿し、それを時系列で流れるタイムライン機能を追加したところ人気が高まり、徐々にそれがメインとして開発が進むようになりました。 当初は分散型ではありませんでしたが、2018年にAcitivityPubを実装し分散型になったことで、より多くの方に認知され利用されるサービスになり、現在に至ります。
+<div class="info">ℹ️ Misskeyという名前は、syuiloが当時聴いていたMay'nというアーティストの楽曲、Brain Diverの歌詞に由来します。</div>
+
+誰でも開発に参加することができ、現在でも活発に開発が続いています。
+
+## 分散型とは何か?
+
+<b>分散(distributed)型</b>とは、<b>非中央集権(decentralized)</b>とも呼ばれ、コミュニティが多数のサーバーに分散して存在し、それらが相互に<b>通信(連合、federation)</b>することでコンテンツ共有<b>ネットワーク(Fediverse)</b>を形成していることが特徴のサービスです。 単一のサーバーしか存在しない、もしくは複数存在しても互いに独立している場合は中央集権なサービスと言われ、例えばTwitterやFacebookなどほとんどのサービスがそれに該当します。 分散型のメリットは、自分に合った運営者やテーマのサーバーを選択できることです。自分でサーバーを作成することもできます。連合するおかげで、どのサーバーを選んでも、同じコミュニティにアクセスできます。
+
+## 常にオープンソース
+Misskeyはこれまでもこれからも、オープンソースであり続けます。オープンソースとは、簡単に言うと<b>ソフトウェアのソースコード(プログラム)が公開されている</b>ことです。ソースコードの修正や再配布が可能であることを定義に含めることもあります。 Misskeyのすべてのソースコードは[AGPL](https://github.com/misskey-dev/misskey/blob/develop/LICENSE)というオープンソースライセンスの下に[公開](https://github.com/misskey-dev)されていて、誰でも自由に閲覧、使用、修正、改変、再配布をすることができます。 オープンソースは、自分で好きなように変えたり、有害な処理が含まれていないことを確認することができたり、誰でも開発に参加できるなどの、様々なメリットがあります。 上述の分散型を実現するためにも、オープンソースであるということは必要不可欠な要素です。 再び引き合いに出しますが、TwitterやFacebookなどの利益を得ているほとんどのサービスはオープンソースではありません。
+
+<div class="info">ℹ️ 技術的に言うと、MisskeyのソースコードはGitで管理されていて、リポジトリは<a href="https://github.com/misskey-dev" target="_blank">GitHub上でホスティングされています。</a></div>
+
+## 開発に参加する、プロジェクトを支援する
+Misskeyを気に入っていただけたら、ぜひプロジェクトを支援してください。プロジェクトに貢献するには、以下で紹介するようにいろいろな方法があります。方法によっては開発のスキルは不要なので、誰でも気軽に参加し貢献することができます。いつでもお待ちしています。
+
+### 機能を追加したり、バグを修正する
+ソフトウェアエンジニアのスキルをお持ちの方であれば、ソースコードを編集する形でプロジェクトに貢献することができます。 貢献についてのガイドは[こちら](https://github.com/misskey-dev/misskey/blob/develop/CONTRIBUTING.md)です。
+
+### 議論に参加する
+新しい機能、または既存の機能について意見を述べたり、不具合を報告したりすることでも貢献できます。 そのようなディスカッションは[GitHub](https://github.com/misskey-dev)上か、[フォーラム](https://forum.misskey.io/)等で行われます。
+
+### テキストを翻訳する
+Misskeyは様々な言語に対応しています(i18n -internationalizationの略- と呼ばれます)。元の言語は基本的に日本語ですが、有志によって他の言語へと翻訳されています。 その翻訳作業に加わっていただくことでもMisskeyに貢献できます。 Misskeyは[Crowdinというサービスを使用して翻訳の管理を行っています。](https://crowdin.com/project/misskey)
+
+### 感想を投稿する
+不具合報告等だけではなく、Misskeyの良い点、楽しい点といったポジティブな意見もぜひ共有してください。開発の励みになり、それは間接的ですがプロジェクトへの貢献です。
+
+### ミスキストを増やす
+ミスキストとは、Misskeyを使用する人のことです。 知り合いに紹介するなどしてMisskeyを広めていただければ、ミスキストが増え開発のモチベーションが上がります。
+
+### 寄付をする
+Misskeyはビジネスではなく、利用は無料であるため、収益は皆様からの寄付のみです。(インスタンスによっては広告収入を得ているような場合もありますが、それは運営者の収入であり直接開発者への収入にはなりません) 寄付をしていただければ、今後も開発を続けることが可能になり、プロジェクトへの貢献になります。 寄付は基本的には[Patreon](https://www.patreon.com/syuilo)で受け付けています。 一定額寄付していただけると、Misskeyの[情報ページ](/about-misskey)に名前を記載することができます。
+
+また、サーバーの運営者も、基本的には収益を得ていません。サーバーの運営にはコストがかかるので、運営者の支援をすることもご検討ください。 開発には直接関係しませんが、サーバーがあってこそのプロジェクトなので、運営が維持されるというのは開発と同じくらい重要なことです。
+
+## クレジット
+Misskeyの開発者や、Misskeyに寄付をしてくださった方の一覧は[こちら](/about-misskey)で見ることができます。
+
+## よくある質問
+### プロジェクトは何を目指していますか?
+強いて言うと、漠然的になりますが広く使われる汎用的なプラットフォームになることを目指しています。 Misskeyは他のプロジェクトとは違い、何らかの思想(例えば、反中央集権)やビジョンに基づいて開発が行われているわけではなく、その点ではフラットです。 それが逆に、特定の方向性に縛られないフレキシブルさを生み出すことに繋がっていると感じています。
+<!-- TODO: ここにロードマップへのリンク -->
+
+### 企業によって開発されていますか?
+いいえ。Misskeyの開発は個人で行われており、商業的でもないため、特定の企業の関りはありません。 開発メンバーも基本的にはボランティアです。 また、開発に対し企業のスポンサーがつくこともありますが、その場合でもやはり開発は個人のコミュニティが主体です。
+
+### 誰が運営していますか?
+Misskeyは分散型なため、各サーバーにそれぞれ異なった運営者がいます。従って、特定の個人や企業によって、Misskeyの全てが運営されているわけではありません。 また、開発チームが運営を行うわけでもないため、運営に関する連絡は、お使いのサーバーの運営者に行ってください。 サーバーの運営者は、[このページ](/about)で確認することができます。 あなたがサーバーを作成すれば、あなたが運営者になります。
+
+### どのサーバーを選べばいいですか?
+[サーバー一覧が公開されています。](https://join.misskey.page/ja-JP/instances) サーバーによってコミュニティのテーマ(特定のこと、ものが好き 等)が決められている場合があるので、自分に合ったテーマのサーバーがあれば、そこを選ぶと良いかもしれません。 他にも、サーバーの規模、ユーザー層、国および言語、運営者が信頼できるかどうか、などの観点があります。 なお、Misskey公式のサーバーというものはありません。自身で新しくサーバーを作成するという選択肢もあります。
+
+基本的にどのサーバーを選んだとしても、他の全てのサーバーのユーザーと繋がることができます。
+
+### サーバーを建てるにはどうしたらいいですか?
+Misskeyサーバーの作成に興味を持っていただきありがとうございます。 2021年現在、Misskeyのホスティングサービスは存在しないため、サーバーの作成にはある程度の知識が必要です。 サーバーの作成方法については[こちら](todo)をご覧ください。
+
+### どのような技術を使用していますか?
+Misskeyは開発が進むにつれ使用する技術も大きく変わってきました。開発当初はMySQL + PHP + jQueryといった構成でしたが、現在は以下のようになっています。
+- サーバーサイド: Node.js
+- データベース: PostgreSQL、Redis
+- UIフレームワーク: Vue.js
+- プログラミング言語: TypeScript
+
+また、MFMやAiScriptなどの、Misskeyから派生して独自の技術も開発しています。
+
+### Mastodonのフォークですか?
+いいえ。MisskeyはMastodonやその他のプロジェクトとは全く別のプロジェクトです。 開発に関しても、Misskeyの方が昔から開発されています。ただし、分散型になったのはMastodonの登場より後です。 同じAcitivityPubという分散のためのプロトコルを実装しているという点以外、両者に特に関りがあるわけでもありません。
+
+### iOS/Androidのアプリはありますか?
+公式にはそういったOSのネイティブアプリを開発していませんが、サードパーティ製のアプリがいくつかあります。 詳しくは[こちら](./apps)をご覧ください。
+
+ただ、サードパーティ製アプリはどうしても機能への対応が遅れてしまうため、とくに拘りがなければ公式のWebクライアントの利用をおすすめします。 なお、MisskeyのWebクライアントはPWAに対応しているので、ネイティブアプリのように動作させることも可能です。 詳しくは[こちら](todo)をご覧ください。
+
+### Misskeyのロゴ、アイコンはどこで入手できますか?
+(準備中)
+
+### 時折目にする猫耳の可愛い女の子は?
+Misskeyの守り神、藍ちゃんです。アイチャンカワイイヤッター!
+<div class="info">ℹ️ 藍ちゃんについては<a href="https://xn--931a.moe/" target="_blank">こちら</a>です。</div>
diff --git a/src/docs/es-ES/general/report-issue.md b/src/docs/es-ES/general/report-issue.md
new file mode 100644
index 0000000000..63527e32af
--- /dev/null
+++ b/src/docs/es-ES/general/report-issue.md
@@ -0,0 +1,8 @@
+# 不具合の報告
+不具合と思われる状況に遭遇したときは、まず[トラブルシューティング](./troubleshooting)をご一読ください。 それでも問題が解決しないときは、以下の情報を含めて[フォーラム](https://forum.misskey.io/)に投稿してください。 投稿することで、解決策が見つかったり、不具合と判断されれば開発チームによって修正が行われます。
+
+## 含める情報
+- Misskeyのバージョン([情報ページ](/about)で確認できます)
+- お使いのブラウザの種類とバージョン
+- お使いのOSの種類とバージョン
+- 問題の再現手順
diff --git a/src/docs/es-ES/general/troubleshooting.md b/src/docs/es-ES/general/troubleshooting.md
new file mode 100644
index 0000000000..4a35091299
--- /dev/null
+++ b/src/docs/es-ES/general/troubleshooting.md
@@ -0,0 +1,36 @@
+# トラブルシューティング
+<div class="info">ℹ️ <a href="./faq">よくある質問</a>も合わせてお役立てください。</div>
+
+問題が発生したときは、まずこちらをご確認ください。 該当する項目が無い、もしくは手順を試しても効果がない場合は、サーバーの管理者に連絡するか[不具合を報告](./report-issue)してください。
+
+## クライアントが起動しない
+ほとんどの場合、お使いのブラウザまたはOSのバージョンが古いことが原因です。 ブラウザおよびOSのバージョンを最新のものに更新してから、再度試してみてください。
+
+これは稀ですが、それでも起動しない場合は、キャッシュが原因の場合があります。ブラウザのキャッシュをクリアして、再度試してみてください。
+
+## ページが読み込めない
+クライアントが起動するもののページが読み込めないというエラーが出る場合は、ネットワークに問題がないか確認してください。また、サーバーがダウンしていないか確認してください。
+
+これは稀ですが、キャッシュが原因の場合があります。ブラウザのキャッシュをクリアして、再度試してみてください。
+
+まだ問題がある場合は、サーバーの問題と思われるのでサーバーの管理者に連絡してください。
+
+## クライアントの動作が遅い
+以下を試してみてください:
+
+- クライアント設定で「UIのアニメーションを減らす」を有効にする
+- クライアント設定で「モーダルにぼかし効果を使用」を無効にする
+- お使いのブラウザの設定でハードウェアアクセラレーションを有効にする
+- お使いのデバイスのスペックを上げる
+
+## 通知やアンテナ等の点滅が消えない
+点滅は、未読のコンテンツがあることを示しています。通常点滅が消えない場合は、コンテンツを遡ると未読なコンテンツが残っています。 すべて既読にしたと思われるのに、それでもなお点滅が続く場合(おそらく不具合と思われます)は設定から強制的にすべて既読扱いにすることができます。
+
+## Renoteができない
+フォロワー限定のノートはRenoteすることはできません。
+
+## UI上で特定の要素が表示されない
+広告ブロッカーを使用しているとそのような不具合が発生することがあります。Misskeyではオフにしてご利用ください。
+
+## UI上で未翻訳の部分がある
+ほとんどの場合、単に翻訳が間に合っていないだけで、不具合ではありません。翻訳が終わるまでお待ちください。 [翻訳に参加](./misskey)していただくことも可能です。
diff --git a/src/docs/fr-FR/admin/disable-timelines.md b/src/docs/fr-FR/admin/disable-timelines.md
new file mode 100644
index 0000000000..b081e35ab0
--- /dev/null
+++ b/src/docs/fr-FR/admin/disable-timelines.md
@@ -0,0 +1,8 @@
+# LTL/STL/GTLの無効化
+Misskeyでは、LTL/STL/GTLをそれぞれ無効化することができます。有効/無効を切り替えるには、インスタンスコントロールパネルで設定します。
+
+LTLやSTLは、そのインスタンス全員の投稿が見れるため、新規のユーザーにとってはユーザーを探す必要がなくなり、興味のあるユーザーを見つけやすいという利点があります。 しかし同時に、フォロー機能が活用されなくなったり、不適切な投稿が目につきやすくなったり、チャットのようになることで内輪感が生じて逆に新規ユーザーが参加しにくくなるといったデメリットも持ち合わせています。 サーバーによってメリット/デメリットどちらが優勢かは異なるので、オプションとして無効にできるようになっています。 もしデメリットの方が上回っていると感じたら、それらのタイムラインを無効化することも検討してください。
+
+<div class="warn">⚠️ 無効化を行うと、ユーザーが困惑し、短期的に見て利用者が減る可能性があります。そのため、無効化の際は影響を慎重に検討し、事前に説明してフォローを整える期間を一定程度設けることを推奨します。</div>
+
+なお、管理者/モデレーターは、これらのタイムラインの無効化状態は適用されず、引き続き利用することが可能です。
diff --git a/src/docs/fr-FR/admin/faq.md b/src/docs/fr-FR/admin/faq.md
new file mode 100644
index 0000000000..317b4e0655
--- /dev/null
+++ b/src/docs/fr-FR/admin/faq.md
@@ -0,0 +1,5 @@
+# よくある質問
+ここでは、サーバー管理者向けのよくある質問を掲載しています。
+
+## デフォルトテーマを設定したい
+現在、デフォルトテーマ設定機能は実装されていません。
diff --git a/src/docs/fr-FR/advanced/aiscript.md b/src/docs/fr-FR/advanced/aiscript.md
new file mode 100644
index 0000000000..604d17daa8
--- /dev/null
+++ b/src/docs/fr-FR/advanced/aiscript.md
@@ -0,0 +1,7 @@
+# AiScript
+AiScriptは、Misskeyで使用できるスクリプト言語です。
+
+<div class="info">ℹ️ AiScript実装はMisskeyとは別リポジトリで、<a href="https://github.com/syuilo/aiscript" target="_blank">オープンソースで公開されています。</a></div>
+
+## 使い方
+AiScriptの構文や組み込み関数などのドキュメントは、[こちら](https://github.com/syuilo/aiscript/tree/master/docs)で公開されています。
diff --git a/src/docs/fr-FR/advanced/api.md b/src/docs/fr-FR/advanced/api.md
new file mode 100644
index 0000000000..76019b6145
--- /dev/null
+++ b/src/docs/fr-FR/advanced/api.md
@@ -0,0 +1,58 @@
+# Misskey API
+
+MisskeyAPIを使ってMisskeyクライアント、Misskey連携Webサービス、Bot等(以下「アプリケーション」と呼びます)を開発できます。 ストリーミングAPIもあるので、リアルタイム性のあるアプリケーションを作ることも可能です。
+
+APIを使い始めるには、まずアクセストークンを取得する必要があります。 このドキュメントでは、アクセストークンを取得する手順を説明した後、基本的なAPIの使い方を説明します。
+
+## アクセストークンの取得
+基本的に、APIはリクエストにはアクセストークンが必要となります。 APIにリクエストするのが自分自身なのか、不特定の利用者に使ってもらうアプリケーションなのかによって取得手順は異なります。
+
+* 前者の場合: [「自分自身のアクセストークンを手動発行する」](#自分自身のアクセストークンを手動発行する)に進む
+* 後者の場合: [「アプリケーション利用者にアクセストークンの発行をリクエストする」](#アプリケーション利用者にアクセストークンの発行をリクエストする)に進む
+
+### 自分自身のアクセストークンを手動発行する
+「設定 > API」で、自分のアクセストークンを発行できます。
+
+[「APIの使い方」へ進む](#APIの使い方)
+
+### アプリケーション利用者にアクセストークンの発行をリクエストする
+アプリケーション利用者のアクセストークンを取得するには、以下の手順で発行をリクエストします。
+
+#### Step 1
+
+UUIDを生成する。以後これをセッションIDと呼びます。
+
+> このセッションIDは毎回生成し、使いまわさないようにしてください。
+
+#### Step 2
+
+`{_URL_}/miauth/{session}`をユーザーのブラウザで表示させる。`{session}`の部分は、セッションIDに置き換えてください。
+> 例: `{_URL_}/miauth/c1f6d42b-468b-4fd2-8274-e58abdedef6f`
+
+表示する際、URLにクエリパラメータとしていくつかのオプションを設定できます:
+* `name` ... アプリケーション名
+    * > 例: `MissDeck`
+* `icon` ... アプリケーションのアイコン画像URL
+    * > 例: `https://missdeck.example.com/icon.png`
+* `callback` ... 認証が終わった後にリダイレクトするURL
+    * > 例: `https://missdeck.example.com/callback`
+    * リダイレクト時には、`session`というクエリパラメータでセッションIDが付きます
+* `permission` ... アプリケーションが要求する権限
+    * > 例: `write:notes,write:following,read:drive`
+    * 要求する権限を`,`で区切って列挙します
+    * どのような権限があるかは[APIリファレンス](/api-doc)で確認できます
+
+#### Step 3
+ユーザーが発行を許可した後、`{_URL_}/api/miauth/{session}/check`にPOSTリクエストすると、レスポンスとしてアクセストークンを含むJSONが返ります。
+
+レスポンスに含まれるプロパティ:
+* `token` ... ユーザーのアクセストークン
+* `user` ... ユーザーの情報
+
+[「APIの使い方」へ進む](#APIの使い方)
+
+## APIの使い方
+**APIはすべてPOSTで、リクエスト/レスポンスともにJSON形式です。RESTではありません。** アクセストークンは、`i`というパラメータ名でリクエストに含めます。
+
+* [APIリファレンス](/api-doc)
+* [ストリーミングAPI](./stream)
diff --git a/src/docs/fr-FR/advanced/create-plugin.md b/src/docs/fr-FR/advanced/create-plugin.md
new file mode 100644
index 0000000000..540909de42
--- /dev/null
+++ b/src/docs/fr-FR/advanced/create-plugin.md
@@ -0,0 +1,74 @@
+# プラグインの作成
+Misskey Webクライアントのプラグイン機能を使うと、クライアントを拡張し、様々な機能を追加できます。 ここではプラグインの作成にあたってのメタデータ定義や、AiScript APIリファレンスを掲載します。
+
+## Métadonnées
+プラグインは、AiScriptのメタデータ埋め込み機能を使って、デフォルトとしてプラグインのメタデータを定義する必要があります。 メタデータは次のプロパティを含むオブジェクトです。
+
+### name
+プラグイン名
+
+### author
+プラグイン作者
+
+### version
+プラグインバージョン。数値を指定してください。
+
+### description
+プラグインの説明
+
+### permissions
+プラグインが要求する権限。MisskeyAPIにリクエストする際に用いられます。
+
+### config
+プラグインの設定情報を表すオブジェクト。 キーに設定名、値に以下のプロパティを含めます。
+
+#### type
+設定値の種類を表す文字列。以下から選択します。 string number boolean
+
+#### label
+ユーザーに表示する設定名
+
+#### description
+設定の説明
+
+#### default
+設定のデフォルト値
+
+## APIリファレンス
+AiScript標準で組み込まれているAPIは掲載しません。
+
+### Mk:dialog(title text type)
+ダイアログを表示します。typeには以下の値が設定できます。 info success warn error question 省略すると info になります。
+
+### Mk:confirm(title text type)
+確認ダイアログを表示します。typeには以下の値が設定できます。 info success warn error question 省略すると question になります。 ユーザーが"OK"を選択した場合は true を、"キャンセル"を選択した場合は false が返ります。
+
+### Mk:api(endpoint params)
+Misskey APIにリクエストします。第一引数にエンドポイント名、第二引数にパラメータオブジェクトを渡します。
+
+### Mk:save(key value)
+任意の値に任意の名前を付けて永続化します。永続化した値は、AiScriptコンテキストが終了しても残り、Mk:loadで読み取ることができます。
+
+### Mk:load(key)
+Mk:saveで永続化した指定の名前の値を読み取ります。
+
+### Plugin:register_post_form_action(title fn)
+投稿フォームにアクションを追加します。第一引数にアクション名、第二引数にアクションが選択された際のコールバック関数を渡します。 コールバック関数には、第一引数に投稿フォームオブジェクトが渡されます。
+
+### Plugin:register_note_action(title fn)
+ノートメニューに項目を追加します。第一引数に項目名、第二引数に項目が選択された際のコールバック関数を渡します。 コールバック関数には、第一引数に対象のノートオブジェクトが渡されます。
+
+### Plugin:register_user_action(title fn)
+ユーザーメニューに項目を追加します。第一引数に項目名、第二引数に項目が選択された際のコールバック関数を渡します。 コールバック関数には、第一引数に対象のユーザーオブジェクトが渡されます。
+
+### Plugin:register_note_view_interruptor(fn)
+UIに表示されるノート情報を書き換えます。 コールバック関数には、第一引数に対象のノートオブジェクトが渡されます。 コールバック関数の返り値でノートが書き換えられます。
+
+### Plugin:register_note_post_interruptor(fn)
+ノート投稿時にノート情報を書き換えます。 コールバック関数には、第一引数に対象のノートオブジェクトが渡されます。 コールバック関数の返り値でノートが書き換えられます。
+
+### Plugin:open_url(url)
+第一引数に渡されたURLをブラウザの新しいタブで開きます。
+
+### Plugin:config
+プラグインの設定が格納されるオブジェクト。プラグイン定義のconfigで設定したキーで値が入ります。
diff --git a/src/docs/fr-FR/advanced/develop-bot.md b/src/docs/fr-FR/advanced/develop-bot.md
new file mode 100644
index 0000000000..7f825e9bc4
--- /dev/null
+++ b/src/docs/fr-FR/advanced/develop-bot.md
@@ -0,0 +1,6 @@
+# Botの作成
+[Misskey API](./api)を利用してBotの開発が可能です。 また、いくつかのBot実装が公開されているため、ぜひ参考にしてください。
+
+- [syuilo/ai](https://github.com/syuilo/ai) ... Node.js上で動く、TypeScript製Bot実装
+
+Botを作成したときは、プロフィール設定からBotフラグをオンにしておくことを強くおすすめします。
diff --git a/src/docs/fr-FR/advanced/reversi-bot.md b/src/docs/fr-FR/advanced/reversi-bot.md
new file mode 100644
index 0000000000..2da95be1dc
--- /dev/null
+++ b/src/docs/fr-FR/advanced/reversi-bot.md
@@ -0,0 +1,160 @@
+# MisskeyリバーシBotの開発
+Misskeyのリバーシ機能に対応したBotの開発方法をここに記します。
+
+1. `games/reversi`ストリームに以下のパラメータを付けて接続する:
+    * `i`: botアカウントのAPIキー
+
+2. 対局への招待が来たら、ストリームから`invited`イベントが流れてくる
+    * イベントの中身に、`parent`という名前で対局へ誘ってきたユーザーの情報が含まれている
+
+3. `games/reversi/match`へ、`user_id`として`parent`の`id`が含まれたリクエストを送信する
+
+4. 上手くいくとゲーム情報が返ってくるので、`games/reversi-game`ストリームへ、以下のパラメータを付けて接続する:
+    * `i`: botアカウントのAPIキー
+    * `game`: `game`の`id`
+
+5. この間、相手がゲームの設定を変更するとその都度`update-settings`イベントが流れてくるので、必要であれば何かしらの処理を行う
+
+6. 設定に満足したら、`{ type: 'accept' }`メッセージをストリームに送信する
+
+7. ゲームが開始すると、`started`イベントが流れてくる
+    * イベントの中身にはゲーム情報が含まれている
+
+8. 石を打つには、ストリームに`{ type: 'set', pos: <位置> }`を送信する(位置の計算方法は後述)
+
+9. 相手または自分が石を打つと、ストリームから`set`イベントが流れてくる
+    * `color`として石の色が含まれている
+    * `pos`として位置情報が含まれている
+
+## 位置の計算法
+8x8のマップを考える場合、各マスの位置(インデックスと呼びます)は次のようになっています:
+```
++--+--+--+--+--+--+--+--+
+| 0| 1| 2| 3| 4| 5| 6| 7|
++--+--+--+--+--+--+--+--+
+| 8| 9|10|11|12|13|14|15|
++--+--+--+--+--+--+--+--+
+|16|17|18|19|20|21|22|23|
+...
+```
+
+### X,Y座標 から インデックス に変換する
+```
+pos = x + (y * mapWidth)
+```
+`mapWidth`は、ゲーム情報の`map`から、次のようにして計算できます:
+```
+mapWidth = map[0].length
+```
+
+### インデックス から X,Y座標 に変換する
+```
+x = pos % mapWidth
+y = Math.floor(pos / mapWidth)
+```
+
+## マップ情報
+マップ情報は、ゲーム情報の`map`に入っています。 文字列の配列になっており、ひとつひとつの文字がマス情報を表しています。 それをもとにマップのデザインを知る事が出来ます:
+* `(スペース)` ... マス無し
+* `-` ... マス
+* `b` ... 初期配置される黒石
+* `w` ... 初期配置される白石
+
+例えば、4*4の次のような単純なマップがあるとします:
+```text
++---+---+---+---+
+|   |   |   |   |
++---+---+---+---+
+|   | ○ | ● |   |
++---+---+---+---+
+|   | ● | ○ |   |
++---+---+---+---+
+|   |   |   |   |
++---+---+---+---+
+```
+
+この場合、マップデータはこのようになります:
+```javascript
+['----', '-wb-', '-bw-', '----']
+```
+
+## ユーザーにフォームを提示して対話可能Botを作成する
+ユーザーとのコミュニケーションを行うため、ゲームの設定画面でユーザーにフォームを提示することができます。 例えば、Botの強さをユーザーが設定できるようにする、といったシナリオが考えられます。
+
+フォームを提示するには、`reversi-game`ストリームに次のメッセージを送信します:
+```javascript
+{
+  type: 'init-form',
+  body: [フォームコントロールの配列]
+}
+```
+
+フォームコントロールの配列については今から説明します。 フォームコントロールは、次のようなオブジェクトです:
+```javascript
+{
+  id: 'switch1',
+  type: 'switch',
+  label: 'Enable hoge',
+  value: false
+}
+```
+`id` ... コントロールのID。 `type` ... コントロールの種類。後述します。 `label` ... コントロールと一緒に表記するテキスト。 `value` ... コントロールのデフォルト値。
+
+### フォームの操作を受け取る
+ユーザーがフォームを操作すると、ストリームから`update-form`イベントが流れてきます。 イベントの中身には、コントロールのIDと、ユーザーが設定した値が含まれています。 例えば、上で示したスイッチをユーザーがオンにしたとすると、次のイベントが流れてきます:
+```javascript
+{
+  id: 'switch1',
+  value: true
+}
+```
+
+### フォームコントロールの種類
+#### Interrupteur
+type: `switch` スイッチを表示します。何かの機能をオン/オフさせたい場合に有用です。
+
+##### プロパティ
+`label` ... スイッチに表記するテキスト。
+
+#### ラジオボタン
+type: `radio` ラジオボタンを表示します。選択肢を提示するのに有用です。例えば、Botの強さを設定させるなどです。
+
+##### プロパティ
+`items` ... ラジオボタンの選択肢。例:
+```javascript
+items: [{
+  label: 'å¼±',
+  value: 1
+}, {
+  label: '中',
+  value: 2
+}, {
+  label: 'å¼·',
+  value: 3
+}]
+```
+
+#### スライダー
+type: `slider` スライダーを表示します。
+
+##### プロパティ
+`min` ... スライダーの下限。 `max` ... スライダーの上限。 `step` ... 入力欄で刻むステップ値。
+
+#### テキストボックス
+type: `textbox` テキストボックスを表示します。ユーザーになにか入力させる一般的な用途に利用できます。
+
+## ユーザーにメッセージを表示する
+設定画面でユーザーと対話する、フォーム以外のもうひとつの方法がこれです。ユーザーになにかメッセージを表示することができます。 例えば、ユーザーがBotの対応していないモードやマップを選択したとき、警告を表示するなどです。 メッセージを表示するには、次のメッセージをストリームに送信します:
+```javascript
+{
+  type: 'message',
+  body: {
+    text: 'メッセージ内容',
+    type: 'メッセージの種類'
+  }
+}
+```
+メッセージの種類: `success`, `info`, `warning`, `error`。
+
+## 投了する
+投了をするには、<a href="./api/endpoints/games/reversi/games/surrender">このエンドポイント</a>にリクエストします。
diff --git a/src/docs/fr-FR/advanced/stream.md b/src/docs/fr-FR/advanced/stream.md
new file mode 100644
index 0000000000..b1820bf616
--- /dev/null
+++ b/src/docs/fr-FR/advanced/stream.md
@@ -0,0 +1,350 @@
+# ストリーミングAPI
+
+ストリーミングAPIを使うと、リアルタイムで様々な情報(例えばタイムラインに新しい投稿が流れてきた、メッセージが届いた、フォローされた、など)を受け取ったり、様々な操作を行ったりすることができます。
+
+## ストリームに接続する
+
+ストリーミングAPIを利用するには、まずMisskeyサーバーに**websocket**接続する必要があります。
+
+以下のURLに、`i`というパラメータ名で認証情報を含めて、websocket接続してください。例:
+```
+%WS_URL%/streaming?i=xxxxxxxxxxxxxxx
+```
+
+認証情報は、自分のAPIキーや、アプリケーションからストリームに接続する際はユーザーのアクセストークンのことを指します。
+
+<div class="info">ℹ️ 認証情報の取得については、<a href="./api">こちらのドキュメント</a>をご確認ください。</div>
+
+---
+
+認証情報は省略することもできますが、その場合非ログインでの利用ということになり、受信できる情報や可能な操作は限られます。例:
+
+```
+%WS_URL%/streaming
+```
+
+---
+
+ストリームに接続すると、後述するAPI操作や、投稿の購読を行ったりすることができます。 しかしまだこの段階では、例えばタイムラインへの新しい投稿を受信したりすることはできません。 それを行うには、ストリーム上で、後述する**チャンネル**に接続する必要があります。
+
+**ストリームでのやり取りはすべてJSONです。**
+
+## Canaux
+MisskeyのストリーミングAPIにはチャンネルという概念があります。これは、送受信する情報を分離するための仕組みです。 Misskeyのストリームに接続しただけでは、まだリアルタイムでタイムラインの投稿を受信したりはできません。 ストリーム上でチャンネルに接続することで、様々な情報を受け取ったり情報を送信したりすることができるようになります。
+
+ひとつのストリーム上で、同時に複数のチャンネルに接続することができます。
+
+### チャンネルに接続する
+チャンネルに接続するには、次のようなデータをJSONでストリームに送信します:
+
+```json
+{
+    type: 'connect',
+    body: {
+        channel: 'xxxxxxxx',
+        id: 'foobar',
+        params: {
+            ...
+        }
+    }
+}
+```
+
+ここで、
+* `channel`には接続したいチャンネル名を設定します。チャンネルの種類については後述します。
+* `id`にはそのチャンネルとやり取りするための任意のIDを設定します。ストリームでは様々なメッセージが流れるので、そのメッセージがどのチャンネルからのものなのか識別する必要があるからです。このIDは、UUIDや、乱数のようなもので構いません。
+* `params`はチャンネルに接続する際のパラメータです。チャンネルによって接続時に必要とされるパラメータは異なります。パラメータ不要のチャンネルに接続する際は、このプロパティは省略可能です。
+
+<div class="info">ℹ️ IDはチャンネルごとではなく「チャンネルの接続ごと」です。なぜなら、同じチャンネルに異なるパラメータで複数接続するケースもあるからです。</div>
+
+### チャンネルからのメッセージを受け取る
+例えばタイムラインのチャンネルなら、新しい投稿があった時にメッセージを発します。そのメッセージを受け取ることで、タイムラインに新しい投稿がされたことをリアルタイムで知ることができます。
+
+チャンネルがメッセージを発すると、次のようなデータがJSONでストリームに流れてきます:
+```json
+{
+    type: 'channel',
+    body: {
+        id: 'foobar',
+        type: 'something',
+        body: {
+            some: 'thing'
+        }
+    }
+}
+```
+
+ここで、
+* `id`には前述したそのチャンネルに接続する際に設定したIDが設定されています。これで、このメッセージがどのチャンネルからのものなのか知ることができます。
+* `type`にはメッセージの種類が設定されます。チャンネルによって、どのような種類のメッセージが流れてくるかは異なります。
+* `body`にはメッセージの内容が設定されます。チャンネルによって、どのような内容のメッセージが流れてくるかは異なります。
+
+### チャンネルに向けてメッセージを送信する
+チャンネルによっては、メッセージを受け取るだけでなく、こちらから何かメッセージを送信し、何らかの操作を行える場合があります。
+
+チャンネルにメッセージを送信するには、次のようなデータをJSONでストリームに送信します:
+```json
+{
+    type: 'channel',
+    body: {
+        id: 'foobar',
+        type: 'something',
+        body: {
+            some: 'thing'
+        }
+    }
+}
+```
+
+ここで、
+* `id`には前述したそのチャンネルに接続する際に設定したIDを設定します。これで、このメッセージがどのチャンネルに向けたものなのか識別させることができます。
+* `type`にはメッセージの種類を設定します。チャンネルによって、どのような種類のメッセージを受け付けるかは異なります。
+* `body`にはメッセージの内容を設定します。チャンネルによって、どのような内容のメッセージを受け付けるかは異なります。
+
+### チャンネルから切断する
+チャンネルから切断するには、次のようなデータをJSONでストリームに送信します:
+
+```json
+{
+    type: 'disconnect',
+    body: {
+        id: 'foobar'
+    }
+}
+```
+
+ここで、
+* `id`には前述したそのチャンネルに接続する際に設定したIDを設定します。
+
+## ストリームを経由してAPIリクエストする
+
+ストリームを経由してAPIリクエストすると、HTTPリクエストを発生させずにAPIを利用できます。そのため、コードを簡潔にできたり、パフォーマンスの向上を見込めるかもしれません。
+
+ストリームを経由してAPIリクエストするには、次のようなデータをJSONでストリームに送信します:
+```json
+{
+    type: 'api',
+    body: {
+        id: 'xxxxxxxxxxxxxxxx',
+        endpoint: 'notes/create',
+        data: {
+            text: 'yee haw!'
+        }
+    }
+}
+```
+
+ここで、
+* `id`には、APIのレスポンスを識別するための、APIリクエストごとの一意なIDを設定する必要があります。UUIDや、簡単な乱数のようなもので構いません。
+* `endpoint`には、あなたがリクエストしたいAPIのエンドポイントを指定します。
+* `data`には、エンドポイントのパラメータを含めます。
+
+<div class="info">ℹ️ APIのエンドポイントやパラメータについてはAPIリファレンスをご確認ください。</div>
+
+### レスポンスの受信
+
+APIへリクエストすると、レスポンスがストリームから次のような形式で流れてきます。
+
+```json
+{
+    type: 'api:xxxxxxxxxxxxxxxx',
+    body: {
+        ...
+    }
+}
+```
+
+ここで、
+* `xxxxxxxxxxxxxxxx`の部分には、リクエストの際に設定された`id`が含まれています。これにより、どのリクエストに対するレスポンスなのか判別することができます。
+* `body`には、レスポンスが含まれています。
+
+## 投稿のキャプチャ
+
+Misskeyは投稿のキャプチャと呼ばれる仕組みを提供しています。これは、指定した投稿のイベントをストリームで受け取る機能です。
+
+例えばタイムラインを取得してユーザーに表示したとします。ここで誰かがそのタイムラインに含まれるどれかの投稿に対してリアクションしたとします。
+
+しかし、クライアントからするとある投稿にリアクションが付いたことなどは知る由がないため、リアルタイムでリアクションをタイムライン上の投稿に反映して表示するといったことができません。
+
+この問題を解決するために、Misskeyは投稿のキャプチャ機構を用意しています。投稿をキャプチャすると、その投稿に関するイベントを受け取ることができるため、リアルタイムでリアクションを反映させたりすることが可能になります。
+
+### 投稿をキャプチャする
+
+投稿をキャプチャするには、ストリームに次のようなメッセージを送信します:
+
+```json
+{
+    type: 'subNote',
+    body: {
+        id: 'xxxxxxxxxxxxxxxx'
+    }
+}
+```
+
+ここで、
+* `id`にキャプチャしたい投稿の`id`を設定します。
+
+このメッセージを送信すると、Misskeyにキャプチャを要請したことになり、以後、その投稿に関するイベントが流れてくるようになります。
+
+例えば投稿にリアクションが付いたとすると、次のようなメッセージが流れてきます:
+
+```json
+{
+    type: 'noteUpdated',
+    body: {
+        id: 'xxxxxxxxxxxxxxxx',
+        type: 'reacted',
+        body: {
+            reaction: 'like',
+            userId: 'yyyyyyyyyyyyyyyy'
+        }
+    }
+}
+```
+
+ここで、
+* `body`内の`id`に、イベントを発生させた投稿のIDが設定されます。
+* `body`内の`type`に、イベントの種類が設定されます。
+* `body`内の`body`に、イベントの詳細が設定されます。
+
+#### イベントの種類
+
+##### `reacted`
+その投稿にリアクションがされた時に発生します。
+
+* `reaction`に、リアクションの種類が設定されます。
+* `userId`に、リアクションを行ったユーザーのIDが設定されます。
+
+例:
+```json
+{
+    type: 'noteUpdated',
+    body: {
+        id: 'xxxxxxxxxxxxxxxx',
+        type: 'reacted',
+        body: {
+            reaction: 'like',
+            userId: 'yyyyyyyyyyyyyyyy'
+        }
+    }
+}
+```
+
+##### `deleted`
+その投稿が削除された時に発生します。
+
+* `deletedAt`に、削除日時が設定されます。
+
+例:
+```json
+{
+    type: 'noteUpdated',
+    body: {
+        id: 'xxxxxxxxxxxxxxxx',
+        type: 'deleted',
+        body: {
+            deletedAt: '2018-10-22T02:17:09.703Z'
+        }
+    }
+}
+```
+
+##### `pollVoted`
+その投稿に添付されたアンケートに投票された時に発生します。
+
+* `choice`に、選択肢IDが設定されます。
+* `userId`に、投票を行ったユーザーのIDが設定されます。
+
+例:
+```json
+{
+    type: 'noteUpdated',
+    body: {
+        id: 'xxxxxxxxxxxxxxxx',
+        type: 'pollVoted',
+        body: {
+            choice: 2,
+            userId: 'yyyyyyyyyyyyyyyy'
+        }
+    }
+}
+```
+
+### 投稿のキャプチャを解除する
+
+その投稿がもう画面に表示されなくなったりして、その投稿に関するイベントをもう受け取る必要がなくなったときは、キャプチャの解除を申請してください。
+
+次のメッセージを送信します:
+
+```json
+{
+    type: 'unsubNote',
+    body: {
+        id: 'xxxxxxxxxxxxxxxx'
+    }
+}
+```
+
+ここで、
+* `id`にキャプチャを解除したい投稿の`id`を設定します。
+
+このメッセージを送信すると、以後、その投稿に関するイベントは流れてこないようになります。
+
+# チャンネル一覧
+## `main`
+アカウントに関する基本的な情報が流れてきます。このチャンネルにパラメータはありません。
+
+### 流れてくるイベント一覧
+
+#### `renote`
+自分の投稿がRenoteされた時に発生するイベントです。自分自身の投稿をRenoteしたときは発生しません。
+
+#### `mention`
+誰かからメンションされたときに発生するイベントです。
+
+#### `readAllNotifications`
+自分宛ての通知がすべて既読になったことを表すイベントです。このイベントを利用して、「通知があることを示すアイコン」のようなものをオフにしたりする等のケースが想定されます。
+
+#### `meUpdated`
+自分の情報が更新されたことを表すイベントです。
+
+#### `follow`
+自分が誰かをフォローしたときに発生するイベントです。
+
+#### `unfollow`
+自分が誰かのフォローを解除したときに発生するイベントです。
+
+#### `followed`
+自分が誰かにフォローされたときに発生するイベントです。
+
+## `homeTimeline`
+ホームタイムラインの投稿情報が流れてきます。このチャンネルにパラメータはありません。
+
+### 流れてくるイベント一覧
+
+#### `note`
+タイムラインに新しい投稿が流れてきたときに発生するイベントです。
+
+## `localTimeline`
+ローカルタイムラインの投稿情報が流れてきます。このチャンネルにパラメータはありません。
+
+### 流れてくるイベント一覧
+
+#### `note`
+ローカルタイムラインに新しい投稿が流れてきたときに発生するイベントです。
+
+## `hybridTimeline`
+ソーシャルタイムラインの投稿情報が流れてきます。このチャンネルにパラメータはありません。
+
+### 流れてくるイベント一覧
+
+#### `note`
+ソーシャルタイムラインに新しい投稿が流れてきたときに発生するイベントです。
+
+## `globalTimeline`
+グローバルタイムラインの投稿情報が流れてきます。このチャンネルにパラメータはありません。
+
+### 流れてくるイベント一覧
+
+#### `note`
+グローバルタイムラインに新しい投稿が流れてきたときに発生するイベントです。
diff --git a/src/docs/fr-FR/features/antenna.md b/src/docs/fr-FR/features/antenna.md
new file mode 100644
index 0000000000..450e7a7aa6
--- /dev/null
+++ b/src/docs/fr-FR/features/antenna.md
@@ -0,0 +1,4 @@
+# Antennes
+アンテナは、自由に条件を設定して、合致するノートを自動で収集することができる機能です。
+
+条件を設定したアンテナが作成された状態で、条件に合致するノートが投稿されると、リアルタイムでそのアンテナのタイムラインにノートが追加されます。
diff --git a/src/docs/fr-FR/features/custom-emoji.md b/src/docs/fr-FR/features/custom-emoji.md
new file mode 100644
index 0000000000..01840868eb
--- /dev/null
+++ b/src/docs/fr-FR/features/custom-emoji.md
@@ -0,0 +1,2 @@
+# Émojis personnalisés
+カスタム絵文字は、インスタンスで用意された画像を絵文字のように使える機能です。 ノート、リアクション、チャット、自己紹介、名前などの場所で使うことができます。 カスタム絵文字をそれらの場所で使うには、絵文字ピッカーボタン(ある場合)を押すか、`:`を入力して絵文字サジェストを表示します。 テキスト内に`:foo:`のような形式の文字列が見つかると、`foo`の部分がカスタム絵文字名と解釈され、表示時には対応したカスタム絵文字に置き換わります。
diff --git a/src/docs/fr-FR/features/deck.md b/src/docs/fr-FR/features/deck.md
new file mode 100644
index 0000000000..73e9efdaaf
--- /dev/null
+++ b/src/docs/fr-FR/features/deck.md
@@ -0,0 +1,18 @@
+# Deck
+
+デッキは利用可能なUIのひとつです。「カラム」と呼ばれるビューを複数並べて表示させることで、カスタマイズ性が高く、情報量の多いUIが構築できることが特徴です。
+
+## カラムの追加
+デッキの背景を右クリックし、「カラムを追加」して任意のカラムを追加できます。
+
+## カラムの移動
+カラムは、ドラッグアンドドロップで他のカラムと位置を入れ替えることが出来るほか、カラムメニュー(カラムのヘッダー右クリック)から位置を移動させることもできます。
+
+## カラムの水平分割
+カラムは左右だけでなく、上下に並べることもできます。 カラムメニューを開き、「左に重ねる」を選択すると、左のカラムの下に現在のカラムが移動します。 上下分割を解除するには、カラムメニューの「右に出す」を選択します。
+
+## カラムの設定
+カラムメニューの「編集」を選択するとカラムの設定を編集できます。カラムの名前を変えたり、幅を変えたりできます。
+
+## デッキの設定
+デッキに関する設定は、[settings/deck](/settings/deck)で行えます。
diff --git a/src/docs/fr-FR/features/drive.md b/src/docs/fr-FR/features/drive.md
new file mode 100644
index 0000000000..c445b99a86
--- /dev/null
+++ b/src/docs/fr-FR/features/drive.md
@@ -0,0 +1,17 @@
+# Drive
+ドライブは、Misskey上でファイルを管理できる機能です。
+
+[ドライブのページ](/my/drive)から任意のファイルをアップロードできるほか、アバターに設定した画像や、ノートに添付したファイルなどもすべてドライブにアップロードされます。
+
+<div class="warn">⚠️ ドライブからファイルを削除すると、そのファイルが添付されたノートも消えます。</div>
+
+ドライブにアップロードされたファイルは、いつでもダウンロードすることができるほか、ノート作成時に「ドライブからファイルを添付」することでファイルを再利用することもできます。
+
+ドライブ内にフォルダを作り、複数のファイルをまとめて整理することもできます。
+
+## 閲覧注意 (NSFW)
+<div class="info">ℹ️ この項目が閲覧注意なわけではありません</div>
+
+閲覧注意またはNSFW (Not safe for work) は、ドライブのファイルに設定することができるフラグです。 閲覧注意フラグを設定されたファイルは、表示される際に閲覧者の操作なしには表示されなくなります。 このフラグは、例えば職場や公共の場で閲覧するのに適切でないと思われる画像などに設定し、そのような画像が突然表示されてしまうことを防ぐ目的で使われます。
+
+このフラグは手動でオンオフを切り替えられるほか、モデレーターの判断で設定される場合もあります。
diff --git a/src/docs/fr-FR/features/favorite.md b/src/docs/fr-FR/features/favorite.md
new file mode 100644
index 0000000000..a7ef5b7fde
--- /dev/null
+++ b/src/docs/fr-FR/features/favorite.md
@@ -0,0 +1,4 @@
+# Ajouter aux favoris
+[ノート](./node)をお気に入りとして登録できる機能です。 お気に入り登録したノートは、[お気に入りページ](./my/favorites)で一覧することができます。 お気に入りに登録したことは相手に通知されず、お気に入りは自分しか見ることができません。
+
+ノートをお気に入り登録するには、ノートメニューの「お気に入り」を押します。お気に入り解除するには、ノートメニューの「お気に入り解除」を押します。
diff --git a/src/docs/fr-FR/features/follow.md b/src/docs/fr-FR/features/follow.md
new file mode 100644
index 0000000000..93c8428e20
--- /dev/null
+++ b/src/docs/fr-FR/features/follow.md
@@ -0,0 +1,2 @@
+# Abonnements
+ユーザーをフォローすると、タイムラインにそのユーザーの投稿が表示されるようになります。ただし、他のユーザーに対する返信は含まれません。 ユーザーをフォローするには、ユーザーページの「フォロー」ボタンをクリックします。フォローを解除するには、もう一度クリックします。
diff --git a/src/docs/fr-FR/features/keyboard-shortcut.md b/src/docs/fr-FR/features/keyboard-shortcut.md
new file mode 100644
index 0000000000..2bb01c331b
--- /dev/null
+++ b/src/docs/fr-FR/features/keyboard-shortcut.md
@@ -0,0 +1,66 @@
+# キーボードショートカット
+
+## Global
+これらのショートカットは基本的にどこでも使えます。
+<table>
+    <thead>
+        <tr><th>ショートカット</th><th>効果</th><th>由来</th></tr>
+    </thead>
+    <tbody>
+        <tr><td><kbd class="key">P</kbd>, <kbd class="key">N</kbd></td><td>新規投稿</td><td><b>P</b>ost, <b>N</b>ew, <b>N</b>ote</td></tr>
+        <tr><td><kbd class="key">T</kbd></td><td>タイムラインの最も新しい投稿にフォーカス</td><td><b>T</b>imeline, <b>T</b>op</td></tr>
+        <tr><td><kbd class="group"><kbd class="key">Shift</kbd> + <kbd class="key">N</kbd></kbd></td><td>通知を表示/隠す</td><td><b>N</b>otifications</td></tr>
+        <tr><td><kbd class="key">S</kbd></td><td>Rechercher</td><td><b>S</b>earch</td></tr>
+        <tr><td><kbd class="key">H</kbd>, <kbd class="key">?</kbd></td><td>ヘルプを表示</td><td><b>H</b>elp</td></tr>
+    </tbody>
+</table>
+
+## 投稿にフォーカスされた状態
+<table>
+    <thead>
+        <tr><th>ショートカット</th><th>効果</th><th>由来</th></tr>
+    </thead>
+    <tbody>
+        <tr><td><kbd class="key">↑</kbd>, <kbd class="key">K</kbd>, <kbd class="group"><kbd class="key">Shift</kbd> + <kbd class="key">Tab</kbd></kbd></td><td>上の投稿にフォーカスを移動</td><td>-</td></tr>
+        <tr><td><kbd class="key">↓</kbd>, <kbd class="key">J</kbd>, <kbd class="key">Tab</kbd></td><td>下の投稿にフォーカスを移動</td><td>-</td></tr>
+        <tr><td><kbd class="key">R</kbd></td><td>返信フォームを開く</td><td><b>R</b>eply</td></tr>
+        <tr><td><kbd class="key">Q</kbd></td><td>Renoteフォームを開く</td><td><b>Q</b>uote</td></tr>
+        <tr><td><kbd class="group"><kbd class="key">Ctrl</kbd> + <kbd class="key">Q</kbd></kbd></td><td>即刻Renoteする(フォームを開かずに)</td><td>-</td></tr>
+        <tr><td><kbd class="key">E</kbd>, <kbd class="key">A</kbd>, <kbd class="key">+</kbd></td><td>リアクションフォームを開く</td><td><b>E</b>mote, re<b>A</b>ction</td></tr>
+        <tr><td><kbd class="key">0</kbd>~<kbd class="key">9</kbd></td><td>数字に対応したリアクションをする(対応については後述)</td><td>-</td></tr>
+        <tr><td><kbd class="key">F</kbd>, <kbd class="key">B</kbd></td><td>お気に入りに登録</td><td><b>F</b>avorite, <b>B</b>ookmark</td></tr>
+        <tr><td><kbd class="key">Del</kbd>, <kbd class="group"><kbd class="key">Ctrl</kbd> + <kbd class="key">D</kbd></kbd></td><td>投稿を削除</td><td><b>D</b>elete</tr>
+        <tr><td><kbd class="key">M</kbd>, <kbd class="key">O</kbd></td><td>投稿に対するメニューを開く</td><td><b>M</b>ore, <b>O</b>ther</td></tr>
+        <tr><td><kbd class="key">S</kbd></td><td>CWで隠された部分を表示 or 隠す</td><td><b>S</b>how, <b>S</b>ee</td></tr>
+        <tr><td><kbd class="key">Esc</kbd></td><td>フォーカスを外す</td><td>-</td></tr>
+    </tbody>
+</table>
+
+## Renoteフォーム
+<table>
+    <thead>
+        <tr><th>ショートカット</th><th>効果</th><th>由来</th></tr>
+    </thead>
+    <tbody>
+        <tr><td><kbd class="key">Enter</kbd></td><td>Renoteする</td><td>-</td></tr>
+        <tr><td><kbd class="key">Q</kbd></td><td>フォームを展開する</td><td><b>Q</b>uote</td></tr>
+        <tr><td><kbd class="key">Esc</kbd></td><td>フォームを閉じる</td><td>-</td></tr>
+    </tbody>
+</table>
+
+## リアクションフォーム
+デフォルトで「👍」にフォーカスが当たっている状態です。
+<table>
+    <thead>
+        <tr><th>ショートカット</th><th>効果</th><th>由来</th></tr>
+    </thead>
+    <tbody>
+        <tr><td><kbd class="key">↑</kbd>, <kbd class="key">K</kbd></td><td>上のリアクションにフォーカスを移動</td><td>-</td></tr>
+        <tr><td><kbd class="key">↓</kbd>, <kbd class="key">J</kbd></td><td>下のリアクションにフォーカスを移動</td><td>-</td></tr>
+        <tr><td><kbd class="key">←</kbd>, <kbd class="key">H</kbd>, <kbd class="group"><kbd class="key">Shift</kbd> + <kbd class="key">Tab</kbd></kbd></td><td>左のリアクションにフォーカスを移動</td><td>-</td></tr>
+        <tr><td><kbd class="key">→</kbd>, <kbd class="key">L</kbd>, <kbd class="key">Tab</kbd></td><td>右のリアクションにフォーカスを移動</td><td>-</td></tr>
+        <tr><td><kbd class="key">Enter</kbd>, <kbd class="key">Space</kbd>, <kbd class="key">+</kbd></td><td>リアクション確定</td><td>-</td></tr>
+        <tr><td><kbd class="key">0</kbd>~<kbd class="key">9</kbd></td><td>数字に対応したリアクションで確定</td><td>-</td></tr>
+        <tr><td><kbd class="key">Esc</kbd></td><td>リアクションするのをやめる</td><td>-</td></tr>
+    </tbody>
+</table>
diff --git a/src/docs/fr-FR/features/mfm.md b/src/docs/fr-FR/features/mfm.md
new file mode 100644
index 0000000000..5be2df4f30
--- /dev/null
+++ b/src/docs/fr-FR/features/mfm.md
@@ -0,0 +1,12 @@
+# MFM
+MFMは、Misskey Flavored Markdownの略で、Misskeyの様々な場所で使用できる専用のマークアップ言語です。 MFMで使用可能な構文は[MFMチートシート](/mfm-cheat-sheet)で確認できます。
+
+## MFMが使用可能な場所の例
+- ノート本文
+- CW注釈
+- ユーザーの名前
+- ユーザーの自己紹介
+
+## 開発者向け情報
+MFMのパーサー実装はライブラリとして公開されており、簡単にクライアントにMFMを組み込むことが可能です。
+- [misskey-dev/mfm.js](https://github.com/misskey-dev/mfm.js) - JavaScriptパーサー実装
diff --git a/src/docs/fr-FR/features/mute.md b/src/docs/fr-FR/features/mute.md
new file mode 100644
index 0000000000..b64dbfeaee
--- /dev/null
+++ b/src/docs/fr-FR/features/mute.md
@@ -0,0 +1,13 @@
+# Masquer
+
+ユーザーをミュートすると、そのユーザーに関する次のコンテンツがMisskeyに表示されなくなります:
+
+* タイムラインや投稿の検索結果内の、そのユーザーの投稿(およびそれらの投稿に対する返信やRenote)
+* そのユーザーからの通知
+* メッセージ履歴一覧内の、そのユーザーとのメッセージ履歴
+
+ユーザーをミュートするには、対象のユーザーのユーザーページに表示されている「ミュート」ボタンを押します。
+
+ミュートを行ったことは相手に通知されず、ミュートされていることを知ることもできません。
+
+設定>ミュート から、自分がミュートしているユーザー一覧を確認することができます。
diff --git a/src/docs/fr-FR/features/note.md b/src/docs/fr-FR/features/note.md
new file mode 100644
index 0000000000..a2c691c48e
--- /dev/null
+++ b/src/docs/fr-FR/features/note.md
@@ -0,0 +1,51 @@
+# Notes
+ノートは、Misskeyに投稿される、文章、ファイル、アンケートなどを含むコンテンツで、Misskeyの中心的概念です。また、そのノートを作成する行為自体もノートと呼ばれます。
+
+ノートが作成されると、[タイムライン](./timeline)に追加され、自分の[フォロワー](./follow)やサーバーのユーザーが見れるようになります。
+
+ノートには、[リアクション](./reaction)を行うことができます。また、返信や引用もできます。
+
+ノートを[お気に入り](./favorite)登録することで、後で簡単に見返すことができます。
+
+## ノートを作成する
+ノートを作成するには、画面上にある鉛筆マークのボタンを押して、作成フォームを開きます。作成フォームに内容を入力し、「ノート」ボタンを押すことでノートが作成されます。 ノートには、画像、動画など任意のファイルや、[アンケート](./poll)を添付することができます。また、本文中には[MFM](./mfm)が使用でき、[メンション](./mention)や[ハッシュタグ](./hashtag)を含めることもできます。 他にも、CWや公開範囲といった設定も行えます(詳細は後述)。
+<div class="info">ℹ️ コンピューターのクリップボードに画像データがある状態で、フォーム内のテキストボックスにペーストするとその画像を添付することができます。</div>
+<div class="info">ℹ️ テキストボックス内で<kbd class="key">Ctrl + Enter</kbd>を押すことでも投稿できます。</div>
+
+## Partager
+既にあるノートを引用、もしくはそのノートを新しいノートとして共有する行為、またそれによって作成されたノートをRenoteと呼びます。 自分がフォローしているユーザーの、気に入ったノートを自分のフォロワーに共有したい場合や、過去の自分のノートを再度共有したい場合に使います。 同じノートに対して無制限にRenoteを行うことができますが、あまり連続して使用すると迷惑になる場合もあるので、注意しましょう。
+<div class="warn">⚠️ 公開範囲がフォロワーやダイレクトのノートはRenoteできません</div>
+
+Renoteを削除するには、Renoteの時刻表示の隣にある「...」を押し、「Renote解除」を選択します。
+
+## CW
+Contents Warningの略で、ノートの内容を、閲覧者の操作なしには表示しないようにできる機能です。主に長大な内容を隠すためや、ネタバレ防止などに使うことができます。 設定するには、フォームの「内容を隠す」ボタン(目のアイコン)を押します。すると新しい入力エリアが表れるので、そこに内容の要約を記入します。
+
+## Visibilité
+ノートごとに、そのノートが公開される範囲を設定することができます。フォームの「ノート」ボタンの左にあるアイコンを押すと公開範囲を以下から選択できます。
+
+### Public
+全ての人に対してノートが公開されるほか、サーバーの全てのタイムライン(ホームタイムライン、ローカルタイムライン、ソーシャルタイムライン、グローバルタイムライン)にノートが流れます。
+<div class="warn">⚠️ アカウントが<a href="./silence">サイレンス</a>状態の時は、この公開範囲は使用できません。</div>
+
+### Principal
+全ての人に対してノートが公開されますが、フォロワー以外のローカルタイムライン、ソーシャルタイムライン、グローバルタイムラインにはノートは流れません。
+
+### Abonné·e·s
+自分のフォロワーに対してのみノートを公開します。フォロワーの全てのタイムラインに流れます。
+
+### Direct
+指定したユーザーに対してのみノートを公開します。指定したユーザーの全てのタイムラインに流れます。
+
+### 「ローカルのみ」オプション
+このオプションを有効にすると、リモートにノートを連合しなくなります。
+
+### 公開範囲の比較
+<table>
+    <tr><th></th><th>Public</th><th>Principal</th><th>Abonné·e·s</th><th>Direct</th></tr>
+    <tr><th>フォロワーのLTL/STL/GTL</th><td>✔</td><td>✔</td><td>✔</td><td></td></tr>
+    <tr><th>非フォロワーのLTL/STL/GTL</th><td>✔</td><td></td><td></td><td></td></tr>
+</table>
+
+## Épingler sur le profil
+ノートをピン留めすると、ユーザーページに常にそのノートを表示しておくことができます。 ノートのメニューを開き、「ピン留め」を選択してピン留めできます。 複数のノートをピン留めできます。
diff --git a/src/docs/fr-FR/features/pages.md b/src/docs/fr-FR/features/pages.md
new file mode 100644
index 0000000000..7fc6ee29c3
--- /dev/null
+++ b/src/docs/fr-FR/features/pages.md
@@ -0,0 +1,10 @@
+# Pages
+
+## Variables
+変数を使うことで動的なページを作成できます。テキスト内で <b>{ 変数名 }</b> と書くとそこに変数の値を埋め込めます。例えば <b>Hello { thing } world!</b> というテキストで、変数(thing)の値が <b>ai</b> だった場合、テキストは <b>Hello ai world!</b> になります。
+
+変数の評価(値を算出すること)は上から下に行われるので、ある変数の中で自分より下の変数を参照することはできません。例えば上から <b>A、B、C</b> と3つの変数を定義したとき、<b>C</b>の中で<b>A</b>や<b>B</b>を参照することはできますが、<b>A</b>の中で<b>B</b>や<b>C</b>を参照することはできません。
+
+ユーザーからの入力を受け取るには、ページに「ユーザー入力」ブロックを設置し、「変数名」に入力を格納したい変数名を設定します(変数は自動で作成されます)。その変数を使ってユーザー入力に応じた動作を行えます。
+
+関数を使うと、値の算出処理を再利用可能な形にまとめることができます。関数を作るには、「関数」タイプの変数を作成します。関数にはスロット(引数)を設定することができ、スロットの値は関数内で変数として利用可能です。また、関数を引数に取る関数(高階関数と呼ばれます)も存在します。関数は予め定義しておくほかに、このような高階関数のスロットに即席でセットすることもできます。
diff --git a/src/docs/fr-FR/features/reaction.md b/src/docs/fr-FR/features/reaction.md
new file mode 100644
index 0000000000..a61cee1477
--- /dev/null
+++ b/src/docs/fr-FR/features/reaction.md
@@ -0,0 +1,11 @@
+# Réactions
+他の人のノートに、絵文字を付けて簡単にあなたの反応を伝えられる機能です。 リアクションするには、ノートの + アイコンをクリックしてピッカーを表示し、絵文字を選択します。 リアクションには[カスタム絵文字](./custom-emoji)も使用できます。
+
+## リアクションピッカーのカスタマイズ
+ピッカーに表示される絵文字を自分好みにカスタマイズすることができます。 設定の「リアクション」で設定します。
+
+## リモート投稿へのリアクションについて
+リアクションはMisskeyオリジナルの機能であるため、リモートインスタンスがMisskeyでない限りは、ほとんどの場合「Like」としてアクティビティが送信されます。一般的にはLikeは「お気に入り」として実装されているようです。
+
+## リモートからのリアクションについて
+リモートから「Like」アクティビティを受信したとき、Misskeyでは「👍」のリアクションとして解釈されます。
diff --git a/src/docs/fr-FR/features/silence.md b/src/docs/fr-FR/features/silence.md
new file mode 100644
index 0000000000..a33a58525e
--- /dev/null
+++ b/src/docs/fr-FR/features/silence.md
@@ -0,0 +1,6 @@
+# Mettre en sourdine
+サイレンスは、アカウントに設定される状態のひとつです。
+
+アカウントがサイレンス状態になると、ノートの公開範囲をパブリックにできなくなります。 ホーム、フォロワー、ダイレクトは選択可能なため、サイレンスを受けた場合でもフォロワーやあなたのユーザーページを直接訪れた場合は投稿を閲覧できますが、GTL(連合タイムライン)やLTL(ローカルタイムライン)には投稿が流れません。
+
+アカウントのサイレンス状態は、サーバーのモデレーターによって有効化/無効化されます。
diff --git a/src/docs/fr-FR/features/theme.md b/src/docs/fr-FR/features/theme.md
new file mode 100644
index 0000000000..161cc44dde
--- /dev/null
+++ b/src/docs/fr-FR/features/theme.md
@@ -0,0 +1,68 @@
+# Thème
+
+テーマを設定して、Misskeyクライアントの見た目を変更できます。
+
+## テーマの設定
+設定 > テーマ
+
+## テーマを作成する
+テーマコードはJSON5で記述されたテーマオブジェクトです。 テーマは以下のようなオブジェクトです。
+``` js
+{
+    id: '17587283-dd92-4a2c-a22c-be0637c9e22a',
+
+    name: 'Danboard',
+    author: 'syuilo',
+
+    base: 'light',
+
+    props: {
+        accent: 'rgb(218, 141, 49)',
+        bg: 'rgb(218, 212, 190)',
+        fg: 'rgb(115, 108, 92)',
+        panel: 'rgb(236, 232, 220)',
+        renote: 'rgb(100, 152, 106)',
+        link: 'rgb(100, 152, 106)',
+        mention: '@accent',
+        hashtag: 'rgb(100, 152, 106)',
+        header: 'rgba(239, 227, 213, 0.75)',
+        navBg: 'rgb(216, 206, 182)',
+        inputBorder: 'rgba(0, 0, 0, 0.1)',
+    },
+}
+
+```
+
+* `id` ... テーマの一意なID。UUIDをおすすめします。
+* `name` ... テーマ名
+* `author` ... テーマの作者
+* `desc` ... テーマの説明(オプション)
+* `base` ... 明るいテーマか、暗いテーマか
+    * `light`にすると明るいテーマになり、`dark`にすると暗いテーマになります。
+    * テーマはここで設定されたベーステーマを継承します。
+* `props` ... テーマのスタイル定義。これから説明します。
+
+### テーマのスタイル定義
+`props`下にはテーマのスタイルを定義します。 キーがCSSの変数名になり、バリューで中身を指定します。 なお、この`props`オブジェクトはベーステーマから継承されます。 ベーステーマは、このテーマの`base`が`light`なら[_light.json5](https://github.com/misskey-dev/misskey/blob/develop/src/client/themes/_light.json5)で、`dark`なら[_dark.json5](https://github.com/misskey-dev/misskey/blob/develop/src/client/themes/_dark.json5)です。 つまり、このテーマ内の`props`に`panel`というキーが無くても、そこにはベーステーマの`panel`があると見なされます。
+
+#### バリューで使える構文
+* 16進数で表された色
+    * 例: `#00ff00`
+* `rgb(r, g, b)`形式で表された色
+    * 例: `rgb(0, 255, 0)`
+* `rgb(r, g, b, a)`形式で表された透明度を含む色
+    * 例: `rgba(0, 255, 0, 0.5)`
+* 他のキーの値の参照
+    * `@{キー名}`と書くと他のキーの値の参照になります。`{キー名}`は参照したいキーの名前に置き換えます。
+    * 例: `@panel`
+* 定数(後述)の参照
+    * `${定数名}`と書くと定数の参照になります。`{定数名}`は参照したい定数の名前に置き換えます。
+    * 例: `$main`
+* 関数(後述)
+    * `:{関数名}<{引数}<{色}`
+
+#### Constante
+「CSS変数として出力はしたくないが、他のCSS変数の値として使いまわしたい」値があるときは、定数を使うと便利です。 キー名を`$`で始めると、そのキーはCSS変数として出力されません。
+
+#### Fonction
+wip
diff --git a/src/docs/fr-FR/features/timeline.md b/src/docs/fr-FR/features/timeline.md
new file mode 100644
index 0000000000..46f26ffd35
--- /dev/null
+++ b/src/docs/fr-FR/features/timeline.md
@@ -0,0 +1,31 @@
+# Fil
+タイムラインは、[ノート](./note)が時系列で表示される機能です。 タイムラインには以下で示す種類があり、種類によって表示されるノートも異なります。 なお、タイムラインの種類によってはサーバーにより無効になっている場合があります。
+
+## Principal
+自分のフォローしているユーザーの投稿が流れます。HTLと略されます。
+
+## Local
+全てのローカルユーザーの「ホーム」指定されていない投稿が流れます。LTLと略されます。
+
+## Social
+自分のフォローしているユーザーの投稿と、全てのローカルユーザーの「ホーム」指定されていない投稿が流れます。STLと略されます。
+
+## Global
+全てのローカルユーザーの「ホーム」指定されていない投稿と、サーバーに届いた全てのリモートユーザーの「ホーム」指定されていない投稿が流れます。GTLと略されます。
+
+## Comparer
+| ソース                |            |           | Fil   |        |        |
+| ------------------ | ---------- | --------- | ----- | ------ | ------ |
+| Utilisateur·rice·s | Visibilité | Principal | Local | Social | Global |
+| ローカル (フォロー)        | Public     | ✔         | ✔     | ✔      | ✔      |
+|                    | Principal  | ✔         |       | ✔      |        |
+|                    | Abonné·e·s | ✔         | ✔     | ✔      | ✔      |
+| リモート (フォロー)        | Public     | ✔         |       | ✔      | ✔      |
+|                    | Principal  | ✔         |       | ✔      |        |
+|                    | Abonné·e·s | ✔         |       | ✔      | ✔      |
+| ローカル (未フォロー)       | Public     |           | ✔     | ✔      | ✔      |
+|                    | Principal  |           |       |        |        |
+|                    | Abonné·e·s |           |       |        |        |
+| リモート (未フォロー)       | Public     |           |       |        | ✔      |
+|                    | Principal  |           |       |        |        |
+|                    | Abonné·e·s |           |       |        |        |
diff --git a/src/docs/fr-FR/features/widgets.md b/src/docs/fr-FR/features/widgets.md
new file mode 100644
index 0000000000..7c5cacb39a
--- /dev/null
+++ b/src/docs/fr-FR/features/widgets.md
@@ -0,0 +1,7 @@
+# Widgets
+ウィジェットは、MisskeyのUI上に設置できる小型の情報表示、操作が行えるパーツです。
+
+ウィジェットを編集するには、ウィジェット編集モードに切り替えます。切り替え方法はUIによって異なります。 ウィジェット編集モードでは、ウィジェットの追加、削除、並び替え、およびそれぞれのウィジェットの設定を行えます。
+
+## 利用可能なウィジェット一覧
+todo
diff --git a/src/docs/fr-FR/general/apps.md b/src/docs/fr-FR/general/apps.md
new file mode 100644
index 0000000000..1f4c85fe8f
--- /dev/null
+++ b/src/docs/fr-FR/general/apps.md
@@ -0,0 +1,6 @@
+# サードパーティアプリのリスト
+## クライアント
+todo
+
+## 連携サービス
+todo
diff --git a/src/docs/fr-FR/general/faq.md b/src/docs/fr-FR/general/faq.md
new file mode 100644
index 0000000000..ecb664e32e
--- /dev/null
+++ b/src/docs/fr-FR/general/faq.md
@@ -0,0 +1,22 @@
+# よくある質問
+ここでは利用上のよくある質問について掲載しています。 Misskeyのプロジェクト自体についてのよくある質問は[こちら](./misskey)に掲載されています。
+
+### iOS/Androidのアプリはありますか?
+公式にはそういったOSのネイティブアプリを開発していませんが、サードパーティ製のアプリがいくつかあります。 詳しくは[こちら](./apps)をご覧ください。
+
+ただ、サードパーティ製アプリはどうしても機能への対応が遅れてしまうため、とくに拘りがなければ公式のWebクライアントの利用をおすすめします。 なお、MisskeyのWebクライアントはPWAに対応しているので、ネイティブアプリのように動作させることも可能です。 詳しくは[こちら](todo)をご覧ください。
+
+## 他のサーバーのユーザーをフォローするときは?
+メニューから検索を選び、ユーザー名をホスト込みで入力します。例: `@syuilo@misskey.io`
+
+## Renoteを削除するには?
+Renoteの時刻表示の隣にある「...」を押し、「Renote解除」を選択します。 Renoteについては[こちら](../features/note)をご確認ください。
+
+## URLのプレビューを表示させたくない
+MFMには、そのURLのプレビューを無効にする構文があります。詳細は[MFMチートシート](/mfm-cheat-sheet)をご確認ください。
+
+## カスタム絵文字を追加したい
+運営者のみがカスタム絵文字を追加、編集、削除できます。それらを希望する場合は運営者に依頼してください。
+
+## Botを開発したい
+Misskey APIを利用してBotの開発が可能です。[こちら](../advanced/develop-bot)をご確認ください。
diff --git a/src/docs/fr-FR/general/glossary.md b/src/docs/fr-FR/general/glossary.md
new file mode 100644
index 0000000000..1b5eab6412
--- /dev/null
+++ b/src/docs/fr-FR/general/glossary.md
@@ -0,0 +1,83 @@
+# 用語集
+Misskeyに関する用語集です。
+
+## AcitivityPub
+(読み: あくてぃびてぃぱぶ) 分散型を実現するために用いられるプロトコル(仕様)。このプロトコルに則ってサーバー同士通信を行うことで、連合が行われ、Fediverseを形成しています。
+
+## AiScript
+(読み: あいすくりぷと) Misskey上で使用できるプログラミング言語です。詳細は[こちら。](../advanced/aiscript)
+
+## API
+(読み: えーぴーあい) Misskeyのサーバーが公開している、プログラムからMisskeyを扱うためのインターフェース。詳細は[こちら。](../advanced/api)
+
+## Bot
+(読み: ぼっと) プログラムによって動作しているアカウント。
+
+## CW
+(読み: こんてんつわーにんぐ) Contents Warningの略。ノートの内容を、操作なしには表示しないようにできる機能。主に長大な内容を隠すためや、ネタバレ防止などに使われます。
+
+## Fediverse
+(読み: ふぇでぃばーす) Misskeyを含む様々な分散型ソフトウェアのサーバーで構成されたネットワーク。
+
+## GTL
+グローバルタイムライン(Global TimeLine)の略。タイムラインの詳細は[こちら。](../features/timeline)
+
+## HTL
+ホームタイムライン(Home TimeLine)の略。タイムラインの詳細は[こちら。](../features/timeline)
+
+## LTL
+ローカルタイムライン(Local TimeLine)の略。タイムラインの詳細は[こちら。](../features/timeline)
+
+## MFM
+(読み: えむえふえむ) Misskey Flavored Markdownの略で、Misskey上で使用できるマークアップ言語です。詳細は[こちら。](../features/mfm)
+
+## NSFW
+(読み: のっとせーふふぉーわーく) Not Safe For Workの略。画像を「閲覧注意」扱いにし、操作なしには表示しないようにすることができる機能。
+
+## Partager
+(読み: りのーと) 既にあるノートを引用、もしくはそのノートを新しいノートとして共有する行為、またそれによって作成されたノート。詳細は[こちら。](../features/note)
+
+## STL
+ソーシャルタイムライン(Social TimeLine)の略。タイムラインの詳細は[こちら。](../features/timeline)
+
+## 藍
+(読み: あい) Misskeyの看板娘(公式キャラクター)です。
+
+## アクティブユーザー
+インスタンスにアカウントを作っているユーザーのうち、現在も実際にサービスを利用しているユーザーのこと。
+
+## Instance
+todo
+
+## コントロールパネル
+インスタンスの設定画面のこと。
+
+## Serveurs
+todo
+
+## Mettre en sourdine
+ノートをパブリックな公開範囲で投稿できなくされている状態。モデレーターの判断でユーザーごとに設定されます。詳細は[こちら。](../features/silence)
+
+## Suspendre
+アカウントが使用不可に設定されている状態。
+
+## Drive
+Misskeyにアップロードしたファイルを管理する機能。詳細は[こちら。](../features/drive)
+
+## Notes
+Misskeyに投稿される、文章、ファイル、アンケートなどを含めることができるコンテンツ。詳細は[こちら。](../features/note)
+
+## ミスキスト
+Misskeyを使う人のこと。
+
+## Modérateurs
+スパムの凍結およびサイレンスや不適切な投稿の削除など、コミュニティ運営に関する権限を持つユーザー。
+
+## Distant
+他サーバーのことを指します。リモートユーザーといったように接頭辞としても使われます。ローカルの逆です。
+
+## Fédération
+サーバー上で作成された情報が他のサーバーに伝わること。
+
+## Local
+自サーバーのことを指します。ローカルユーザー、ローカルタイムラインといったように接頭辞としても使われます。リモートの逆です。
diff --git a/src/docs/fr-FR/general/links.md b/src/docs/fr-FR/general/links.md
new file mode 100644
index 0000000000..d6b16856fb
--- /dev/null
+++ b/src/docs/fr-FR/general/links.md
@@ -0,0 +1,5 @@
+# リンク集
+
+## ライブラリ
+- [misskey-dev/misskey.js](https://github.com/misskey-dev/misskey.js) - JavaScriptのMisskey SDK
+- [misskey-dev/mfm.js](https://github.com/misskey-dev/mfm.js) - JavaScriptのMFMパーサー実装
diff --git a/src/docs/fr-FR/general/misskey.md b/src/docs/fr-FR/general/misskey.md
new file mode 100644
index 0000000000..2a3ee09a96
--- /dev/null
+++ b/src/docs/fr-FR/general/misskey.md
@@ -0,0 +1,87 @@
+# À propos de Misskey
+
+Misskeyはオープンソースの分散型マイクロブログプラットフォームプロジェクトです。 開発は日本でsyuiloによって2014年から開始されました。 ドライブ、リアクションなどの豊富な機能や、高いカスタマイズ性を備えたUIを持つことが特徴です。
+
+## 歴史
+開発当初は掲示板がメインのサービスでしたが、ユーザーが短文を投稿し、それを時系列で流れるタイムライン機能を追加したところ人気が高まり、徐々にそれがメインとして開発が進むようになりました。 当初は分散型ではありませんでしたが、2018年にAcitivityPubを実装し分散型になったことで、より多くの方に認知され利用されるサービスになり、現在に至ります。
+<div class="info">ℹ️ Misskeyという名前は、syuiloが当時聴いていたMay'nというアーティストの楽曲、Brain Diverの歌詞に由来します。</div>
+
+誰でも開発に参加することができ、現在でも活発に開発が続いています。
+
+## 分散型とは何か?
+
+<b>分散(distributed)型</b>とは、<b>非中央集権(decentralized)</b>とも呼ばれ、コミュニティが多数のサーバーに分散して存在し、それらが相互に<b>通信(連合、federation)</b>することでコンテンツ共有<b>ネットワーク(Fediverse)</b>を形成していることが特徴のサービスです。 単一のサーバーしか存在しない、もしくは複数存在しても互いに独立している場合は中央集権なサービスと言われ、例えばTwitterやFacebookなどほとんどのサービスがそれに該当します。 分散型のメリットは、自分に合った運営者やテーマのサーバーを選択できることです。自分でサーバーを作成することもできます。連合するおかげで、どのサーバーを選んでも、同じコミュニティにアクセスできます。
+
+## 常にオープンソース
+Misskeyはこれまでもこれからも、オープンソースであり続けます。オープンソースとは、簡単に言うと<b>ソフトウェアのソースコード(プログラム)が公開されている</b>ことです。ソースコードの修正や再配布が可能であることを定義に含めることもあります。 Misskeyのすべてのソースコードは[AGPL](https://github.com/misskey-dev/misskey/blob/develop/LICENSE)というオープンソースライセンスの下に[公開](https://github.com/misskey-dev)されていて、誰でも自由に閲覧、使用、修正、改変、再配布をすることができます。 オープンソースは、自分で好きなように変えたり、有害な処理が含まれていないことを確認することができたり、誰でも開発に参加できるなどの、様々なメリットがあります。 上述の分散型を実現するためにも、オープンソースであるということは必要不可欠な要素です。 再び引き合いに出しますが、TwitterやFacebookなどの利益を得ているほとんどのサービスはオープンソースではありません。
+
+<div class="info">ℹ️ 技術的に言うと、MisskeyのソースコードはGitで管理されていて、リポジトリは<a href="https://github.com/misskey-dev" target="_blank">GitHub上でホスティングされています。</a></div>
+
+## 開発に参加する、プロジェクトを支援する
+Misskeyを気に入っていただけたら、ぜひプロジェクトを支援してください。プロジェクトに貢献するには、以下で紹介するようにいろいろな方法があります。方法によっては開発のスキルは不要なので、誰でも気軽に参加し貢献することができます。いつでもお待ちしています。
+
+### 機能を追加したり、バグを修正する
+ソフトウェアエンジニアのスキルをお持ちの方であれば、ソースコードを編集する形でプロジェクトに貢献することができます。 貢献についてのガイドは[こちら](https://github.com/misskey-dev/misskey/blob/develop/CONTRIBUTING.md)です。
+
+### 議論に参加する
+新しい機能、または既存の機能について意見を述べたり、不具合を報告したりすることでも貢献できます。 そのようなディスカッションは[GitHub](https://github.com/misskey-dev)上か、[フォーラム](https://forum.misskey.io/)等で行われます。
+
+### テキストを翻訳する
+Misskeyは様々な言語に対応しています(i18n -internationalizationの略- と呼ばれます)。元の言語は基本的に日本語ですが、有志によって他の言語へと翻訳されています。 その翻訳作業に加わっていただくことでもMisskeyに貢献できます。 Misskeyは[Crowdinというサービスを使用して翻訳の管理を行っています。](https://crowdin.com/project/misskey)
+
+### 感想を投稿する
+不具合報告等だけではなく、Misskeyの良い点、楽しい点といったポジティブな意見もぜひ共有してください。開発の励みになり、それは間接的ですがプロジェクトへの貢献です。
+
+### ミスキストを増やす
+ミスキストとは、Misskeyを使用する人のことです。 知り合いに紹介するなどしてMisskeyを広めていただければ、ミスキストが増え開発のモチベーションが上がります。
+
+### 寄付をする
+Misskeyはビジネスではなく、利用は無料であるため、収益は皆様からの寄付のみです。(インスタンスによっては広告収入を得ているような場合もありますが、それは運営者の収入であり直接開発者への収入にはなりません) 寄付をしていただければ、今後も開発を続けることが可能になり、プロジェクトへの貢献になります。 寄付は基本的には[Patreon](https://www.patreon.com/syuilo)で受け付けています。 一定額寄付していただけると、Misskeyの[情報ページ](/about-misskey)に名前を記載することができます。
+
+また、サーバーの運営者も、基本的には収益を得ていません。サーバーの運営にはコストがかかるので、運営者の支援をすることもご検討ください。 開発には直接関係しませんが、サーバーがあってこそのプロジェクトなので、運営が維持されるというのは開発と同じくらい重要なことです。
+
+## クレジット
+Misskeyの開発者や、Misskeyに寄付をしてくださった方の一覧は[こちら](/about-misskey)で見ることができます。
+
+## よくある質問
+### プロジェクトは何を目指していますか?
+強いて言うと、漠然的になりますが広く使われる汎用的なプラットフォームになることを目指しています。 Misskeyは他のプロジェクトとは違い、何らかの思想(例えば、反中央集権)やビジョンに基づいて開発が行われているわけではなく、その点ではフラットです。 それが逆に、特定の方向性に縛られないフレキシブルさを生み出すことに繋がっていると感じています。
+<!-- TODO: ここにロードマップへのリンク -->
+
+### 企業によって開発されていますか?
+いいえ。Misskeyの開発は個人で行われており、商業的でもないため、特定の企業の関りはありません。 開発メンバーも基本的にはボランティアです。 また、開発に対し企業のスポンサーがつくこともありますが、その場合でもやはり開発は個人のコミュニティが主体です。
+
+### 誰が運営していますか?
+Misskeyは分散型なため、各サーバーにそれぞれ異なった運営者がいます。従って、特定の個人や企業によって、Misskeyの全てが運営されているわけではありません。 また、開発チームが運営を行うわけでもないため、運営に関する連絡は、お使いのサーバーの運営者に行ってください。 サーバーの運営者は、[このページ](/about)で確認することができます。 あなたがサーバーを作成すれば、あなたが運営者になります。
+
+### どのサーバーを選べばいいですか?
+[サーバー一覧が公開されています。](https://join.misskey.page/ja-JP/instances) サーバーによってコミュニティのテーマ(特定のこと、ものが好き 等)が決められている場合があるので、自分に合ったテーマのサーバーがあれば、そこを選ぶと良いかもしれません。 他にも、サーバーの規模、ユーザー層、国および言語、運営者が信頼できるかどうか、などの観点があります。 なお、Misskey公式のサーバーというものはありません。自身で新しくサーバーを作成するという選択肢もあります。
+
+基本的にどのサーバーを選んだとしても、他の全てのサーバーのユーザーと繋がることができます。
+
+### サーバーを建てるにはどうしたらいいですか?
+Misskeyサーバーの作成に興味を持っていただきありがとうございます。 2021年現在、Misskeyのホスティングサービスは存在しないため、サーバーの作成にはある程度の知識が必要です。 サーバーの作成方法については[こちら](todo)をご覧ください。
+
+### どのような技術を使用していますか?
+Misskeyは開発が進むにつれ使用する技術も大きく変わってきました。開発当初はMySQL + PHP + jQueryといった構成でしたが、現在は以下のようになっています。
+- サーバーサイド: Node.js
+- データベース: PostgreSQL、Redis
+- UIフレームワーク: Vue.js
+- プログラミング言語: TypeScript
+
+また、MFMやAiScriptなどの、Misskeyから派生して独自の技術も開発しています。
+
+### Mastodonのフォークですか?
+いいえ。MisskeyはMastodonやその他のプロジェクトとは全く別のプロジェクトです。 開発に関しても、Misskeyの方が昔から開発されています。ただし、分散型になったのはMastodonの登場より後です。 同じAcitivityPubという分散のためのプロトコルを実装しているという点以外、両者に特に関りがあるわけでもありません。
+
+### iOS/Androidのアプリはありますか?
+公式にはそういったOSのネイティブアプリを開発していませんが、サードパーティ製のアプリがいくつかあります。 詳しくは[こちら](./apps)をご覧ください。
+
+ただ、サードパーティ製アプリはどうしても機能への対応が遅れてしまうため、とくに拘りがなければ公式のWebクライアントの利用をおすすめします。 なお、MisskeyのWebクライアントはPWAに対応しているので、ネイティブアプリのように動作させることも可能です。 詳しくは[こちら](todo)をご覧ください。
+
+### Misskeyのロゴ、アイコンはどこで入手できますか?
+(準備中)
+
+### 時折目にする猫耳の可愛い女の子は?
+Misskeyの守り神、藍ちゃんです。アイチャンカワイイヤッター!
+<div class="info">ℹ️ 藍ちゃんについては<a href="https://xn--931a.moe/" target="_blank">こちら</a>です。</div>
diff --git a/src/docs/fr-FR/general/report-issue.md b/src/docs/fr-FR/general/report-issue.md
new file mode 100644
index 0000000000..63527e32af
--- /dev/null
+++ b/src/docs/fr-FR/general/report-issue.md
@@ -0,0 +1,8 @@
+# 不具合の報告
+不具合と思われる状況に遭遇したときは、まず[トラブルシューティング](./troubleshooting)をご一読ください。 それでも問題が解決しないときは、以下の情報を含めて[フォーラム](https://forum.misskey.io/)に投稿してください。 投稿することで、解決策が見つかったり、不具合と判断されれば開発チームによって修正が行われます。
+
+## 含める情報
+- Misskeyのバージョン([情報ページ](/about)で確認できます)
+- お使いのブラウザの種類とバージョン
+- お使いのOSの種類とバージョン
+- 問題の再現手順
diff --git a/src/docs/fr-FR/general/troubleshooting.md b/src/docs/fr-FR/general/troubleshooting.md
new file mode 100644
index 0000000000..9f6abff12a
--- /dev/null
+++ b/src/docs/fr-FR/general/troubleshooting.md
@@ -0,0 +1,36 @@
+# Résolution de problèmes
+<div class="info">ℹ️ <a href="./faq">よくある質問</a>も合わせてお役立てください。</div>
+
+問題が発生したときは、まずこちらをご確認ください。 該当する項目が無い、もしくは手順を試しても効果がない場合は、サーバーの管理者に連絡するか[不具合を報告](./report-issue)してください。
+
+## クライアントが起動しない
+ほとんどの場合、お使いのブラウザまたはOSのバージョンが古いことが原因です。 ブラウザおよびOSのバージョンを最新のものに更新してから、再度試してみてください。
+
+これは稀ですが、それでも起動しない場合は、キャッシュが原因の場合があります。ブラウザのキャッシュをクリアして、再度試してみてください。
+
+## ページが読み込めない
+クライアントが起動するもののページが読み込めないというエラーが出る場合は、ネットワークに問題がないか確認してください。また、サーバーがダウンしていないか確認してください。
+
+これは稀ですが、キャッシュが原因の場合があります。ブラウザのキャッシュをクリアして、再度試してみてください。
+
+まだ問題がある場合は、サーバーの問題と思われるのでサーバーの管理者に連絡してください。
+
+## クライアントの動作が遅い
+以下を試してみてください:
+
+- クライアント設定で「UIのアニメーションを減らす」を有効にする
+- クライアント設定で「モーダルにぼかし効果を使用」を無効にする
+- お使いのブラウザの設定でハードウェアアクセラレーションを有効にする
+- お使いのデバイスのスペックを上げる
+
+## 通知やアンテナ等の点滅が消えない
+点滅は、未読のコンテンツがあることを示しています。通常点滅が消えない場合は、コンテンツを遡ると未読なコンテンツが残っています。 すべて既読にしたと思われるのに、それでもなお点滅が続く場合(おそらく不具合と思われます)は設定から強制的にすべて既読扱いにすることができます。
+
+## Renoteができない
+フォロワー限定のノートはRenoteすることはできません。
+
+## UI上で特定の要素が表示されない
+広告ブロッカーを使用しているとそのような不具合が発生することがあります。Misskeyではオフにしてご利用ください。
+
+## UI上で未翻訳の部分がある
+ほとんどの場合、単に翻訳が間に合っていないだけで、不具合ではありません。翻訳が終わるまでお待ちください。 [翻訳に参加](./misskey)していただくことも可能です。
diff --git a/src/docs/ht-HT/admin/disable-timelines.md b/src/docs/ht-HT/admin/disable-timelines.md
new file mode 100644
index 0000000000..b081e35ab0
--- /dev/null
+++ b/src/docs/ht-HT/admin/disable-timelines.md
@@ -0,0 +1,8 @@
+# LTL/STL/GTLの無効化
+Misskeyでは、LTL/STL/GTLをそれぞれ無効化することができます。有効/無効を切り替えるには、インスタンスコントロールパネルで設定します。
+
+LTLやSTLは、そのインスタンス全員の投稿が見れるため、新規のユーザーにとってはユーザーを探す必要がなくなり、興味のあるユーザーを見つけやすいという利点があります。 しかし同時に、フォロー機能が活用されなくなったり、不適切な投稿が目につきやすくなったり、チャットのようになることで内輪感が生じて逆に新規ユーザーが参加しにくくなるといったデメリットも持ち合わせています。 サーバーによってメリット/デメリットどちらが優勢かは異なるので、オプションとして無効にできるようになっています。 もしデメリットの方が上回っていると感じたら、それらのタイムラインを無効化することも検討してください。
+
+<div class="warn">⚠️ 無効化を行うと、ユーザーが困惑し、短期的に見て利用者が減る可能性があります。そのため、無効化の際は影響を慎重に検討し、事前に説明してフォローを整える期間を一定程度設けることを推奨します。</div>
+
+なお、管理者/モデレーターは、これらのタイムラインの無効化状態は適用されず、引き続き利用することが可能です。
diff --git a/src/docs/ht-HT/admin/faq.md b/src/docs/ht-HT/admin/faq.md
new file mode 100644
index 0000000000..317b4e0655
--- /dev/null
+++ b/src/docs/ht-HT/admin/faq.md
@@ -0,0 +1,5 @@
+# よくある質問
+ここでは、サーバー管理者向けのよくある質問を掲載しています。
+
+## デフォルトテーマを設定したい
+現在、デフォルトテーマ設定機能は実装されていません。
diff --git a/src/docs/ht-HT/advanced/aiscript.md b/src/docs/ht-HT/advanced/aiscript.md
new file mode 100644
index 0000000000..604d17daa8
--- /dev/null
+++ b/src/docs/ht-HT/advanced/aiscript.md
@@ -0,0 +1,7 @@
+# AiScript
+AiScriptは、Misskeyで使用できるスクリプト言語です。
+
+<div class="info">ℹ️ AiScript実装はMisskeyとは別リポジトリで、<a href="https://github.com/syuilo/aiscript" target="_blank">オープンソースで公開されています。</a></div>
+
+## 使い方
+AiScriptの構文や組み込み関数などのドキュメントは、[こちら](https://github.com/syuilo/aiscript/tree/master/docs)で公開されています。
diff --git a/src/docs/ht-HT/advanced/api.md b/src/docs/ht-HT/advanced/api.md
new file mode 100644
index 0000000000..76019b6145
--- /dev/null
+++ b/src/docs/ht-HT/advanced/api.md
@@ -0,0 +1,58 @@
+# Misskey API
+
+MisskeyAPIを使ってMisskeyクライアント、Misskey連携Webサービス、Bot等(以下「アプリケーション」と呼びます)を開発できます。 ストリーミングAPIもあるので、リアルタイム性のあるアプリケーションを作ることも可能です。
+
+APIを使い始めるには、まずアクセストークンを取得する必要があります。 このドキュメントでは、アクセストークンを取得する手順を説明した後、基本的なAPIの使い方を説明します。
+
+## アクセストークンの取得
+基本的に、APIはリクエストにはアクセストークンが必要となります。 APIにリクエストするのが自分自身なのか、不特定の利用者に使ってもらうアプリケーションなのかによって取得手順は異なります。
+
+* 前者の場合: [「自分自身のアクセストークンを手動発行する」](#自分自身のアクセストークンを手動発行する)に進む
+* 後者の場合: [「アプリケーション利用者にアクセストークンの発行をリクエストする」](#アプリケーション利用者にアクセストークンの発行をリクエストする)に進む
+
+### 自分自身のアクセストークンを手動発行する
+「設定 > API」で、自分のアクセストークンを発行できます。
+
+[「APIの使い方」へ進む](#APIの使い方)
+
+### アプリケーション利用者にアクセストークンの発行をリクエストする
+アプリケーション利用者のアクセストークンを取得するには、以下の手順で発行をリクエストします。
+
+#### Step 1
+
+UUIDを生成する。以後これをセッションIDと呼びます。
+
+> このセッションIDは毎回生成し、使いまわさないようにしてください。
+
+#### Step 2
+
+`{_URL_}/miauth/{session}`をユーザーのブラウザで表示させる。`{session}`の部分は、セッションIDに置き換えてください。
+> 例: `{_URL_}/miauth/c1f6d42b-468b-4fd2-8274-e58abdedef6f`
+
+表示する際、URLにクエリパラメータとしていくつかのオプションを設定できます:
+* `name` ... アプリケーション名
+    * > 例: `MissDeck`
+* `icon` ... アプリケーションのアイコン画像URL
+    * > 例: `https://missdeck.example.com/icon.png`
+* `callback` ... 認証が終わった後にリダイレクトするURL
+    * > 例: `https://missdeck.example.com/callback`
+    * リダイレクト時には、`session`というクエリパラメータでセッションIDが付きます
+* `permission` ... アプリケーションが要求する権限
+    * > 例: `write:notes,write:following,read:drive`
+    * 要求する権限を`,`で区切って列挙します
+    * どのような権限があるかは[APIリファレンス](/api-doc)で確認できます
+
+#### Step 3
+ユーザーが発行を許可した後、`{_URL_}/api/miauth/{session}/check`にPOSTリクエストすると、レスポンスとしてアクセストークンを含むJSONが返ります。
+
+レスポンスに含まれるプロパティ:
+* `token` ... ユーザーのアクセストークン
+* `user` ... ユーザーの情報
+
+[「APIの使い方」へ進む](#APIの使い方)
+
+## APIの使い方
+**APIはすべてPOSTで、リクエスト/レスポンスともにJSON形式です。RESTではありません。** アクセストークンは、`i`というパラメータ名でリクエストに含めます。
+
+* [APIリファレンス](/api-doc)
+* [ストリーミングAPI](./stream)
diff --git a/src/docs/ht-HT/advanced/create-plugin.md b/src/docs/ht-HT/advanced/create-plugin.md
new file mode 100644
index 0000000000..0d2fa19178
--- /dev/null
+++ b/src/docs/ht-HT/advanced/create-plugin.md
@@ -0,0 +1,74 @@
+# プラグインの作成
+Misskey Webクライアントのプラグイン機能を使うと、クライアントを拡張し、様々な機能を追加できます。 ここではプラグインの作成にあたってのメタデータ定義や、AiScript APIリファレンスを掲載します。
+
+## メタデータ
+プラグインは、AiScriptのメタデータ埋め込み機能を使って、デフォルトとしてプラグインのメタデータを定義する必要があります。 メタデータは次のプロパティを含むオブジェクトです。
+
+### name
+プラグイン名
+
+### author
+プラグイン作者
+
+### version
+プラグインバージョン。数値を指定してください。
+
+### description
+プラグインの説明
+
+### permissions
+プラグインが要求する権限。MisskeyAPIにリクエストする際に用いられます。
+
+### config
+プラグインの設定情報を表すオブジェクト。 キーに設定名、値に以下のプロパティを含めます。
+
+#### type
+設定値の種類を表す文字列。以下から選択します。 string number boolean
+
+#### label
+ユーザーに表示する設定名
+
+#### description
+設定の説明
+
+#### default
+設定のデフォルト値
+
+## APIリファレンス
+AiScript標準で組み込まれているAPIは掲載しません。
+
+### Mk:dialog(title text type)
+ダイアログを表示します。typeには以下の値が設定できます。 info success warn error question 省略すると info になります。
+
+### Mk:confirm(title text type)
+確認ダイアログを表示します。typeには以下の値が設定できます。 info success warn error question 省略すると question になります。 ユーザーが"OK"を選択した場合は true を、"キャンセル"を選択した場合は false が返ります。
+
+### Mk:api(endpoint params)
+Misskey APIにリクエストします。第一引数にエンドポイント名、第二引数にパラメータオブジェクトを渡します。
+
+### Mk:save(key value)
+任意の値に任意の名前を付けて永続化します。永続化した値は、AiScriptコンテキストが終了しても残り、Mk:loadで読み取ることができます。
+
+### Mk:load(key)
+Mk:saveで永続化した指定の名前の値を読み取ります。
+
+### Plugin:register_post_form_action(title fn)
+投稿フォームにアクションを追加します。第一引数にアクション名、第二引数にアクションが選択された際のコールバック関数を渡します。 コールバック関数には、第一引数に投稿フォームオブジェクトが渡されます。
+
+### Plugin:register_note_action(title fn)
+ノートメニューに項目を追加します。第一引数に項目名、第二引数に項目が選択された際のコールバック関数を渡します。 コールバック関数には、第一引数に対象のノートオブジェクトが渡されます。
+
+### Plugin:register_user_action(title fn)
+ユーザーメニューに項目を追加します。第一引数に項目名、第二引数に項目が選択された際のコールバック関数を渡します。 コールバック関数には、第一引数に対象のユーザーオブジェクトが渡されます。
+
+### Plugin:register_note_view_interruptor(fn)
+UIに表示されるノート情報を書き換えます。 コールバック関数には、第一引数に対象のノートオブジェクトが渡されます。 コールバック関数の返り値でノートが書き換えられます。
+
+### Plugin:register_note_post_interruptor(fn)
+ノート投稿時にノート情報を書き換えます。 コールバック関数には、第一引数に対象のノートオブジェクトが渡されます。 コールバック関数の返り値でノートが書き換えられます。
+
+### Plugin:open_url(url)
+第一引数に渡されたURLをブラウザの新しいタブで開きます。
+
+### Plugin:config
+プラグインの設定が格納されるオブジェクト。プラグイン定義のconfigで設定したキーで値が入ります。
diff --git a/src/docs/ht-HT/advanced/develop-bot.md b/src/docs/ht-HT/advanced/develop-bot.md
new file mode 100644
index 0000000000..7f825e9bc4
--- /dev/null
+++ b/src/docs/ht-HT/advanced/develop-bot.md
@@ -0,0 +1,6 @@
+# Botの作成
+[Misskey API](./api)を利用してBotの開発が可能です。 また、いくつかのBot実装が公開されているため、ぜひ参考にしてください。
+
+- [syuilo/ai](https://github.com/syuilo/ai) ... Node.js上で動く、TypeScript製Bot実装
+
+Botを作成したときは、プロフィール設定からBotフラグをオンにしておくことを強くおすすめします。
diff --git a/src/docs/ht-HT/advanced/reversi-bot.md b/src/docs/ht-HT/advanced/reversi-bot.md
new file mode 100644
index 0000000000..7ab2a7212e
--- /dev/null
+++ b/src/docs/ht-HT/advanced/reversi-bot.md
@@ -0,0 +1,160 @@
+# MisskeyリバーシBotの開発
+Misskeyのリバーシ機能に対応したBotの開発方法をここに記します。
+
+1. `games/reversi`ストリームに以下のパラメータを付けて接続する:
+    * `i`: botアカウントのAPIキー
+
+2. 対局への招待が来たら、ストリームから`invited`イベントが流れてくる
+    * イベントの中身に、`parent`という名前で対局へ誘ってきたユーザーの情報が含まれている
+
+3. `games/reversi/match`へ、`user_id`として`parent`の`id`が含まれたリクエストを送信する
+
+4. 上手くいくとゲーム情報が返ってくるので、`games/reversi-game`ストリームへ、以下のパラメータを付けて接続する:
+    * `i`: botアカウントのAPIキー
+    * `game`: `game`の`id`
+
+5. この間、相手がゲームの設定を変更するとその都度`update-settings`イベントが流れてくるので、必要であれば何かしらの処理を行う
+
+6. 設定に満足したら、`{ type: 'accept' }`メッセージをストリームに送信する
+
+7. ゲームが開始すると、`started`イベントが流れてくる
+    * イベントの中身にはゲーム情報が含まれている
+
+8. 石を打つには、ストリームに`{ type: 'set', pos: <位置> }`を送信する(位置の計算方法は後述)
+
+9. 相手または自分が石を打つと、ストリームから`set`イベントが流れてくる
+    * `color`として石の色が含まれている
+    * `pos`として位置情報が含まれている
+
+## 位置の計算法
+8x8のマップを考える場合、各マスの位置(インデックスと呼びます)は次のようになっています:
+```
++--+--+--+--+--+--+--+--+
+| 0| 1| 2| 3| 4| 5| 6| 7|
++--+--+--+--+--+--+--+--+
+| 8| 9|10|11|12|13|14|15|
++--+--+--+--+--+--+--+--+
+|16|17|18|19|20|21|22|23|
+...
+```
+
+### X,Y座標 から インデックス に変換する
+```
+pos = x + (y * mapWidth)
+```
+`mapWidth`は、ゲーム情報の`map`から、次のようにして計算できます:
+```
+mapWidth = map[0].length
+```
+
+### インデックス から X,Y座標 に変換する
+```
+x = pos % mapWidth
+y = Math.floor(pos / mapWidth)
+```
+
+## マップ情報
+マップ情報は、ゲーム情報の`map`に入っています。 文字列の配列になっており、ひとつひとつの文字がマス情報を表しています。 それをもとにマップのデザインを知る事が出来ます:
+* `(スペース)` ... マス無し
+* `-` ... マス
+* `b` ... 初期配置される黒石
+* `w` ... 初期配置される白石
+
+例えば、4*4の次のような単純なマップがあるとします:
+```text
++---+---+---+---+
+|   |   |   |   |
++---+---+---+---+
+|   | ○ | ● |   |
++---+---+---+---+
+|   | ● | ○ |   |
++---+---+---+---+
+|   |   |   |   |
++---+---+---+---+
+```
+
+この場合、マップデータはこのようになります:
+```javascript
+['----', '-wb-', '-bw-', '----']
+```
+
+## ユーザーにフォームを提示して対話可能Botを作成する
+ユーザーとのコミュニケーションを行うため、ゲームの設定画面でユーザーにフォームを提示することができます。 例えば、Botの強さをユーザーが設定できるようにする、といったシナリオが考えられます。
+
+フォームを提示するには、`reversi-game`ストリームに次のメッセージを送信します:
+```javascript
+{
+  type: 'init-form',
+  body: [フォームコントロールの配列]
+}
+```
+
+フォームコントロールの配列については今から説明します。 フォームコントロールは、次のようなオブジェクトです:
+```javascript
+{
+  id: 'switch1',
+  type: 'switch',
+  label: 'Enable hoge',
+  value: false
+}
+```
+`id` ... コントロールのID。 `type` ... コントロールの種類。後述します。 `label` ... コントロールと一緒に表記するテキスト。 `value` ... コントロールのデフォルト値。
+
+### フォームの操作を受け取る
+ユーザーがフォームを操作すると、ストリームから`update-form`イベントが流れてきます。 イベントの中身には、コントロールのIDと、ユーザーが設定した値が含まれています。 例えば、上で示したスイッチをユーザーがオンにしたとすると、次のイベントが流れてきます:
+```javascript
+{
+  id: 'switch1',
+  value: true
+}
+```
+
+### フォームコントロールの種類
+#### スイッチ
+type: `switch` スイッチを表示します。何かの機能をオン/オフさせたい場合に有用です。
+
+##### プロパティ
+`label` ... スイッチに表記するテキスト。
+
+#### ラジオボタン
+type: `radio` ラジオボタンを表示します。選択肢を提示するのに有用です。例えば、Botの強さを設定させるなどです。
+
+##### プロパティ
+`items` ... ラジオボタンの選択肢。例:
+```javascript
+items: [{
+  label: 'å¼±',
+  value: 1
+}, {
+  label: '中',
+  value: 2
+}, {
+  label: 'å¼·',
+  value: 3
+}]
+```
+
+#### スライダー
+type: `slider` スライダーを表示します。
+
+##### プロパティ
+`min` ... スライダーの下限。 `max` ... スライダーの上限。 `step` ... 入力欄で刻むステップ値。
+
+#### テキストボックス
+type: `textbox` テキストボックスを表示します。ユーザーになにか入力させる一般的な用途に利用できます。
+
+## ユーザーにメッセージを表示する
+設定画面でユーザーと対話する、フォーム以外のもうひとつの方法がこれです。ユーザーになにかメッセージを表示することができます。 例えば、ユーザーがBotの対応していないモードやマップを選択したとき、警告を表示するなどです。 メッセージを表示するには、次のメッセージをストリームに送信します:
+```javascript
+{
+  type: 'message',
+  body: {
+    text: 'メッセージ内容',
+    type: 'メッセージの種類'
+  }
+}
+```
+メッセージの種類: `success`, `info`, `warning`, `error`。
+
+## 投了する
+投了をするには、<a href="./api/endpoints/games/reversi/games/surrender">このエンドポイント</a>にリクエストします。
diff --git a/src/docs/ht-HT/advanced/stream.md b/src/docs/ht-HT/advanced/stream.md
new file mode 100644
index 0000000000..0e5edd2b0c
--- /dev/null
+++ b/src/docs/ht-HT/advanced/stream.md
@@ -0,0 +1,350 @@
+# ストリーミングAPI
+
+ストリーミングAPIを使うと、リアルタイムで様々な情報(例えばタイムラインに新しい投稿が流れてきた、メッセージが届いた、フォローされた、など)を受け取ったり、様々な操作を行ったりすることができます。
+
+## ストリームに接続する
+
+ストリーミングAPIを利用するには、まずMisskeyサーバーに**websocket**接続する必要があります。
+
+以下のURLに、`i`というパラメータ名で認証情報を含めて、websocket接続してください。例:
+```
+%WS_URL%/streaming?i=xxxxxxxxxxxxxxx
+```
+
+認証情報は、自分のAPIキーや、アプリケーションからストリームに接続する際はユーザーのアクセストークンのことを指します。
+
+<div class="info">ℹ️ 認証情報の取得については、<a href="./api">こちらのドキュメント</a>をご確認ください。</div>
+
+---
+
+認証情報は省略することもできますが、その場合非ログインでの利用ということになり、受信できる情報や可能な操作は限られます。例:
+
+```
+%WS_URL%/streaming
+```
+
+---
+
+ストリームに接続すると、後述するAPI操作や、投稿の購読を行ったりすることができます。 しかしまだこの段階では、例えばタイムラインへの新しい投稿を受信したりすることはできません。 それを行うには、ストリーム上で、後述する**チャンネル**に接続する必要があります。
+
+**ストリームでのやり取りはすべてJSONです。**
+
+## チャンネル
+MisskeyのストリーミングAPIにはチャンネルという概念があります。これは、送受信する情報を分離するための仕組みです。 Misskeyのストリームに接続しただけでは、まだリアルタイムでタイムラインの投稿を受信したりはできません。 ストリーム上でチャンネルに接続することで、様々な情報を受け取ったり情報を送信したりすることができるようになります。
+
+ひとつのストリーム上で、同時に複数のチャンネルに接続することができます。
+
+### チャンネルに接続する
+チャンネルに接続するには、次のようなデータをJSONでストリームに送信します:
+
+```json
+{
+    type: 'connect',
+    body: {
+        channel: 'xxxxxxxx',
+        id: 'foobar',
+        params: {
+            ...
+        }
+    }
+}
+```
+
+ここで、
+* `channel`には接続したいチャンネル名を設定します。チャンネルの種類については後述します。
+* `id`にはそのチャンネルとやり取りするための任意のIDを設定します。ストリームでは様々なメッセージが流れるので、そのメッセージがどのチャンネルからのものなのか識別する必要があるからです。このIDは、UUIDや、乱数のようなもので構いません。
+* `params`はチャンネルに接続する際のパラメータです。チャンネルによって接続時に必要とされるパラメータは異なります。パラメータ不要のチャンネルに接続する際は、このプロパティは省略可能です。
+
+<div class="info">ℹ️ IDはチャンネルごとではなく「チャンネルの接続ごと」です。なぜなら、同じチャンネルに異なるパラメータで複数接続するケースもあるからです。</div>
+
+### チャンネルからのメッセージを受け取る
+例えばタイムラインのチャンネルなら、新しい投稿があった時にメッセージを発します。そのメッセージを受け取ることで、タイムラインに新しい投稿がされたことをリアルタイムで知ることができます。
+
+チャンネルがメッセージを発すると、次のようなデータがJSONでストリームに流れてきます:
+```json
+{
+    type: 'channel',
+    body: {
+        id: 'foobar',
+        type: 'something',
+        body: {
+            some: 'thing'
+        }
+    }
+}
+```
+
+ここで、
+* `id`には前述したそのチャンネルに接続する際に設定したIDが設定されています。これで、このメッセージがどのチャンネルからのものなのか知ることができます。
+* `type`にはメッセージの種類が設定されます。チャンネルによって、どのような種類のメッセージが流れてくるかは異なります。
+* `body`にはメッセージの内容が設定されます。チャンネルによって、どのような内容のメッセージが流れてくるかは異なります。
+
+### チャンネルに向けてメッセージを送信する
+チャンネルによっては、メッセージを受け取るだけでなく、こちらから何かメッセージを送信し、何らかの操作を行える場合があります。
+
+チャンネルにメッセージを送信するには、次のようなデータをJSONでストリームに送信します:
+```json
+{
+    type: 'channel',
+    body: {
+        id: 'foobar',
+        type: 'something',
+        body: {
+            some: 'thing'
+        }
+    }
+}
+```
+
+ここで、
+* `id`には前述したそのチャンネルに接続する際に設定したIDを設定します。これで、このメッセージがどのチャンネルに向けたものなのか識別させることができます。
+* `type`にはメッセージの種類を設定します。チャンネルによって、どのような種類のメッセージを受け付けるかは異なります。
+* `body`にはメッセージの内容を設定します。チャンネルによって、どのような内容のメッセージを受け付けるかは異なります。
+
+### チャンネルから切断する
+チャンネルから切断するには、次のようなデータをJSONでストリームに送信します:
+
+```json
+{
+    type: 'disconnect',
+    body: {
+        id: 'foobar'
+    }
+}
+```
+
+ここで、
+* `id`には前述したそのチャンネルに接続する際に設定したIDを設定します。
+
+## ストリームを経由してAPIリクエストする
+
+ストリームを経由してAPIリクエストすると、HTTPリクエストを発生させずにAPIを利用できます。そのため、コードを簡潔にできたり、パフォーマンスの向上を見込めるかもしれません。
+
+ストリームを経由してAPIリクエストするには、次のようなデータをJSONでストリームに送信します:
+```json
+{
+    type: 'api',
+    body: {
+        id: 'xxxxxxxxxxxxxxxx',
+        endpoint: 'notes/create',
+        data: {
+            text: 'yee haw!'
+        }
+    }
+}
+```
+
+ここで、
+* `id`には、APIのレスポンスを識別するための、APIリクエストごとの一意なIDを設定する必要があります。UUIDや、簡単な乱数のようなもので構いません。
+* `endpoint`には、あなたがリクエストしたいAPIのエンドポイントを指定します。
+* `data`には、エンドポイントのパラメータを含めます。
+
+<div class="info">ℹ️ APIのエンドポイントやパラメータについてはAPIリファレンスをご確認ください。</div>
+
+### レスポンスの受信
+
+APIへリクエストすると、レスポンスがストリームから次のような形式で流れてきます。
+
+```json
+{
+    type: 'api:xxxxxxxxxxxxxxxx',
+    body: {
+        ...
+    }
+}
+```
+
+ここで、
+* `xxxxxxxxxxxxxxxx`の部分には、リクエストの際に設定された`id`が含まれています。これにより、どのリクエストに対するレスポンスなのか判別することができます。
+* `body`には、レスポンスが含まれています。
+
+## 投稿のキャプチャ
+
+Misskeyは投稿のキャプチャと呼ばれる仕組みを提供しています。これは、指定した投稿のイベントをストリームで受け取る機能です。
+
+例えばタイムラインを取得してユーザーに表示したとします。ここで誰かがそのタイムラインに含まれるどれかの投稿に対してリアクションしたとします。
+
+しかし、クライアントからするとある投稿にリアクションが付いたことなどは知る由がないため、リアルタイムでリアクションをタイムライン上の投稿に反映して表示するといったことができません。
+
+この問題を解決するために、Misskeyは投稿のキャプチャ機構を用意しています。投稿をキャプチャすると、その投稿に関するイベントを受け取ることができるため、リアルタイムでリアクションを反映させたりすることが可能になります。
+
+### 投稿をキャプチャする
+
+投稿をキャプチャするには、ストリームに次のようなメッセージを送信します:
+
+```json
+{
+    type: 'subNote',
+    body: {
+        id: 'xxxxxxxxxxxxxxxx'
+    }
+}
+```
+
+ここで、
+* `id`にキャプチャしたい投稿の`id`を設定します。
+
+このメッセージを送信すると、Misskeyにキャプチャを要請したことになり、以後、その投稿に関するイベントが流れてくるようになります。
+
+例えば投稿にリアクションが付いたとすると、次のようなメッセージが流れてきます:
+
+```json
+{
+    type: 'noteUpdated',
+    body: {
+        id: 'xxxxxxxxxxxxxxxx',
+        type: 'reacted',
+        body: {
+            reaction: 'like',
+            userId: 'yyyyyyyyyyyyyyyy'
+        }
+    }
+}
+```
+
+ここで、
+* `body`内の`id`に、イベントを発生させた投稿のIDが設定されます。
+* `body`内の`type`に、イベントの種類が設定されます。
+* `body`内の`body`に、イベントの詳細が設定されます。
+
+#### イベントの種類
+
+##### `reacted`
+その投稿にリアクションがされた時に発生します。
+
+* `reaction`に、リアクションの種類が設定されます。
+* `userId`に、リアクションを行ったユーザーのIDが設定されます。
+
+例:
+```json
+{
+    type: 'noteUpdated',
+    body: {
+        id: 'xxxxxxxxxxxxxxxx',
+        type: 'reacted',
+        body: {
+            reaction: 'like',
+            userId: 'yyyyyyyyyyyyyyyy'
+        }
+    }
+}
+```
+
+##### `deleted`
+その投稿が削除された時に発生します。
+
+* `deletedAt`に、削除日時が設定されます。
+
+例:
+```json
+{
+    type: 'noteUpdated',
+    body: {
+        id: 'xxxxxxxxxxxxxxxx',
+        type: 'deleted',
+        body: {
+            deletedAt: '2018-10-22T02:17:09.703Z'
+        }
+    }
+}
+```
+
+##### `pollVoted`
+その投稿に添付されたアンケートに投票された時に発生します。
+
+* `choice`に、選択肢IDが設定されます。
+* `userId`に、投票を行ったユーザーのIDが設定されます。
+
+例:
+```json
+{
+    type: 'noteUpdated',
+    body: {
+        id: 'xxxxxxxxxxxxxxxx',
+        type: 'pollVoted',
+        body: {
+            choice: 2,
+            userId: 'yyyyyyyyyyyyyyyy'
+        }
+    }
+}
+```
+
+### 投稿のキャプチャを解除する
+
+その投稿がもう画面に表示されなくなったりして、その投稿に関するイベントをもう受け取る必要がなくなったときは、キャプチャの解除を申請してください。
+
+次のメッセージを送信します:
+
+```json
+{
+    type: 'unsubNote',
+    body: {
+        id: 'xxxxxxxxxxxxxxxx'
+    }
+}
+```
+
+ここで、
+* `id`にキャプチャを解除したい投稿の`id`を設定します。
+
+このメッセージを送信すると、以後、その投稿に関するイベントは流れてこないようになります。
+
+# チャンネル一覧
+## `main`
+アカウントに関する基本的な情報が流れてきます。このチャンネルにパラメータはありません。
+
+### 流れてくるイベント一覧
+
+#### `renote`
+自分の投稿がRenoteされた時に発生するイベントです。自分自身の投稿をRenoteしたときは発生しません。
+
+#### `mention`
+誰かからメンションされたときに発生するイベントです。
+
+#### `readAllNotifications`
+自分宛ての通知がすべて既読になったことを表すイベントです。このイベントを利用して、「通知があることを示すアイコン」のようなものをオフにしたりする等のケースが想定されます。
+
+#### `meUpdated`
+自分の情報が更新されたことを表すイベントです。
+
+#### `follow`
+自分が誰かをフォローしたときに発生するイベントです。
+
+#### `unfollow`
+自分が誰かのフォローを解除したときに発生するイベントです。
+
+#### `followed`
+自分が誰かにフォローされたときに発生するイベントです。
+
+## `homeTimeline`
+ホームタイムラインの投稿情報が流れてきます。このチャンネルにパラメータはありません。
+
+### 流れてくるイベント一覧
+
+#### `note`
+タイムラインに新しい投稿が流れてきたときに発生するイベントです。
+
+## `localTimeline`
+ローカルタイムラインの投稿情報が流れてきます。このチャンネルにパラメータはありません。
+
+### 流れてくるイベント一覧
+
+#### `note`
+ローカルタイムラインに新しい投稿が流れてきたときに発生するイベントです。
+
+## `hybridTimeline`
+ソーシャルタイムラインの投稿情報が流れてきます。このチャンネルにパラメータはありません。
+
+### 流れてくるイベント一覧
+
+#### `note`
+ソーシャルタイムラインに新しい投稿が流れてきたときに発生するイベントです。
+
+## `globalTimeline`
+グローバルタイムラインの投稿情報が流れてきます。このチャンネルにパラメータはありません。
+
+### 流れてくるイベント一覧
+
+#### `note`
+グローバルタイムラインに新しい投稿が流れてきたときに発生するイベントです。
diff --git a/src/docs/ht-HT/features/antenna.md b/src/docs/ht-HT/features/antenna.md
new file mode 100644
index 0000000000..94ad9e4aea
--- /dev/null
+++ b/src/docs/ht-HT/features/antenna.md
@@ -0,0 +1,4 @@
+# アンテナ
+アンテナは、自由に条件を設定して、合致するノートを自動で収集することができる機能です。
+
+条件を設定したアンテナが作成された状態で、条件に合致するノートが投稿されると、リアルタイムでそのアンテナのタイムラインにノートが追加されます。
diff --git a/src/docs/ht-HT/features/custom-emoji.md b/src/docs/ht-HT/features/custom-emoji.md
new file mode 100644
index 0000000000..ed2e92be16
--- /dev/null
+++ b/src/docs/ht-HT/features/custom-emoji.md
@@ -0,0 +1,2 @@
+# カスタム絵文字
+カスタム絵文字は、インスタンスで用意された画像を絵文字のように使える機能です。 ノート、リアクション、チャット、自己紹介、名前などの場所で使うことができます。 カスタム絵文字をそれらの場所で使うには、絵文字ピッカーボタン(ある場合)を押すか、`:`を入力して絵文字サジェストを表示します。 テキスト内に`:foo:`のような形式の文字列が見つかると、`foo`の部分がカスタム絵文字名と解釈され、表示時には対応したカスタム絵文字に置き換わります。
diff --git a/src/docs/ht-HT/features/deck.md b/src/docs/ht-HT/features/deck.md
new file mode 100644
index 0000000000..8057e262fd
--- /dev/null
+++ b/src/docs/ht-HT/features/deck.md
@@ -0,0 +1,18 @@
+# デッキ
+
+デッキは利用可能なUIのひとつです。「カラム」と呼ばれるビューを複数並べて表示させることで、カスタマイズ性が高く、情報量の多いUIが構築できることが特徴です。
+
+## カラムの追加
+デッキの背景を右クリックし、「カラムを追加」して任意のカラムを追加できます。
+
+## カラムの移動
+カラムは、ドラッグアンドドロップで他のカラムと位置を入れ替えることが出来るほか、カラムメニュー(カラムのヘッダー右クリック)から位置を移動させることもできます。
+
+## カラムの水平分割
+カラムは左右だけでなく、上下に並べることもできます。 カラムメニューを開き、「左に重ねる」を選択すると、左のカラムの下に現在のカラムが移動します。 上下分割を解除するには、カラムメニューの「右に出す」を選択します。
+
+## カラムの設定
+カラムメニューの「編集」を選択するとカラムの設定を編集できます。カラムの名前を変えたり、幅を変えたりできます。
+
+## デッキの設定
+デッキに関する設定は、[settings/deck](/settings/deck)で行えます。
diff --git a/src/docs/ht-HT/features/drive.md b/src/docs/ht-HT/features/drive.md
new file mode 100644
index 0000000000..b82a41082a
--- /dev/null
+++ b/src/docs/ht-HT/features/drive.md
@@ -0,0 +1,17 @@
+# ドライブ
+ドライブは、Misskey上でファイルを管理できる機能です。
+
+[ドライブのページ](/my/drive)から任意のファイルをアップロードできるほか、アバターに設定した画像や、ノートに添付したファイルなどもすべてドライブにアップロードされます。
+
+<div class="warn">⚠️ ドライブからファイルを削除すると、そのファイルが添付されたノートも消えます。</div>
+
+ドライブにアップロードされたファイルは、いつでもダウンロードすることができるほか、ノート作成時に「ドライブからファイルを添付」することでファイルを再利用することもできます。
+
+ドライブ内にフォルダを作り、複数のファイルをまとめて整理することもできます。
+
+## 閲覧注意 (NSFW)
+<div class="info">ℹ️ この項目が閲覧注意なわけではありません</div>
+
+閲覧注意またはNSFW (Not safe for work) は、ドライブのファイルに設定することができるフラグです。 閲覧注意フラグを設定されたファイルは、表示される際に閲覧者の操作なしには表示されなくなります。 このフラグは、例えば職場や公共の場で閲覧するのに適切でないと思われる画像などに設定し、そのような画像が突然表示されてしまうことを防ぐ目的で使われます。
+
+このフラグは手動でオンオフを切り替えられるほか、モデレーターの判断で設定される場合もあります。
diff --git a/src/docs/ht-HT/features/favorite.md b/src/docs/ht-HT/features/favorite.md
new file mode 100644
index 0000000000..a0e5f8bf78
--- /dev/null
+++ b/src/docs/ht-HT/features/favorite.md
@@ -0,0 +1,4 @@
+# お気に入り
+[ノート](./node)をお気に入りとして登録できる機能です。 お気に入り登録したノートは、[お気に入りページ](./my/favorites)で一覧することができます。 お気に入りに登録したことは相手に通知されず、お気に入りは自分しか見ることができません。
+
+ノートをお気に入り登録するには、ノートメニューの「お気に入り」を押します。お気に入り解除するには、ノートメニューの「お気に入り解除」を押します。
diff --git a/src/docs/ht-HT/features/follow.md b/src/docs/ht-HT/features/follow.md
new file mode 100644
index 0000000000..3c1ea7bbe0
--- /dev/null
+++ b/src/docs/ht-HT/features/follow.md
@@ -0,0 +1,2 @@
+# フォロー
+ユーザーをフォローすると、タイムラインにそのユーザーの投稿が表示されるようになります。ただし、他のユーザーに対する返信は含まれません。 ユーザーをフォローするには、ユーザーページの「フォロー」ボタンをクリックします。フォローを解除するには、もう一度クリックします。
diff --git a/src/docs/ht-HT/features/keyboard-shortcut.md b/src/docs/ht-HT/features/keyboard-shortcut.md
new file mode 100644
index 0000000000..8659ace982
--- /dev/null
+++ b/src/docs/ht-HT/features/keyboard-shortcut.md
@@ -0,0 +1,66 @@
+# キーボードショートカット
+
+## グローバル
+これらのショートカットは基本的にどこでも使えます。
+<table>
+    <thead>
+        <tr><th>ショートカット</th><th>効果</th><th>由来</th></tr>
+    </thead>
+    <tbody>
+        <tr><td><kbd class="key">P</kbd>, <kbd class="key">N</kbd></td><td>新規投稿</td><td><b>P</b>ost, <b>N</b>ew, <b>N</b>ote</td></tr>
+        <tr><td><kbd class="key">T</kbd></td><td>タイムラインの最も新しい投稿にフォーカス</td><td><b>T</b>imeline, <b>T</b>op</td></tr>
+        <tr><td><kbd class="group"><kbd class="key">Shift</kbd> + <kbd class="key">N</kbd></kbd></td><td>通知を表示/隠す</td><td><b>N</b>otifications</td></tr>
+        <tr><td><kbd class="key">S</kbd></td><td>検索</td><td><b>S</b>earch</td></tr>
+        <tr><td><kbd class="key">H</kbd>, <kbd class="key">?</kbd></td><td>ヘルプを表示</td><td><b>H</b>elp</td></tr>
+    </tbody>
+</table>
+
+## 投稿にフォーカスされた状態
+<table>
+    <thead>
+        <tr><th>ショートカット</th><th>効果</th><th>由来</th></tr>
+    </thead>
+    <tbody>
+        <tr><td><kbd class="key">↑</kbd>, <kbd class="key">K</kbd>, <kbd class="group"><kbd class="key">Shift</kbd> + <kbd class="key">Tab</kbd></kbd></td><td>上の投稿にフォーカスを移動</td><td>-</td></tr>
+        <tr><td><kbd class="key">↓</kbd>, <kbd class="key">J</kbd>, <kbd class="key">Tab</kbd></td><td>下の投稿にフォーカスを移動</td><td>-</td></tr>
+        <tr><td><kbd class="key">R</kbd></td><td>返信フォームを開く</td><td><b>R</b>eply</td></tr>
+        <tr><td><kbd class="key">Q</kbd></td><td>Renoteフォームを開く</td><td><b>Q</b>uote</td></tr>
+        <tr><td><kbd class="group"><kbd class="key">Ctrl</kbd> + <kbd class="key">Q</kbd></kbd></td><td>即刻Renoteする(フォームを開かずに)</td><td>-</td></tr>
+        <tr><td><kbd class="key">E</kbd>, <kbd class="key">A</kbd>, <kbd class="key">+</kbd></td><td>リアクションフォームを開く</td><td><b>E</b>mote, re<b>A</b>ction</td></tr>
+        <tr><td><kbd class="key">0</kbd>~<kbd class="key">9</kbd></td><td>数字に対応したリアクションをする(対応については後述)</td><td>-</td></tr>
+        <tr><td><kbd class="key">F</kbd>, <kbd class="key">B</kbd></td><td>お気に入りに登録</td><td><b>F</b>avorite, <b>B</b>ookmark</td></tr>
+        <tr><td><kbd class="key">Del</kbd>, <kbd class="group"><kbd class="key">Ctrl</kbd> + <kbd class="key">D</kbd></kbd></td><td>投稿を削除</td><td><b>D</b>elete</tr>
+        <tr><td><kbd class="key">M</kbd>, <kbd class="key">O</kbd></td><td>投稿に対するメニューを開く</td><td><b>M</b>ore, <b>O</b>ther</td></tr>
+        <tr><td><kbd class="key">S</kbd></td><td>CWで隠された部分を表示 or 隠す</td><td><b>S</b>how, <b>S</b>ee</td></tr>
+        <tr><td><kbd class="key">Esc</kbd></td><td>フォーカスを外す</td><td>-</td></tr>
+    </tbody>
+</table>
+
+## Renoteフォーム
+<table>
+    <thead>
+        <tr><th>ショートカット</th><th>効果</th><th>由来</th></tr>
+    </thead>
+    <tbody>
+        <tr><td><kbd class="key">Enter</kbd></td><td>Renoteする</td><td>-</td></tr>
+        <tr><td><kbd class="key">Q</kbd></td><td>フォームを展開する</td><td><b>Q</b>uote</td></tr>
+        <tr><td><kbd class="key">Esc</kbd></td><td>フォームを閉じる</td><td>-</td></tr>
+    </tbody>
+</table>
+
+## リアクションフォーム
+デフォルトで「👍」にフォーカスが当たっている状態です。
+<table>
+    <thead>
+        <tr><th>ショートカット</th><th>効果</th><th>由来</th></tr>
+    </thead>
+    <tbody>
+        <tr><td><kbd class="key">↑</kbd>, <kbd class="key">K</kbd></td><td>上のリアクションにフォーカスを移動</td><td>-</td></tr>
+        <tr><td><kbd class="key">↓</kbd>, <kbd class="key">J</kbd></td><td>下のリアクションにフォーカスを移動</td><td>-</td></tr>
+        <tr><td><kbd class="key">←</kbd>, <kbd class="key">H</kbd>, <kbd class="group"><kbd class="key">Shift</kbd> + <kbd class="key">Tab</kbd></kbd></td><td>左のリアクションにフォーカスを移動</td><td>-</td></tr>
+        <tr><td><kbd class="key">→</kbd>, <kbd class="key">L</kbd>, <kbd class="key">Tab</kbd></td><td>右のリアクションにフォーカスを移動</td><td>-</td></tr>
+        <tr><td><kbd class="key">Enter</kbd>, <kbd class="key">Space</kbd>, <kbd class="key">+</kbd></td><td>リアクション確定</td><td>-</td></tr>
+        <tr><td><kbd class="key">0</kbd>~<kbd class="key">9</kbd></td><td>数字に対応したリアクションで確定</td><td>-</td></tr>
+        <tr><td><kbd class="key">Esc</kbd></td><td>リアクションするのをやめる</td><td>-</td></tr>
+    </tbody>
+</table>
diff --git a/src/docs/ht-HT/features/mfm.md b/src/docs/ht-HT/features/mfm.md
new file mode 100644
index 0000000000..5be2df4f30
--- /dev/null
+++ b/src/docs/ht-HT/features/mfm.md
@@ -0,0 +1,12 @@
+# MFM
+MFMは、Misskey Flavored Markdownの略で、Misskeyの様々な場所で使用できる専用のマークアップ言語です。 MFMで使用可能な構文は[MFMチートシート](/mfm-cheat-sheet)で確認できます。
+
+## MFMが使用可能な場所の例
+- ノート本文
+- CW注釈
+- ユーザーの名前
+- ユーザーの自己紹介
+
+## 開発者向け情報
+MFMのパーサー実装はライブラリとして公開されており、簡単にクライアントにMFMを組み込むことが可能です。
+- [misskey-dev/mfm.js](https://github.com/misskey-dev/mfm.js) - JavaScriptパーサー実装
diff --git a/src/docs/ht-HT/features/mute.md b/src/docs/ht-HT/features/mute.md
new file mode 100644
index 0000000000..6a9608662a
--- /dev/null
+++ b/src/docs/ht-HT/features/mute.md
@@ -0,0 +1,13 @@
+# ミュート
+
+ユーザーをミュートすると、そのユーザーに関する次のコンテンツがMisskeyに表示されなくなります:
+
+* タイムラインや投稿の検索結果内の、そのユーザーの投稿(およびそれらの投稿に対する返信やRenote)
+* そのユーザーからの通知
+* メッセージ履歴一覧内の、そのユーザーとのメッセージ履歴
+
+ユーザーをミュートするには、対象のユーザーのユーザーページに表示されている「ミュート」ボタンを押します。
+
+ミュートを行ったことは相手に通知されず、ミュートされていることを知ることもできません。
+
+設定>ミュート から、自分がミュートしているユーザー一覧を確認することができます。
diff --git a/src/docs/ht-HT/features/note.md b/src/docs/ht-HT/features/note.md
new file mode 100644
index 0000000000..62440b25f9
--- /dev/null
+++ b/src/docs/ht-HT/features/note.md
@@ -0,0 +1,51 @@
+# ノート
+ノートは、Misskeyに投稿される、文章、ファイル、アンケートなどを含むコンテンツで、Misskeyの中心的概念です。また、そのノートを作成する行為自体もノートと呼ばれます。
+
+ノートが作成されると、[タイムライン](./timeline)に追加され、自分の[フォロワー](./follow)やサーバーのユーザーが見れるようになります。
+
+ノートには、[リアクション](./reaction)を行うことができます。また、返信や引用もできます。
+
+ノートを[お気に入り](./favorite)登録することで、後で簡単に見返すことができます。
+
+## ノートを作成する
+ノートを作成するには、画面上にある鉛筆マークのボタンを押して、作成フォームを開きます。作成フォームに内容を入力し、「ノート」ボタンを押すことでノートが作成されます。 ノートには、画像、動画など任意のファイルや、[アンケート](./poll)を添付することができます。また、本文中には[MFM](./mfm)が使用でき、[メンション](./mention)や[ハッシュタグ](./hashtag)を含めることもできます。 他にも、CWや公開範囲といった設定も行えます(詳細は後述)。
+<div class="info">ℹ️ コンピューターのクリップボードに画像データがある状態で、フォーム内のテキストボックスにペーストするとその画像を添付することができます。</div>
+<div class="info">ℹ️ テキストボックス内で<kbd class="key">Ctrl + Enter</kbd>を押すことでも投稿できます。</div>
+
+## Renote
+既にあるノートを引用、もしくはそのノートを新しいノートとして共有する行為、またそれによって作成されたノートをRenoteと呼びます。 自分がフォローしているユーザーの、気に入ったノートを自分のフォロワーに共有したい場合や、過去の自分のノートを再度共有したい場合に使います。 同じノートに対して無制限にRenoteを行うことができますが、あまり連続して使用すると迷惑になる場合もあるので、注意しましょう。
+<div class="warn">⚠️ 公開範囲がフォロワーやダイレクトのノートはRenoteできません</div>
+
+Renoteを削除するには、Renoteの時刻表示の隣にある「...」を押し、「Renote解除」を選択します。
+
+## CW
+Contents Warningの略で、ノートの内容を、閲覧者の操作なしには表示しないようにできる機能です。主に長大な内容を隠すためや、ネタバレ防止などに使うことができます。 設定するには、フォームの「内容を隠す」ボタン(目のアイコン)を押します。すると新しい入力エリアが表れるので、そこに内容の要約を記入します。
+
+## 公開範囲
+ノートごとに、そのノートが公開される範囲を設定することができます。フォームの「ノート」ボタンの左にあるアイコンを押すと公開範囲を以下から選択できます。
+
+### パブリック
+全ての人に対してノートが公開されるほか、サーバーの全てのタイムライン(ホームタイムライン、ローカルタイムライン、ソーシャルタイムライン、グローバルタイムライン)にノートが流れます。
+<div class="warn">⚠️ アカウントが<a href="./silence">サイレンス</a>状態の時は、この公開範囲は使用できません。</div>
+
+### ホーム
+全ての人に対してノートが公開されますが、フォロワー以外のローカルタイムライン、ソーシャルタイムライン、グローバルタイムラインにはノートは流れません。
+
+### フォロワー
+自分のフォロワーに対してのみノートを公開します。フォロワーの全てのタイムラインに流れます。
+
+### ダイレクト
+指定したユーザーに対してのみノートを公開します。指定したユーザーの全てのタイムラインに流れます。
+
+### 「ローカルのみ」オプション
+このオプションを有効にすると、リモートにノートを連合しなくなります。
+
+### 公開範囲の比較
+<table>
+    <tr><th></th><th>パブリック</th><th>ホーム</th><th>フォロワー</th><th>ダイレクト</th></tr>
+    <tr><th>フォロワーのLTL/STL/GTL</th><td>✔</td><td>✔</td><td>✔</td><td></td></tr>
+    <tr><th>非フォロワーのLTL/STL/GTL</th><td>✔</td><td></td><td></td><td></td></tr>
+</table>
+
+## ピン留め
+ノートをピン留めすると、ユーザーページに常にそのノートを表示しておくことができます。 ノートのメニューを開き、「ピン留め」を選択してピン留めできます。 複数のノートをピン留めできます。
diff --git a/src/docs/ht-HT/features/pages.md b/src/docs/ht-HT/features/pages.md
new file mode 100644
index 0000000000..a7311b95e6
--- /dev/null
+++ b/src/docs/ht-HT/features/pages.md
@@ -0,0 +1,10 @@
+# Pages
+
+## 変数
+変数を使うことで動的なページを作成できます。テキスト内で <b>{ 変数名 }</b> と書くとそこに変数の値を埋め込めます。例えば <b>Hello { thing } world!</b> というテキストで、変数(thing)の値が <b>ai</b> だった場合、テキストは <b>Hello ai world!</b> になります。
+
+変数の評価(値を算出すること)は上から下に行われるので、ある変数の中で自分より下の変数を参照することはできません。例えば上から <b>A、B、C</b> と3つの変数を定義したとき、<b>C</b>の中で<b>A</b>や<b>B</b>を参照することはできますが、<b>A</b>の中で<b>B</b>や<b>C</b>を参照することはできません。
+
+ユーザーからの入力を受け取るには、ページに「ユーザー入力」ブロックを設置し、「変数名」に入力を格納したい変数名を設定します(変数は自動で作成されます)。その変数を使ってユーザー入力に応じた動作を行えます。
+
+関数を使うと、値の算出処理を再利用可能な形にまとめることができます。関数を作るには、「関数」タイプの変数を作成します。関数にはスロット(引数)を設定することができ、スロットの値は関数内で変数として利用可能です。また、関数を引数に取る関数(高階関数と呼ばれます)も存在します。関数は予め定義しておくほかに、このような高階関数のスロットに即席でセットすることもできます。
diff --git a/src/docs/ht-HT/features/reaction.md b/src/docs/ht-HT/features/reaction.md
new file mode 100644
index 0000000000..4d479fd416
--- /dev/null
+++ b/src/docs/ht-HT/features/reaction.md
@@ -0,0 +1,11 @@
+# リアクション
+他の人のノートに、絵文字を付けて簡単にあなたの反応を伝えられる機能です。 リアクションするには、ノートの + アイコンをクリックしてピッカーを表示し、絵文字を選択します。 リアクションには[カスタム絵文字](./custom-emoji)も使用できます。
+
+## リアクションピッカーのカスタマイズ
+ピッカーに表示される絵文字を自分好みにカスタマイズすることができます。 設定の「リアクション」で設定します。
+
+## リモート投稿へのリアクションについて
+リアクションはMisskeyオリジナルの機能であるため、リモートインスタンスがMisskeyでない限りは、ほとんどの場合「Like」としてアクティビティが送信されます。一般的にはLikeは「お気に入り」として実装されているようです。
+
+## リモートからのリアクションについて
+リモートから「Like」アクティビティを受信したとき、Misskeyでは「👍」のリアクションとして解釈されます。
diff --git a/src/docs/ht-HT/features/silence.md b/src/docs/ht-HT/features/silence.md
new file mode 100644
index 0000000000..7e26feab0d
--- /dev/null
+++ b/src/docs/ht-HT/features/silence.md
@@ -0,0 +1,6 @@
+# サイレンス
+サイレンスは、アカウントに設定される状態のひとつです。
+
+アカウントがサイレンス状態になると、ノートの公開範囲をパブリックにできなくなります。 ホーム、フォロワー、ダイレクトは選択可能なため、サイレンスを受けた場合でもフォロワーやあなたのユーザーページを直接訪れた場合は投稿を閲覧できますが、GTL(連合タイムライン)やLTL(ローカルタイムライン)には投稿が流れません。
+
+アカウントのサイレンス状態は、サーバーのモデレーターによって有効化/無効化されます。
diff --git a/src/docs/ht-HT/features/theme.md b/src/docs/ht-HT/features/theme.md
new file mode 100644
index 0000000000..a406f3433c
--- /dev/null
+++ b/src/docs/ht-HT/features/theme.md
@@ -0,0 +1,68 @@
+# テーマ
+
+テーマを設定して、Misskeyクライアントの見た目を変更できます。
+
+## テーマの設定
+設定 > テーマ
+
+## テーマを作成する
+テーマコードはJSON5で記述されたテーマオブジェクトです。 テーマは以下のようなオブジェクトです。
+``` js
+{
+    id: '17587283-dd92-4a2c-a22c-be0637c9e22a',
+
+    name: 'Danboard',
+    author: 'syuilo',
+
+    base: 'light',
+
+    props: {
+        accent: 'rgb(218, 141, 49)',
+        bg: 'rgb(218, 212, 190)',
+        fg: 'rgb(115, 108, 92)',
+        panel: 'rgb(236, 232, 220)',
+        renote: 'rgb(100, 152, 106)',
+        link: 'rgb(100, 152, 106)',
+        mention: '@accent',
+        hashtag: 'rgb(100, 152, 106)',
+        header: 'rgba(239, 227, 213, 0.75)',
+        navBg: 'rgb(216, 206, 182)',
+        inputBorder: 'rgba(0, 0, 0, 0.1)',
+    },
+}
+
+```
+
+* `id` ... テーマの一意なID。UUIDをおすすめします。
+* `name` ... テーマ名
+* `author` ... テーマの作者
+* `desc` ... テーマの説明(オプション)
+* `base` ... 明るいテーマか、暗いテーマか
+    * `light`にすると明るいテーマになり、`dark`にすると暗いテーマになります。
+    * テーマはここで設定されたベーステーマを継承します。
+* `props` ... テーマのスタイル定義。これから説明します。
+
+### テーマのスタイル定義
+`props`下にはテーマのスタイルを定義します。 キーがCSSの変数名になり、バリューで中身を指定します。 なお、この`props`オブジェクトはベーステーマから継承されます。 ベーステーマは、このテーマの`base`が`light`なら[_light.json5](https://github.com/misskey-dev/misskey/blob/develop/src/client/themes/_light.json5)で、`dark`なら[_dark.json5](https://github.com/misskey-dev/misskey/blob/develop/src/client/themes/_dark.json5)です。 つまり、このテーマ内の`props`に`panel`というキーが無くても、そこにはベーステーマの`panel`があると見なされます。
+
+#### バリューで使える構文
+* 16進数で表された色
+    * 例: `#00ff00`
+* `rgb(r, g, b)`形式で表された色
+    * 例: `rgb(0, 255, 0)`
+* `rgb(r, g, b, a)`形式で表された透明度を含む色
+    * 例: `rgba(0, 255, 0, 0.5)`
+* 他のキーの値の参照
+    * `@{キー名}`と書くと他のキーの値の参照になります。`{キー名}`は参照したいキーの名前に置き換えます。
+    * 例: `@panel`
+* 定数(後述)の参照
+    * `${定数名}`と書くと定数の参照になります。`{定数名}`は参照したい定数の名前に置き換えます。
+    * 例: `$main`
+* 関数(後述)
+    * `:{関数名}<{引数}<{色}`
+
+#### 定数
+「CSS変数として出力はしたくないが、他のCSS変数の値として使いまわしたい」値があるときは、定数を使うと便利です。 キー名を`$`で始めると、そのキーはCSS変数として出力されません。
+
+#### 関数
+wip
diff --git a/src/docs/ht-HT/features/timeline.md b/src/docs/ht-HT/features/timeline.md
new file mode 100644
index 0000000000..f431014f84
--- /dev/null
+++ b/src/docs/ht-HT/features/timeline.md
@@ -0,0 +1,31 @@
+# タイムライン
+タイムラインは、[ノート](./note)が時系列で表示される機能です。 タイムラインには以下で示す種類があり、種類によって表示されるノートも異なります。 なお、タイムラインの種類によってはサーバーにより無効になっている場合があります。
+
+## ホーム
+自分のフォローしているユーザーの投稿が流れます。HTLと略されます。
+
+## ローカル
+全てのローカルユーザーの「ホーム」指定されていない投稿が流れます。LTLと略されます。
+
+## ソーシャル
+自分のフォローしているユーザーの投稿と、全てのローカルユーザーの「ホーム」指定されていない投稿が流れます。STLと略されます。
+
+## グローバル
+全てのローカルユーザーの「ホーム」指定されていない投稿と、サーバーに届いた全てのリモートユーザーの「ホーム」指定されていない投稿が流れます。GTLと略されます。
+
+## 比較
+| ソース          |       |     | タイムライン |       |       |
+| ------------ | ----- | --- | ------ | ----- | ----- |
+| ユーザー         | 公開範囲  | ホーム | ローカル   | ソーシャル | グローバル |
+| ローカル (フォロー)  | 公開    | ✔   | ✔      | ✔     | ✔     |
+|              | ホーム   | ✔   |        | ✔     |       |
+|              | フォロワー | ✔   | ✔      | ✔     | ✔     |
+| リモート (フォロー)  | 公開    | ✔   |        | ✔     | ✔     |
+|              | ホーム   | ✔   |        | ✔     |       |
+|              | フォロワー | ✔   |        | ✔     | ✔     |
+| ローカル (未フォロー) | 公開    |     | ✔      | ✔     | ✔     |
+|              | ホーム   |     |        |       |       |
+|              | フォロワー |     |        |       |       |
+| リモート (未フォロー) | 公開    |     |        |       | ✔     |
+|              | ホーム   |     |        |       |       |
+|              | フォロワー |     |        |       |       |
diff --git a/src/docs/ht-HT/features/widgets.md b/src/docs/ht-HT/features/widgets.md
new file mode 100644
index 0000000000..a7c2c1d1d6
--- /dev/null
+++ b/src/docs/ht-HT/features/widgets.md
@@ -0,0 +1,7 @@
+# ウィジェット
+ウィジェットは、MisskeyのUI上に設置できる小型の情報表示、操作が行えるパーツです。
+
+ウィジェットを編集するには、ウィジェット編集モードに切り替えます。切り替え方法はUIによって異なります。 ウィジェット編集モードでは、ウィジェットの追加、削除、並び替え、およびそれぞれのウィジェットの設定を行えます。
+
+## 利用可能なウィジェット一覧
+todo
diff --git a/src/docs/ht-HT/general/apps.md b/src/docs/ht-HT/general/apps.md
new file mode 100644
index 0000000000..1f4c85fe8f
--- /dev/null
+++ b/src/docs/ht-HT/general/apps.md
@@ -0,0 +1,6 @@
+# サードパーティアプリのリスト
+## クライアント
+todo
+
+## 連携サービス
+todo
diff --git a/src/docs/ht-HT/general/faq.md b/src/docs/ht-HT/general/faq.md
new file mode 100644
index 0000000000..ecb664e32e
--- /dev/null
+++ b/src/docs/ht-HT/general/faq.md
@@ -0,0 +1,22 @@
+# よくある質問
+ここでは利用上のよくある質問について掲載しています。 Misskeyのプロジェクト自体についてのよくある質問は[こちら](./misskey)に掲載されています。
+
+### iOS/Androidのアプリはありますか?
+公式にはそういったOSのネイティブアプリを開発していませんが、サードパーティ製のアプリがいくつかあります。 詳しくは[こちら](./apps)をご覧ください。
+
+ただ、サードパーティ製アプリはどうしても機能への対応が遅れてしまうため、とくに拘りがなければ公式のWebクライアントの利用をおすすめします。 なお、MisskeyのWebクライアントはPWAに対応しているので、ネイティブアプリのように動作させることも可能です。 詳しくは[こちら](todo)をご覧ください。
+
+## 他のサーバーのユーザーをフォローするときは?
+メニューから検索を選び、ユーザー名をホスト込みで入力します。例: `@syuilo@misskey.io`
+
+## Renoteを削除するには?
+Renoteの時刻表示の隣にある「...」を押し、「Renote解除」を選択します。 Renoteについては[こちら](../features/note)をご確認ください。
+
+## URLのプレビューを表示させたくない
+MFMには、そのURLのプレビューを無効にする構文があります。詳細は[MFMチートシート](/mfm-cheat-sheet)をご確認ください。
+
+## カスタム絵文字を追加したい
+運営者のみがカスタム絵文字を追加、編集、削除できます。それらを希望する場合は運営者に依頼してください。
+
+## Botを開発したい
+Misskey APIを利用してBotの開発が可能です。[こちら](../advanced/develop-bot)をご確認ください。
diff --git a/src/docs/ht-HT/general/glossary.md b/src/docs/ht-HT/general/glossary.md
new file mode 100644
index 0000000000..1f403a06d2
--- /dev/null
+++ b/src/docs/ht-HT/general/glossary.md
@@ -0,0 +1,83 @@
+# 用語集
+Misskeyに関する用語集です。
+
+## AcitivityPub
+(読み: あくてぃびてぃぱぶ) 分散型を実現するために用いられるプロトコル(仕様)。このプロトコルに則ってサーバー同士通信を行うことで、連合が行われ、Fediverseを形成しています。
+
+## AiScript
+(読み: あいすくりぷと) Misskey上で使用できるプログラミング言語です。詳細は[こちら。](../advanced/aiscript)
+
+## API
+(読み: えーぴーあい) Misskeyのサーバーが公開している、プログラムからMisskeyを扱うためのインターフェース。詳細は[こちら。](../advanced/api)
+
+## Bot
+(読み: ぼっと) プログラムによって動作しているアカウント。
+
+## CW
+(読み: こんてんつわーにんぐ) Contents Warningの略。ノートの内容を、操作なしには表示しないようにできる機能。主に長大な内容を隠すためや、ネタバレ防止などに使われます。
+
+## Fediverse
+(読み: ふぇでぃばーす) Misskeyを含む様々な分散型ソフトウェアのサーバーで構成されたネットワーク。
+
+## GTL
+グローバルタイムライン(Global TimeLine)の略。タイムラインの詳細は[こちら。](../features/timeline)
+
+## HTL
+ホームタイムライン(Home TimeLine)の略。タイムラインの詳細は[こちら。](../features/timeline)
+
+## LTL
+ローカルタイムライン(Local TimeLine)の略。タイムラインの詳細は[こちら。](../features/timeline)
+
+## MFM
+(読み: えむえふえむ) Misskey Flavored Markdownの略で、Misskey上で使用できるマークアップ言語です。詳細は[こちら。](../features/mfm)
+
+## NSFW
+(読み: のっとせーふふぉーわーく) Not Safe For Workの略。画像を「閲覧注意」扱いにし、操作なしには表示しないようにすることができる機能。
+
+## Renote
+(読み: りのーと) 既にあるノートを引用、もしくはそのノートを新しいノートとして共有する行為、またそれによって作成されたノート。詳細は[こちら。](../features/note)
+
+## STL
+ソーシャルタイムライン(Social TimeLine)の略。タイムラインの詳細は[こちら。](../features/timeline)
+
+## 藍
+(読み: あい) Misskeyの看板娘(公式キャラクター)です。
+
+## アクティブユーザー
+インスタンスにアカウントを作っているユーザーのうち、現在も実際にサービスを利用しているユーザーのこと。
+
+## インスタンス
+todo
+
+## コントロールパネル
+インスタンスの設定画面のこと。
+
+## サーバー
+todo
+
+## サイレンス
+ノートをパブリックな公開範囲で投稿できなくされている状態。モデレーターの判断でユーザーごとに設定されます。詳細は[こちら。](../features/silence)
+
+## 凍結
+アカウントが使用不可に設定されている状態。
+
+## ドライブ
+Misskeyにアップロードしたファイルを管理する機能。詳細は[こちら。](../features/drive)
+
+## ノート
+Misskeyに投稿される、文章、ファイル、アンケートなどを含めることができるコンテンツ。詳細は[こちら。](../features/note)
+
+## ミスキスト
+Misskeyを使う人のこと。
+
+## モデレーター
+スパムの凍結およびサイレンスや不適切な投稿の削除など、コミュニティ運営に関する権限を持つユーザー。
+
+## リモート
+他サーバーのことを指します。リモートユーザーといったように接頭辞としても使われます。ローカルの逆です。
+
+## 連合
+サーバー上で作成された情報が他のサーバーに伝わること。
+
+## ローカル
+自サーバーのことを指します。ローカルユーザー、ローカルタイムラインといったように接頭辞としても使われます。リモートの逆です。
diff --git a/src/docs/ht-HT/general/links.md b/src/docs/ht-HT/general/links.md
new file mode 100644
index 0000000000..d6b16856fb
--- /dev/null
+++ b/src/docs/ht-HT/general/links.md
@@ -0,0 +1,5 @@
+# リンク集
+
+## ライブラリ
+- [misskey-dev/misskey.js](https://github.com/misskey-dev/misskey.js) - JavaScriptのMisskey SDK
+- [misskey-dev/mfm.js](https://github.com/misskey-dev/mfm.js) - JavaScriptのMFMパーサー実装
diff --git a/src/docs/ht-HT/general/misskey.md b/src/docs/ht-HT/general/misskey.md
new file mode 100644
index 0000000000..1e64a10e28
--- /dev/null
+++ b/src/docs/ht-HT/general/misskey.md
@@ -0,0 +1,87 @@
+# Misskeyについて
+
+Misskeyはオープンソースの分散型マイクロブログプラットフォームプロジェクトです。 開発は日本でsyuiloによって2014年から開始されました。 ドライブ、リアクションなどの豊富な機能や、高いカスタマイズ性を備えたUIを持つことが特徴です。
+
+## 歴史
+開発当初は掲示板がメインのサービスでしたが、ユーザーが短文を投稿し、それを時系列で流れるタイムライン機能を追加したところ人気が高まり、徐々にそれがメインとして開発が進むようになりました。 当初は分散型ではありませんでしたが、2018年にAcitivityPubを実装し分散型になったことで、より多くの方に認知され利用されるサービスになり、現在に至ります。
+<div class="info">ℹ️ Misskeyという名前は、syuiloが当時聴いていたMay'nというアーティストの楽曲、Brain Diverの歌詞に由来します。</div>
+
+誰でも開発に参加することができ、現在でも活発に開発が続いています。
+
+## 分散型とは何か?
+
+<b>分散(distributed)型</b>とは、<b>非中央集権(decentralized)</b>とも呼ばれ、コミュニティが多数のサーバーに分散して存在し、それらが相互に<b>通信(連合、federation)</b>することでコンテンツ共有<b>ネットワーク(Fediverse)</b>を形成していることが特徴のサービスです。 単一のサーバーしか存在しない、もしくは複数存在しても互いに独立している場合は中央集権なサービスと言われ、例えばTwitterやFacebookなどほとんどのサービスがそれに該当します。 分散型のメリットは、自分に合った運営者やテーマのサーバーを選択できることです。自分でサーバーを作成することもできます。連合するおかげで、どのサーバーを選んでも、同じコミュニティにアクセスできます。
+
+## 常にオープンソース
+Misskeyはこれまでもこれからも、オープンソースであり続けます。オープンソースとは、簡単に言うと<b>ソフトウェアのソースコード(プログラム)が公開されている</b>ことです。ソースコードの修正や再配布が可能であることを定義に含めることもあります。 Misskeyのすべてのソースコードは[AGPL](https://github.com/misskey-dev/misskey/blob/develop/LICENSE)というオープンソースライセンスの下に[公開](https://github.com/misskey-dev)されていて、誰でも自由に閲覧、使用、修正、改変、再配布をすることができます。 オープンソースは、自分で好きなように変えたり、有害な処理が含まれていないことを確認することができたり、誰でも開発に参加できるなどの、様々なメリットがあります。 上述の分散型を実現するためにも、オープンソースであるということは必要不可欠な要素です。 再び引き合いに出しますが、TwitterやFacebookなどの利益を得ているほとんどのサービスはオープンソースではありません。
+
+<div class="info">ℹ️ 技術的に言うと、MisskeyのソースコードはGitで管理されていて、リポジトリは<a href="https://github.com/misskey-dev" target="_blank">GitHub上でホスティングされています。</a></div>
+
+## 開発に参加する、プロジェクトを支援する
+Misskeyを気に入っていただけたら、ぜひプロジェクトを支援してください。プロジェクトに貢献するには、以下で紹介するようにいろいろな方法があります。方法によっては開発のスキルは不要なので、誰でも気軽に参加し貢献することができます。いつでもお待ちしています。
+
+### 機能を追加したり、バグを修正する
+ソフトウェアエンジニアのスキルをお持ちの方であれば、ソースコードを編集する形でプロジェクトに貢献することができます。 貢献についてのガイドは[こちら](https://github.com/misskey-dev/misskey/blob/develop/CONTRIBUTING.md)です。
+
+### 議論に参加する
+新しい機能、または既存の機能について意見を述べたり、不具合を報告したりすることでも貢献できます。 そのようなディスカッションは[GitHub](https://github.com/misskey-dev)上か、[フォーラム](https://forum.misskey.io/)等で行われます。
+
+### テキストを翻訳する
+Misskeyは様々な言語に対応しています(i18n -internationalizationの略- と呼ばれます)。元の言語は基本的に日本語ですが、有志によって他の言語へと翻訳されています。 その翻訳作業に加わっていただくことでもMisskeyに貢献できます。 Misskeyは[Crowdinというサービスを使用して翻訳の管理を行っています。](https://crowdin.com/project/misskey)
+
+### 感想を投稿する
+不具合報告等だけではなく、Misskeyの良い点、楽しい点といったポジティブな意見もぜひ共有してください。開発の励みになり、それは間接的ですがプロジェクトへの貢献です。
+
+### ミスキストを増やす
+ミスキストとは、Misskeyを使用する人のことです。 知り合いに紹介するなどしてMisskeyを広めていただければ、ミスキストが増え開発のモチベーションが上がります。
+
+### 寄付をする
+Misskeyはビジネスではなく、利用は無料であるため、収益は皆様からの寄付のみです。(インスタンスによっては広告収入を得ているような場合もありますが、それは運営者の収入であり直接開発者への収入にはなりません) 寄付をしていただければ、今後も開発を続けることが可能になり、プロジェクトへの貢献になります。 寄付は基本的には[Patreon](https://www.patreon.com/syuilo)で受け付けています。 一定額寄付していただけると、Misskeyの[情報ページ](/about-misskey)に名前を記載することができます。
+
+また、サーバーの運営者も、基本的には収益を得ていません。サーバーの運営にはコストがかかるので、運営者の支援をすることもご検討ください。 開発には直接関係しませんが、サーバーがあってこそのプロジェクトなので、運営が維持されるというのは開発と同じくらい重要なことです。
+
+## クレジット
+Misskeyの開発者や、Misskeyに寄付をしてくださった方の一覧は[こちら](/about-misskey)で見ることができます。
+
+## よくある質問
+### プロジェクトは何を目指していますか?
+強いて言うと、漠然的になりますが広く使われる汎用的なプラットフォームになることを目指しています。 Misskeyは他のプロジェクトとは違い、何らかの思想(例えば、反中央集権)やビジョンに基づいて開発が行われているわけではなく、その点ではフラットです。 それが逆に、特定の方向性に縛られないフレキシブルさを生み出すことに繋がっていると感じています。
+<!-- TODO: ここにロードマップへのリンク -->
+
+### 企業によって開発されていますか?
+いいえ。Misskeyの開発は個人で行われており、商業的でもないため、特定の企業の関りはありません。 開発メンバーも基本的にはボランティアです。 また、開発に対し企業のスポンサーがつくこともありますが、その場合でもやはり開発は個人のコミュニティが主体です。
+
+### 誰が運営していますか?
+Misskeyは分散型なため、各サーバーにそれぞれ異なった運営者がいます。従って、特定の個人や企業によって、Misskeyの全てが運営されているわけではありません。 また、開発チームが運営を行うわけでもないため、運営に関する連絡は、お使いのサーバーの運営者に行ってください。 サーバーの運営者は、[このページ](/about)で確認することができます。 あなたがサーバーを作成すれば、あなたが運営者になります。
+
+### どのサーバーを選べばいいですか?
+[サーバー一覧が公開されています。](https://join.misskey.page/ja-JP/instances) サーバーによってコミュニティのテーマ(特定のこと、ものが好き 等)が決められている場合があるので、自分に合ったテーマのサーバーがあれば、そこを選ぶと良いかもしれません。 他にも、サーバーの規模、ユーザー層、国および言語、運営者が信頼できるかどうか、などの観点があります。 なお、Misskey公式のサーバーというものはありません。自身で新しくサーバーを作成するという選択肢もあります。
+
+基本的にどのサーバーを選んだとしても、他の全てのサーバーのユーザーと繋がることができます。
+
+### サーバーを建てるにはどうしたらいいですか?
+Misskeyサーバーの作成に興味を持っていただきありがとうございます。 2021年現在、Misskeyのホスティングサービスは存在しないため、サーバーの作成にはある程度の知識が必要です。 サーバーの作成方法については[こちら](todo)をご覧ください。
+
+### どのような技術を使用していますか?
+Misskeyは開発が進むにつれ使用する技術も大きく変わってきました。開発当初はMySQL + PHP + jQueryといった構成でしたが、現在は以下のようになっています。
+- サーバーサイド: Node.js
+- データベース: PostgreSQL、Redis
+- UIフレームワーク: Vue.js
+- プログラミング言語: TypeScript
+
+また、MFMやAiScriptなどの、Misskeyから派生して独自の技術も開発しています。
+
+### Mastodonのフォークですか?
+いいえ。MisskeyはMastodonやその他のプロジェクトとは全く別のプロジェクトです。 開発に関しても、Misskeyの方が昔から開発されています。ただし、分散型になったのはMastodonの登場より後です。 同じAcitivityPubという分散のためのプロトコルを実装しているという点以外、両者に特に関りがあるわけでもありません。
+
+### iOS/Androidのアプリはありますか?
+公式にはそういったOSのネイティブアプリを開発していませんが、サードパーティ製のアプリがいくつかあります。 詳しくは[こちら](./apps)をご覧ください。
+
+ただ、サードパーティ製アプリはどうしても機能への対応が遅れてしまうため、とくに拘りがなければ公式のWebクライアントの利用をおすすめします。 なお、MisskeyのWebクライアントはPWAに対応しているので、ネイティブアプリのように動作させることも可能です。 詳しくは[こちら](todo)をご覧ください。
+
+### Misskeyのロゴ、アイコンはどこで入手できますか?
+(準備中)
+
+### 時折目にする猫耳の可愛い女の子は?
+Misskeyの守り神、藍ちゃんです。アイチャンカワイイヤッター!
+<div class="info">ℹ️ 藍ちゃんについては<a href="https://xn--931a.moe/" target="_blank">こちら</a>です。</div>
diff --git a/src/docs/ht-HT/general/report-issue.md b/src/docs/ht-HT/general/report-issue.md
new file mode 100644
index 0000000000..63527e32af
--- /dev/null
+++ b/src/docs/ht-HT/general/report-issue.md
@@ -0,0 +1,8 @@
+# 不具合の報告
+不具合と思われる状況に遭遇したときは、まず[トラブルシューティング](./troubleshooting)をご一読ください。 それでも問題が解決しないときは、以下の情報を含めて[フォーラム](https://forum.misskey.io/)に投稿してください。 投稿することで、解決策が見つかったり、不具合と判断されれば開発チームによって修正が行われます。
+
+## 含める情報
+- Misskeyのバージョン([情報ページ](/about)で確認できます)
+- お使いのブラウザの種類とバージョン
+- お使いのOSの種類とバージョン
+- 問題の再現手順
diff --git a/src/docs/ht-HT/general/troubleshooting.md b/src/docs/ht-HT/general/troubleshooting.md
new file mode 100644
index 0000000000..4a35091299
--- /dev/null
+++ b/src/docs/ht-HT/general/troubleshooting.md
@@ -0,0 +1,36 @@
+# トラブルシューティング
+<div class="info">ℹ️ <a href="./faq">よくある質問</a>も合わせてお役立てください。</div>
+
+問題が発生したときは、まずこちらをご確認ください。 該当する項目が無い、もしくは手順を試しても効果がない場合は、サーバーの管理者に連絡するか[不具合を報告](./report-issue)してください。
+
+## クライアントが起動しない
+ほとんどの場合、お使いのブラウザまたはOSのバージョンが古いことが原因です。 ブラウザおよびOSのバージョンを最新のものに更新してから、再度試してみてください。
+
+これは稀ですが、それでも起動しない場合は、キャッシュが原因の場合があります。ブラウザのキャッシュをクリアして、再度試してみてください。
+
+## ページが読み込めない
+クライアントが起動するもののページが読み込めないというエラーが出る場合は、ネットワークに問題がないか確認してください。また、サーバーがダウンしていないか確認してください。
+
+これは稀ですが、キャッシュが原因の場合があります。ブラウザのキャッシュをクリアして、再度試してみてください。
+
+まだ問題がある場合は、サーバーの問題と思われるのでサーバーの管理者に連絡してください。
+
+## クライアントの動作が遅い
+以下を試してみてください:
+
+- クライアント設定で「UIのアニメーションを減らす」を有効にする
+- クライアント設定で「モーダルにぼかし効果を使用」を無効にする
+- お使いのブラウザの設定でハードウェアアクセラレーションを有効にする
+- お使いのデバイスのスペックを上げる
+
+## 通知やアンテナ等の点滅が消えない
+点滅は、未読のコンテンツがあることを示しています。通常点滅が消えない場合は、コンテンツを遡ると未読なコンテンツが残っています。 すべて既読にしたと思われるのに、それでもなお点滅が続く場合(おそらく不具合と思われます)は設定から強制的にすべて既読扱いにすることができます。
+
+## Renoteができない
+フォロワー限定のノートはRenoteすることはできません。
+
+## UI上で特定の要素が表示されない
+広告ブロッカーを使用しているとそのような不具合が発生することがあります。Misskeyではオフにしてご利用ください。
+
+## UI上で未翻訳の部分がある
+ほとんどの場合、単に翻訳が間に合っていないだけで、不具合ではありません。翻訳が終わるまでお待ちください。 [翻訳に参加](./misskey)していただくことも可能です。
diff --git a/src/docs/id-ID/admin/disable-timelines.md b/src/docs/id-ID/admin/disable-timelines.md
new file mode 100644
index 0000000000..b081e35ab0
--- /dev/null
+++ b/src/docs/id-ID/admin/disable-timelines.md
@@ -0,0 +1,8 @@
+# LTL/STL/GTLの無効化
+Misskeyでは、LTL/STL/GTLをそれぞれ無効化することができます。有効/無効を切り替えるには、インスタンスコントロールパネルで設定します。
+
+LTLやSTLは、そのインスタンス全員の投稿が見れるため、新規のユーザーにとってはユーザーを探す必要がなくなり、興味のあるユーザーを見つけやすいという利点があります。 しかし同時に、フォロー機能が活用されなくなったり、不適切な投稿が目につきやすくなったり、チャットのようになることで内輪感が生じて逆に新規ユーザーが参加しにくくなるといったデメリットも持ち合わせています。 サーバーによってメリット/デメリットどちらが優勢かは異なるので、オプションとして無効にできるようになっています。 もしデメリットの方が上回っていると感じたら、それらのタイムラインを無効化することも検討してください。
+
+<div class="warn">⚠️ 無効化を行うと、ユーザーが困惑し、短期的に見て利用者が減る可能性があります。そのため、無効化の際は影響を慎重に検討し、事前に説明してフォローを整える期間を一定程度設けることを推奨します。</div>
+
+なお、管理者/モデレーターは、これらのタイムラインの無効化状態は適用されず、引き続き利用することが可能です。
diff --git a/src/docs/id-ID/admin/faq.md b/src/docs/id-ID/admin/faq.md
new file mode 100644
index 0000000000..317b4e0655
--- /dev/null
+++ b/src/docs/id-ID/admin/faq.md
@@ -0,0 +1,5 @@
+# よくある質問
+ここでは、サーバー管理者向けのよくある質問を掲載しています。
+
+## デフォルトテーマを設定したい
+現在、デフォルトテーマ設定機能は実装されていません。
diff --git a/src/docs/id-ID/advanced/aiscript.md b/src/docs/id-ID/advanced/aiscript.md
new file mode 100644
index 0000000000..604d17daa8
--- /dev/null
+++ b/src/docs/id-ID/advanced/aiscript.md
@@ -0,0 +1,7 @@
+# AiScript
+AiScriptは、Misskeyで使用できるスクリプト言語です。
+
+<div class="info">ℹ️ AiScript実装はMisskeyとは別リポジトリで、<a href="https://github.com/syuilo/aiscript" target="_blank">オープンソースで公開されています。</a></div>
+
+## 使い方
+AiScriptの構文や組み込み関数などのドキュメントは、[こちら](https://github.com/syuilo/aiscript/tree/master/docs)で公開されています。
diff --git a/src/docs/id-ID/advanced/api.md b/src/docs/id-ID/advanced/api.md
new file mode 100644
index 0000000000..76019b6145
--- /dev/null
+++ b/src/docs/id-ID/advanced/api.md
@@ -0,0 +1,58 @@
+# Misskey API
+
+MisskeyAPIを使ってMisskeyクライアント、Misskey連携Webサービス、Bot等(以下「アプリケーション」と呼びます)を開発できます。 ストリーミングAPIもあるので、リアルタイム性のあるアプリケーションを作ることも可能です。
+
+APIを使い始めるには、まずアクセストークンを取得する必要があります。 このドキュメントでは、アクセストークンを取得する手順を説明した後、基本的なAPIの使い方を説明します。
+
+## アクセストークンの取得
+基本的に、APIはリクエストにはアクセストークンが必要となります。 APIにリクエストするのが自分自身なのか、不特定の利用者に使ってもらうアプリケーションなのかによって取得手順は異なります。
+
+* 前者の場合: [「自分自身のアクセストークンを手動発行する」](#自分自身のアクセストークンを手動発行する)に進む
+* 後者の場合: [「アプリケーション利用者にアクセストークンの発行をリクエストする」](#アプリケーション利用者にアクセストークンの発行をリクエストする)に進む
+
+### 自分自身のアクセストークンを手動発行する
+「設定 > API」で、自分のアクセストークンを発行できます。
+
+[「APIの使い方」へ進む](#APIの使い方)
+
+### アプリケーション利用者にアクセストークンの発行をリクエストする
+アプリケーション利用者のアクセストークンを取得するには、以下の手順で発行をリクエストします。
+
+#### Step 1
+
+UUIDを生成する。以後これをセッションIDと呼びます。
+
+> このセッションIDは毎回生成し、使いまわさないようにしてください。
+
+#### Step 2
+
+`{_URL_}/miauth/{session}`をユーザーのブラウザで表示させる。`{session}`の部分は、セッションIDに置き換えてください。
+> 例: `{_URL_}/miauth/c1f6d42b-468b-4fd2-8274-e58abdedef6f`
+
+表示する際、URLにクエリパラメータとしていくつかのオプションを設定できます:
+* `name` ... アプリケーション名
+    * > 例: `MissDeck`
+* `icon` ... アプリケーションのアイコン画像URL
+    * > 例: `https://missdeck.example.com/icon.png`
+* `callback` ... 認証が終わった後にリダイレクトするURL
+    * > 例: `https://missdeck.example.com/callback`
+    * リダイレクト時には、`session`というクエリパラメータでセッションIDが付きます
+* `permission` ... アプリケーションが要求する権限
+    * > 例: `write:notes,write:following,read:drive`
+    * 要求する権限を`,`で区切って列挙します
+    * どのような権限があるかは[APIリファレンス](/api-doc)で確認できます
+
+#### Step 3
+ユーザーが発行を許可した後、`{_URL_}/api/miauth/{session}/check`にPOSTリクエストすると、レスポンスとしてアクセストークンを含むJSONが返ります。
+
+レスポンスに含まれるプロパティ:
+* `token` ... ユーザーのアクセストークン
+* `user` ... ユーザーの情報
+
+[「APIの使い方」へ進む](#APIの使い方)
+
+## APIの使い方
+**APIはすべてPOSTで、リクエスト/レスポンスともにJSON形式です。RESTではありません。** アクセストークンは、`i`というパラメータ名でリクエストに含めます。
+
+* [APIリファレンス](/api-doc)
+* [ストリーミングAPI](./stream)
diff --git a/src/docs/id-ID/advanced/create-plugin.md b/src/docs/id-ID/advanced/create-plugin.md
new file mode 100644
index 0000000000..ec17b95186
--- /dev/null
+++ b/src/docs/id-ID/advanced/create-plugin.md
@@ -0,0 +1,74 @@
+# プラグインの作成
+Misskey Webクライアントのプラグイン機能を使うと、クライアントを拡張し、様々な機能を追加できます。 ここではプラグインの作成にあたってのメタデータ定義や、AiScript APIリファレンスを掲載します。
+
+## Metadata
+プラグインは、AiScriptのメタデータ埋め込み機能を使って、デフォルトとしてプラグインのメタデータを定義する必要があります。 メタデータは次のプロパティを含むオブジェクトです。
+
+### name
+プラグイン名
+
+### author
+プラグイン作者
+
+### version
+プラグインバージョン。数値を指定してください。
+
+### description
+プラグインの説明
+
+### permissions
+プラグインが要求する権限。MisskeyAPIにリクエストする際に用いられます。
+
+### config
+プラグインの設定情報を表すオブジェクト。 キーに設定名、値に以下のプロパティを含めます。
+
+#### type
+設定値の種類を表す文字列。以下から選択します。 string number boolean
+
+#### label
+ユーザーに表示する設定名
+
+#### description
+設定の説明
+
+#### default
+設定のデフォルト値
+
+## APIリファレンス
+AiScript標準で組み込まれているAPIは掲載しません。
+
+### Mk:dialog(title text type)
+ダイアログを表示します。typeには以下の値が設定できます。 info success warn error question 省略すると info になります。
+
+### Mk:confirm(title text type)
+確認ダイアログを表示します。typeには以下の値が設定できます。 info success warn error question 省略すると question になります。 ユーザーが"OK"を選択した場合は true を、"キャンセル"を選択した場合は false が返ります。
+
+### Mk:api(endpoint params)
+Misskey APIにリクエストします。第一引数にエンドポイント名、第二引数にパラメータオブジェクトを渡します。
+
+### Mk:save(key value)
+任意の値に任意の名前を付けて永続化します。永続化した値は、AiScriptコンテキストが終了しても残り、Mk:loadで読み取ることができます。
+
+### Mk:load(key)
+Mk:saveで永続化した指定の名前の値を読み取ります。
+
+### Plugin:register_post_form_action(title fn)
+投稿フォームにアクションを追加します。第一引数にアクション名、第二引数にアクションが選択された際のコールバック関数を渡します。 コールバック関数には、第一引数に投稿フォームオブジェクトが渡されます。
+
+### Plugin:register_note_action(title fn)
+ノートメニューに項目を追加します。第一引数に項目名、第二引数に項目が選択された際のコールバック関数を渡します。 コールバック関数には、第一引数に対象のノートオブジェクトが渡されます。
+
+### Plugin:register_user_action(title fn)
+ユーザーメニューに項目を追加します。第一引数に項目名、第二引数に項目が選択された際のコールバック関数を渡します。 コールバック関数には、第一引数に対象のユーザーオブジェクトが渡されます。
+
+### Plugin:register_note_view_interruptor(fn)
+UIに表示されるノート情報を書き換えます。 コールバック関数には、第一引数に対象のノートオブジェクトが渡されます。 コールバック関数の返り値でノートが書き換えられます。
+
+### Plugin:register_note_post_interruptor(fn)
+ノート投稿時にノート情報を書き換えます。 コールバック関数には、第一引数に対象のノートオブジェクトが渡されます。 コールバック関数の返り値でノートが書き換えられます。
+
+### Plugin:open_url(url)
+第一引数に渡されたURLをブラウザの新しいタブで開きます。
+
+### Plugin:config
+プラグインの設定が格納されるオブジェクト。プラグイン定義のconfigで設定したキーで値が入ります。
diff --git a/src/docs/id-ID/advanced/develop-bot.md b/src/docs/id-ID/advanced/develop-bot.md
new file mode 100644
index 0000000000..7f825e9bc4
--- /dev/null
+++ b/src/docs/id-ID/advanced/develop-bot.md
@@ -0,0 +1,6 @@
+# Botの作成
+[Misskey API](./api)を利用してBotの開発が可能です。 また、いくつかのBot実装が公開されているため、ぜひ参考にしてください。
+
+- [syuilo/ai](https://github.com/syuilo/ai) ... Node.js上で動く、TypeScript製Bot実装
+
+Botを作成したときは、プロフィール設定からBotフラグをオンにしておくことを強くおすすめします。
diff --git a/src/docs/id-ID/advanced/reversi-bot.md b/src/docs/id-ID/advanced/reversi-bot.md
new file mode 100644
index 0000000000..5d764242e2
--- /dev/null
+++ b/src/docs/id-ID/advanced/reversi-bot.md
@@ -0,0 +1,160 @@
+# MisskeyリバーシBotの開発
+Misskeyのリバーシ機能に対応したBotの開発方法をここに記します。
+
+1. `games/reversi`ストリームに以下のパラメータを付けて接続する:
+    * `i`: botアカウントのAPIキー
+
+2. 対局への招待が来たら、ストリームから`invited`イベントが流れてくる
+    * イベントの中身に、`parent`という名前で対局へ誘ってきたユーザーの情報が含まれている
+
+3. `games/reversi/match`へ、`user_id`として`parent`の`id`が含まれたリクエストを送信する
+
+4. 上手くいくとゲーム情報が返ってくるので、`games/reversi-game`ストリームへ、以下のパラメータを付けて接続する:
+    * `i`: botアカウントのAPIキー
+    * `game`: `game`の`id`
+
+5. この間、相手がゲームの設定を変更するとその都度`update-settings`イベントが流れてくるので、必要であれば何かしらの処理を行う
+
+6. 設定に満足したら、`{ type: 'accept' }`メッセージをストリームに送信する
+
+7. ゲームが開始すると、`started`イベントが流れてくる
+    * イベントの中身にはゲーム情報が含まれている
+
+8. 石を打つには、ストリームに`{ type: 'set', pos: <位置> }`を送信する(位置の計算方法は後述)
+
+9. 相手または自分が石を打つと、ストリームから`set`イベントが流れてくる
+    * `color`として石の色が含まれている
+    * `pos`として位置情報が含まれている
+
+## 位置の計算法
+8x8のマップを考える場合、各マスの位置(インデックスと呼びます)は次のようになっています:
+```
++--+--+--+--+--+--+--+--+
+| 0| 1| 2| 3| 4| 5| 6| 7|
++--+--+--+--+--+--+--+--+
+| 8| 9|10|11|12|13|14|15|
++--+--+--+--+--+--+--+--+
+|16|17|18|19|20|21|22|23|
+...
+```
+
+### X,Y座標 から インデックス に変換する
+```
+pos = x + (y * mapWidth)
+```
+`mapWidth`は、ゲーム情報の`map`から、次のようにして計算できます:
+```
+mapWidth = map[0].length
+```
+
+### インデックス から X,Y座標 に変換する
+```
+x = pos % mapWidth
+y = Math.floor(pos / mapWidth)
+```
+
+## マップ情報
+マップ情報は、ゲーム情報の`map`に入っています。 文字列の配列になっており、ひとつひとつの文字がマス情報を表しています。 それをもとにマップのデザインを知る事が出来ます:
+* `(スペース)` ... マス無し
+* `-` ... マス
+* `b` ... 初期配置される黒石
+* `w` ... 初期配置される白石
+
+例えば、4*4の次のような単純なマップがあるとします:
+```text
++---+---+---+---+
+|   |   |   |   |
++---+---+---+---+
+|   | ○ | ● |   |
++---+---+---+---+
+|   | ● | ○ |   |
++---+---+---+---+
+|   |   |   |   |
++---+---+---+---+
+```
+
+この場合、マップデータはこのようになります:
+```javascript
+['----', '-wb-', '-bw-', '----']
+```
+
+## ユーザーにフォームを提示して対話可能Botを作成する
+ユーザーとのコミュニケーションを行うため、ゲームの設定画面でユーザーにフォームを提示することができます。 例えば、Botの強さをユーザーが設定できるようにする、といったシナリオが考えられます。
+
+フォームを提示するには、`reversi-game`ストリームに次のメッセージを送信します:
+```javascript
+{
+  type: 'init-form',
+  body: [フォームコントロールの配列]
+}
+```
+
+フォームコントロールの配列については今から説明します。 フォームコントロールは、次のようなオブジェクトです:
+```javascript
+{
+  id: 'switch1',
+  type: 'switch',
+  label: 'Enable hoge',
+  value: false
+}
+```
+`id` ... コントロールのID。 `type` ... コントロールの種類。後述します。 `label` ... コントロールと一緒に表記するテキスト。 `value` ... コントロールのデフォルト値。
+
+### フォームの操作を受け取る
+ユーザーがフォームを操作すると、ストリームから`update-form`イベントが流れてきます。 イベントの中身には、コントロールのIDと、ユーザーが設定した値が含まれています。 例えば、上で示したスイッチをユーザーがオンにしたとすると、次のイベントが流れてきます:
+```javascript
+{
+  id: 'switch1',
+  value: true
+}
+```
+
+### フォームコントロールの種類
+#### Beralih
+type: `switch` スイッチを表示します。何かの機能をオン/オフさせたい場合に有用です。
+
+##### プロパティ
+`label` ... スイッチに表記するテキスト。
+
+#### ラジオボタン
+type: `radio` ラジオボタンを表示します。選択肢を提示するのに有用です。例えば、Botの強さを設定させるなどです。
+
+##### プロパティ
+`items` ... ラジオボタンの選択肢。例:
+```javascript
+items: [{
+  label: 'å¼±',
+  value: 1
+}, {
+  label: '中',
+  value: 2
+}, {
+  label: 'å¼·',
+  value: 3
+}]
+```
+
+#### スライダー
+type: `slider` スライダーを表示します。
+
+##### プロパティ
+`min` ... スライダーの下限。 `max` ... スライダーの上限。 `step` ... 入力欄で刻むステップ値。
+
+#### テキストボックス
+type: `textbox` テキストボックスを表示します。ユーザーになにか入力させる一般的な用途に利用できます。
+
+## ユーザーにメッセージを表示する
+設定画面でユーザーと対話する、フォーム以外のもうひとつの方法がこれです。ユーザーになにかメッセージを表示することができます。 例えば、ユーザーがBotの対応していないモードやマップを選択したとき、警告を表示するなどです。 メッセージを表示するには、次のメッセージをストリームに送信します:
+```javascript
+{
+  type: 'message',
+  body: {
+    text: 'メッセージ内容',
+    type: 'メッセージの種類'
+  }
+}
+```
+メッセージの種類: `success`, `info`, `warning`, `error`。
+
+## 投了する
+投了をするには、<a href="./api/endpoints/games/reversi/games/surrender">このエンドポイント</a>にリクエストします。
diff --git a/src/docs/id-ID/advanced/stream.md b/src/docs/id-ID/advanced/stream.md
new file mode 100644
index 0000000000..0f01df4679
--- /dev/null
+++ b/src/docs/id-ID/advanced/stream.md
@@ -0,0 +1,350 @@
+# ストリーミングAPI
+
+ストリーミングAPIを使うと、リアルタイムで様々な情報(例えばタイムラインに新しい投稿が流れてきた、メッセージが届いた、フォローされた、など)を受け取ったり、様々な操作を行ったりすることができます。
+
+## ストリームに接続する
+
+ストリーミングAPIを利用するには、まずMisskeyサーバーに**websocket**接続する必要があります。
+
+以下のURLに、`i`というパラメータ名で認証情報を含めて、websocket接続してください。例:
+```
+%WS_URL%/streaming?i=xxxxxxxxxxxxxxx
+```
+
+認証情報は、自分のAPIキーや、アプリケーションからストリームに接続する際はユーザーのアクセストークンのことを指します。
+
+<div class="info">ℹ️ 認証情報の取得については、<a href="./api">こちらのドキュメント</a>をご確認ください。</div>
+
+---
+
+認証情報は省略することもできますが、その場合非ログインでの利用ということになり、受信できる情報や可能な操作は限られます。例:
+
+```
+%WS_URL%/streaming
+```
+
+---
+
+ストリームに接続すると、後述するAPI操作や、投稿の購読を行ったりすることができます。 しかしまだこの段階では、例えばタイムラインへの新しい投稿を受信したりすることはできません。 それを行うには、ストリーム上で、後述する**チャンネル**に接続する必要があります。
+
+**ストリームでのやり取りはすべてJSONです。**
+
+## Kanal
+MisskeyのストリーミングAPIにはチャンネルという概念があります。これは、送受信する情報を分離するための仕組みです。 Misskeyのストリームに接続しただけでは、まだリアルタイムでタイムラインの投稿を受信したりはできません。 ストリーム上でチャンネルに接続することで、様々な情報を受け取ったり情報を送信したりすることができるようになります。
+
+ひとつのストリーム上で、同時に複数のチャンネルに接続することができます。
+
+### チャンネルに接続する
+チャンネルに接続するには、次のようなデータをJSONでストリームに送信します:
+
+```json
+{
+    type: 'connect',
+    body: {
+        channel: 'xxxxxxxx',
+        id: 'foobar',
+        params: {
+            ...
+        }
+    }
+}
+```
+
+ここで、
+* `channel`には接続したいチャンネル名を設定します。チャンネルの種類については後述します。
+* `id`にはそのチャンネルとやり取りするための任意のIDを設定します。ストリームでは様々なメッセージが流れるので、そのメッセージがどのチャンネルからのものなのか識別する必要があるからです。このIDは、UUIDや、乱数のようなもので構いません。
+* `params`はチャンネルに接続する際のパラメータです。チャンネルによって接続時に必要とされるパラメータは異なります。パラメータ不要のチャンネルに接続する際は、このプロパティは省略可能です。
+
+<div class="info">ℹ️ IDはチャンネルごとではなく「チャンネルの接続ごと」です。なぜなら、同じチャンネルに異なるパラメータで複数接続するケースもあるからです。</div>
+
+### チャンネルからのメッセージを受け取る
+例えばタイムラインのチャンネルなら、新しい投稿があった時にメッセージを発します。そのメッセージを受け取ることで、タイムラインに新しい投稿がされたことをリアルタイムで知ることができます。
+
+チャンネルがメッセージを発すると、次のようなデータがJSONでストリームに流れてきます:
+```json
+{
+    type: 'channel',
+    body: {
+        id: 'foobar',
+        type: 'something',
+        body: {
+            some: 'thing'
+        }
+    }
+}
+```
+
+ここで、
+* `id`には前述したそのチャンネルに接続する際に設定したIDが設定されています。これで、このメッセージがどのチャンネルからのものなのか知ることができます。
+* `type`にはメッセージの種類が設定されます。チャンネルによって、どのような種類のメッセージが流れてくるかは異なります。
+* `body`にはメッセージの内容が設定されます。チャンネルによって、どのような内容のメッセージが流れてくるかは異なります。
+
+### チャンネルに向けてメッセージを送信する
+チャンネルによっては、メッセージを受け取るだけでなく、こちらから何かメッセージを送信し、何らかの操作を行える場合があります。
+
+チャンネルにメッセージを送信するには、次のようなデータをJSONでストリームに送信します:
+```json
+{
+    type: 'channel',
+    body: {
+        id: 'foobar',
+        type: 'something',
+        body: {
+            some: 'thing'
+        }
+    }
+}
+```
+
+ここで、
+* `id`には前述したそのチャンネルに接続する際に設定したIDを設定します。これで、このメッセージがどのチャンネルに向けたものなのか識別させることができます。
+* `type`にはメッセージの種類を設定します。チャンネルによって、どのような種類のメッセージを受け付けるかは異なります。
+* `body`にはメッセージの内容を設定します。チャンネルによって、どのような内容のメッセージを受け付けるかは異なります。
+
+### チャンネルから切断する
+チャンネルから切断するには、次のようなデータをJSONでストリームに送信します:
+
+```json
+{
+    type: 'disconnect',
+    body: {
+        id: 'foobar'
+    }
+}
+```
+
+ここで、
+* `id`には前述したそのチャンネルに接続する際に設定したIDを設定します。
+
+## ストリームを経由してAPIリクエストする
+
+ストリームを経由してAPIリクエストすると、HTTPリクエストを発生させずにAPIを利用できます。そのため、コードを簡潔にできたり、パフォーマンスの向上を見込めるかもしれません。
+
+ストリームを経由してAPIリクエストするには、次のようなデータをJSONでストリームに送信します:
+```json
+{
+    type: 'api',
+    body: {
+        id: 'xxxxxxxxxxxxxxxx',
+        endpoint: 'notes/create',
+        data: {
+            text: 'yee haw!'
+        }
+    }
+}
+```
+
+ここで、
+* `id`には、APIのレスポンスを識別するための、APIリクエストごとの一意なIDを設定する必要があります。UUIDや、簡単な乱数のようなもので構いません。
+* `endpoint`には、あなたがリクエストしたいAPIのエンドポイントを指定します。
+* `data`には、エンドポイントのパラメータを含めます。
+
+<div class="info">ℹ️ APIのエンドポイントやパラメータについてはAPIリファレンスをご確認ください。</div>
+
+### レスポンスの受信
+
+APIへリクエストすると、レスポンスがストリームから次のような形式で流れてきます。
+
+```json
+{
+    type: 'api:xxxxxxxxxxxxxxxx',
+    body: {
+        ...
+    }
+}
+```
+
+ここで、
+* `xxxxxxxxxxxxxxxx`の部分には、リクエストの際に設定された`id`が含まれています。これにより、どのリクエストに対するレスポンスなのか判別することができます。
+* `body`には、レスポンスが含まれています。
+
+## 投稿のキャプチャ
+
+Misskeyは投稿のキャプチャと呼ばれる仕組みを提供しています。これは、指定した投稿のイベントをストリームで受け取る機能です。
+
+例えばタイムラインを取得してユーザーに表示したとします。ここで誰かがそのタイムラインに含まれるどれかの投稿に対してリアクションしたとします。
+
+しかし、クライアントからするとある投稿にリアクションが付いたことなどは知る由がないため、リアルタイムでリアクションをタイムライン上の投稿に反映して表示するといったことができません。
+
+この問題を解決するために、Misskeyは投稿のキャプチャ機構を用意しています。投稿をキャプチャすると、その投稿に関するイベントを受け取ることができるため、リアルタイムでリアクションを反映させたりすることが可能になります。
+
+### 投稿をキャプチャする
+
+投稿をキャプチャするには、ストリームに次のようなメッセージを送信します:
+
+```json
+{
+    type: 'subNote',
+    body: {
+        id: 'xxxxxxxxxxxxxxxx'
+    }
+}
+```
+
+ここで、
+* `id`にキャプチャしたい投稿の`id`を設定します。
+
+このメッセージを送信すると、Misskeyにキャプチャを要請したことになり、以後、その投稿に関するイベントが流れてくるようになります。
+
+例えば投稿にリアクションが付いたとすると、次のようなメッセージが流れてきます:
+
+```json
+{
+    type: 'noteUpdated',
+    body: {
+        id: 'xxxxxxxxxxxxxxxx',
+        type: 'reacted',
+        body: {
+            reaction: 'like',
+            userId: 'yyyyyyyyyyyyyyyy'
+        }
+    }
+}
+```
+
+ここで、
+* `body`内の`id`に、イベントを発生させた投稿のIDが設定されます。
+* `body`内の`type`に、イベントの種類が設定されます。
+* `body`内の`body`に、イベントの詳細が設定されます。
+
+#### イベントの種類
+
+##### `reacted`
+その投稿にリアクションがされた時に発生します。
+
+* `reaction`に、リアクションの種類が設定されます。
+* `userId`に、リアクションを行ったユーザーのIDが設定されます。
+
+例:
+```json
+{
+    type: 'noteUpdated',
+    body: {
+        id: 'xxxxxxxxxxxxxxxx',
+        type: 'reacted',
+        body: {
+            reaction: 'like',
+            userId: 'yyyyyyyyyyyyyyyy'
+        }
+    }
+}
+```
+
+##### `deleted`
+その投稿が削除された時に発生します。
+
+* `deletedAt`に、削除日時が設定されます。
+
+例:
+```json
+{
+    type: 'noteUpdated',
+    body: {
+        id: 'xxxxxxxxxxxxxxxx',
+        type: 'deleted',
+        body: {
+            deletedAt: '2018-10-22T02:17:09.703Z'
+        }
+    }
+}
+```
+
+##### `pollVoted`
+その投稿に添付されたアンケートに投票された時に発生します。
+
+* `choice`に、選択肢IDが設定されます。
+* `userId`に、投票を行ったユーザーのIDが設定されます。
+
+例:
+```json
+{
+    type: 'noteUpdated',
+    body: {
+        id: 'xxxxxxxxxxxxxxxx',
+        type: 'pollVoted',
+        body: {
+            choice: 2,
+            userId: 'yyyyyyyyyyyyyyyy'
+        }
+    }
+}
+```
+
+### 投稿のキャプチャを解除する
+
+その投稿がもう画面に表示されなくなったりして、その投稿に関するイベントをもう受け取る必要がなくなったときは、キャプチャの解除を申請してください。
+
+次のメッセージを送信します:
+
+```json
+{
+    type: 'unsubNote',
+    body: {
+        id: 'xxxxxxxxxxxxxxxx'
+    }
+}
+```
+
+ここで、
+* `id`にキャプチャを解除したい投稿の`id`を設定します。
+
+このメッセージを送信すると、以後、その投稿に関するイベントは流れてこないようになります。
+
+# チャンネル一覧
+## `main`
+アカウントに関する基本的な情報が流れてきます。このチャンネルにパラメータはありません。
+
+### 流れてくるイベント一覧
+
+#### `renote`
+自分の投稿がRenoteされた時に発生するイベントです。自分自身の投稿をRenoteしたときは発生しません。
+
+#### `mention`
+誰かからメンションされたときに発生するイベントです。
+
+#### `readAllNotifications`
+自分宛ての通知がすべて既読になったことを表すイベントです。このイベントを利用して、「通知があることを示すアイコン」のようなものをオフにしたりする等のケースが想定されます。
+
+#### `meUpdated`
+自分の情報が更新されたことを表すイベントです。
+
+#### `follow`
+自分が誰かをフォローしたときに発生するイベントです。
+
+#### `unfollow`
+自分が誰かのフォローを解除したときに発生するイベントです。
+
+#### `followed`
+自分が誰かにフォローされたときに発生するイベントです。
+
+## `homeTimeline`
+ホームタイムラインの投稿情報が流れてきます。このチャンネルにパラメータはありません。
+
+### 流れてくるイベント一覧
+
+#### `note`
+タイムラインに新しい投稿が流れてきたときに発生するイベントです。
+
+## `localTimeline`
+ローカルタイムラインの投稿情報が流れてきます。このチャンネルにパラメータはありません。
+
+### 流れてくるイベント一覧
+
+#### `note`
+ローカルタイムラインに新しい投稿が流れてきたときに発生するイベントです。
+
+## `hybridTimeline`
+ソーシャルタイムラインの投稿情報が流れてきます。このチャンネルにパラメータはありません。
+
+### 流れてくるイベント一覧
+
+#### `note`
+ソーシャルタイムラインに新しい投稿が流れてきたときに発生するイベントです。
+
+## `globalTimeline`
+グローバルタイムラインの投稿情報が流れてきます。このチャンネルにパラメータはありません。
+
+### 流れてくるイベント一覧
+
+#### `note`
+グローバルタイムラインに新しい投稿が流れてきたときに発生するイベントです。
diff --git a/src/docs/id-ID/features/antenna.md b/src/docs/id-ID/features/antenna.md
new file mode 100644
index 0000000000..a0cc8506ab
--- /dev/null
+++ b/src/docs/id-ID/features/antenna.md
@@ -0,0 +1,4 @@
+# Antena
+アンテナは、自由に条件を設定して、合致するノートを自動で収集することができる機能です。
+
+条件を設定したアンテナが作成された状態で、条件に合致するノートが投稿されると、リアルタイムでそのアンテナのタイムラインにノートが追加されます。
diff --git a/src/docs/id-ID/features/custom-emoji.md b/src/docs/id-ID/features/custom-emoji.md
new file mode 100644
index 0000000000..7a509195e7
--- /dev/null
+++ b/src/docs/id-ID/features/custom-emoji.md
@@ -0,0 +1,2 @@
+# Emoji kustom
+カスタム絵文字は、インスタンスで用意された画像を絵文字のように使える機能です。 ノート、リアクション、チャット、自己紹介、名前などの場所で使うことができます。 カスタム絵文字をそれらの場所で使うには、絵文字ピッカーボタン(ある場合)を押すか、`:`を入力して絵文字サジェストを表示します。 テキスト内に`:foo:`のような形式の文字列が見つかると、`foo`の部分がカスタム絵文字名と解釈され、表示時には対応したカスタム絵文字に置き換わります。
diff --git a/src/docs/id-ID/features/deck.md b/src/docs/id-ID/features/deck.md
new file mode 100644
index 0000000000..7e0836f356
--- /dev/null
+++ b/src/docs/id-ID/features/deck.md
@@ -0,0 +1,18 @@
+# Dek
+
+デッキは利用可能なUIのひとつです。「カラム」と呼ばれるビューを複数並べて表示させることで、カスタマイズ性が高く、情報量の多いUIが構築できることが特徴です。
+
+## カラムの追加
+デッキの背景を右クリックし、「カラムを追加」して任意のカラムを追加できます。
+
+## カラムの移動
+カラムは、ドラッグアンドドロップで他のカラムと位置を入れ替えることが出来るほか、カラムメニュー(カラムのヘッダー右クリック)から位置を移動させることもできます。
+
+## カラムの水平分割
+カラムは左右だけでなく、上下に並べることもできます。 カラムメニューを開き、「左に重ねる」を選択すると、左のカラムの下に現在のカラムが移動します。 上下分割を解除するには、カラムメニューの「右に出す」を選択します。
+
+## カラムの設定
+カラムメニューの「編集」を選択するとカラムの設定を編集できます。カラムの名前を変えたり、幅を変えたりできます。
+
+## デッキの設定
+デッキに関する設定は、[settings/deck](/settings/deck)で行えます。
diff --git a/src/docs/id-ID/features/drive.md b/src/docs/id-ID/features/drive.md
new file mode 100644
index 0000000000..c445b99a86
--- /dev/null
+++ b/src/docs/id-ID/features/drive.md
@@ -0,0 +1,17 @@
+# Drive
+ドライブは、Misskey上でファイルを管理できる機能です。
+
+[ドライブのページ](/my/drive)から任意のファイルをアップロードできるほか、アバターに設定した画像や、ノートに添付したファイルなどもすべてドライブにアップロードされます。
+
+<div class="warn">⚠️ ドライブからファイルを削除すると、そのファイルが添付されたノートも消えます。</div>
+
+ドライブにアップロードされたファイルは、いつでもダウンロードすることができるほか、ノート作成時に「ドライブからファイルを添付」することでファイルを再利用することもできます。
+
+ドライブ内にフォルダを作り、複数のファイルをまとめて整理することもできます。
+
+## 閲覧注意 (NSFW)
+<div class="info">ℹ️ この項目が閲覧注意なわけではありません</div>
+
+閲覧注意またはNSFW (Not safe for work) は、ドライブのファイルに設定することができるフラグです。 閲覧注意フラグを設定されたファイルは、表示される際に閲覧者の操作なしには表示されなくなります。 このフラグは、例えば職場や公共の場で閲覧するのに適切でないと思われる画像などに設定し、そのような画像が突然表示されてしまうことを防ぐ目的で使われます。
+
+このフラグは手動でオンオフを切り替えられるほか、モデレーターの判断で設定される場合もあります。
diff --git a/src/docs/id-ID/features/favorite.md b/src/docs/id-ID/features/favorite.md
new file mode 100644
index 0000000000..27d36e64eb
--- /dev/null
+++ b/src/docs/id-ID/features/favorite.md
@@ -0,0 +1,4 @@
+# Favorit
+[ノート](./node)をお気に入りとして登録できる機能です。 お気に入り登録したノートは、[お気に入りページ](./my/favorites)で一覧することができます。 お気に入りに登録したことは相手に通知されず、お気に入りは自分しか見ることができません。
+
+ノートをお気に入り登録するには、ノートメニューの「お気に入り」を押します。お気に入り解除するには、ノートメニューの「お気に入り解除」を押します。
diff --git a/src/docs/id-ID/features/follow.md b/src/docs/id-ID/features/follow.md
new file mode 100644
index 0000000000..4799dc9d85
--- /dev/null
+++ b/src/docs/id-ID/features/follow.md
@@ -0,0 +1,2 @@
+# Ikuti
+ユーザーをフォローすると、タイムラインにそのユーザーの投稿が表示されるようになります。ただし、他のユーザーに対する返信は含まれません。 ユーザーをフォローするには、ユーザーページの「フォロー」ボタンをクリックします。フォローを解除するには、もう一度クリックします。
diff --git a/src/docs/id-ID/features/keyboard-shortcut.md b/src/docs/id-ID/features/keyboard-shortcut.md
new file mode 100644
index 0000000000..779f77dce0
--- /dev/null
+++ b/src/docs/id-ID/features/keyboard-shortcut.md
@@ -0,0 +1,66 @@
+# キーボードショートカット
+
+## Global
+これらのショートカットは基本的にどこでも使えます。
+<table>
+    <thead>
+        <tr><th>ショートカット</th><th>効果</th><th>由来</th></tr>
+    </thead>
+    <tbody>
+        <tr><td><kbd class="key">P</kbd>, <kbd class="key">N</kbd></td><td>新規投稿</td><td><b>P</b>ost, <b>N</b>ew, <b>N</b>ote</td></tr>
+        <tr><td><kbd class="key">T</kbd></td><td>タイムラインの最も新しい投稿にフォーカス</td><td><b>T</b>imeline, <b>T</b>op</td></tr>
+        <tr><td><kbd class="group"><kbd class="key">Shift</kbd> + <kbd class="key">N</kbd></kbd></td><td>通知を表示/隠す</td><td><b>N</b>otifications</td></tr>
+        <tr><td><kbd class="key">S</kbd></td><td>Penelusuran</td><td><b>S</b>earch</td></tr>
+        <tr><td><kbd class="key">H</kbd>, <kbd class="key">?</kbd></td><td>ヘルプを表示</td><td><b>H</b>elp</td></tr>
+    </tbody>
+</table>
+
+## 投稿にフォーカスされた状態
+<table>
+    <thead>
+        <tr><th>ショートカット</th><th>効果</th><th>由来</th></tr>
+    </thead>
+    <tbody>
+        <tr><td><kbd class="key">↑</kbd>, <kbd class="key">K</kbd>, <kbd class="group"><kbd class="key">Shift</kbd> + <kbd class="key">Tab</kbd></kbd></td><td>上の投稿にフォーカスを移動</td><td>-</td></tr>
+        <tr><td><kbd class="key">↓</kbd>, <kbd class="key">J</kbd>, <kbd class="key">Tab</kbd></td><td>下の投稿にフォーカスを移動</td><td>-</td></tr>
+        <tr><td><kbd class="key">R</kbd></td><td>返信フォームを開く</td><td><b>R</b>eply</td></tr>
+        <tr><td><kbd class="key">Q</kbd></td><td>Renoteフォームを開く</td><td><b>Q</b>uote</td></tr>
+        <tr><td><kbd class="group"><kbd class="key">Ctrl</kbd> + <kbd class="key">Q</kbd></kbd></td><td>即刻Renoteする(フォームを開かずに)</td><td>-</td></tr>
+        <tr><td><kbd class="key">E</kbd>, <kbd class="key">A</kbd>, <kbd class="key">+</kbd></td><td>リアクションフォームを開く</td><td><b>E</b>mote, re<b>A</b>ction</td></tr>
+        <tr><td><kbd class="key">0</kbd>~<kbd class="key">9</kbd></td><td>数字に対応したリアクションをする(対応については後述)</td><td>-</td></tr>
+        <tr><td><kbd class="key">F</kbd>, <kbd class="key">B</kbd></td><td>お気に入りに登録</td><td><b>F</b>avorite, <b>B</b>ookmark</td></tr>
+        <tr><td><kbd class="key">Del</kbd>, <kbd class="group"><kbd class="key">Ctrl</kbd> + <kbd class="key">D</kbd></kbd></td><td>投稿を削除</td><td><b>D</b>elete</tr>
+        <tr><td><kbd class="key">M</kbd>, <kbd class="key">O</kbd></td><td>投稿に対するメニューを開く</td><td><b>M</b>ore, <b>O</b>ther</td></tr>
+        <tr><td><kbd class="key">S</kbd></td><td>CWで隠された部分を表示 or 隠す</td><td><b>S</b>how, <b>S</b>ee</td></tr>
+        <tr><td><kbd class="key">Esc</kbd></td><td>フォーカスを外す</td><td>-</td></tr>
+    </tbody>
+</table>
+
+## Renoteフォーム
+<table>
+    <thead>
+        <tr><th>ショートカット</th><th>効果</th><th>由来</th></tr>
+    </thead>
+    <tbody>
+        <tr><td><kbd class="key">Enter</kbd></td><td>Renoteする</td><td>-</td></tr>
+        <tr><td><kbd class="key">Q</kbd></td><td>フォームを展開する</td><td><b>Q</b>uote</td></tr>
+        <tr><td><kbd class="key">Esc</kbd></td><td>フォームを閉じる</td><td>-</td></tr>
+    </tbody>
+</table>
+
+## リアクションフォーム
+デフォルトで「👍」にフォーカスが当たっている状態です。
+<table>
+    <thead>
+        <tr><th>ショートカット</th><th>効果</th><th>由来</th></tr>
+    </thead>
+    <tbody>
+        <tr><td><kbd class="key">↑</kbd>, <kbd class="key">K</kbd></td><td>上のリアクションにフォーカスを移動</td><td>-</td></tr>
+        <tr><td><kbd class="key">↓</kbd>, <kbd class="key">J</kbd></td><td>下のリアクションにフォーカスを移動</td><td>-</td></tr>
+        <tr><td><kbd class="key">←</kbd>, <kbd class="key">H</kbd>, <kbd class="group"><kbd class="key">Shift</kbd> + <kbd class="key">Tab</kbd></kbd></td><td>左のリアクションにフォーカスを移動</td><td>-</td></tr>
+        <tr><td><kbd class="key">→</kbd>, <kbd class="key">L</kbd>, <kbd class="key">Tab</kbd></td><td>右のリアクションにフォーカスを移動</td><td>-</td></tr>
+        <tr><td><kbd class="key">Enter</kbd>, <kbd class="key">Space</kbd>, <kbd class="key">+</kbd></td><td>リアクション確定</td><td>-</td></tr>
+        <tr><td><kbd class="key">0</kbd>~<kbd class="key">9</kbd></td><td>数字に対応したリアクションで確定</td><td>-</td></tr>
+        <tr><td><kbd class="key">Esc</kbd></td><td>リアクションするのをやめる</td><td>-</td></tr>
+    </tbody>
+</table>
diff --git a/src/docs/id-ID/features/mfm.md b/src/docs/id-ID/features/mfm.md
new file mode 100644
index 0000000000..5be2df4f30
--- /dev/null
+++ b/src/docs/id-ID/features/mfm.md
@@ -0,0 +1,12 @@
+# MFM
+MFMは、Misskey Flavored Markdownの略で、Misskeyの様々な場所で使用できる専用のマークアップ言語です。 MFMで使用可能な構文は[MFMチートシート](/mfm-cheat-sheet)で確認できます。
+
+## MFMが使用可能な場所の例
+- ノート本文
+- CW注釈
+- ユーザーの名前
+- ユーザーの自己紹介
+
+## 開発者向け情報
+MFMのパーサー実装はライブラリとして公開されており、簡単にクライアントにMFMを組み込むことが可能です。
+- [misskey-dev/mfm.js](https://github.com/misskey-dev/mfm.js) - JavaScriptパーサー実装
diff --git a/src/docs/id-ID/features/mute.md b/src/docs/id-ID/features/mute.md
new file mode 100644
index 0000000000..66f717a4f1
--- /dev/null
+++ b/src/docs/id-ID/features/mute.md
@@ -0,0 +1,13 @@
+# Bisukan
+
+ユーザーをミュートすると、そのユーザーに関する次のコンテンツがMisskeyに表示されなくなります:
+
+* タイムラインや投稿の検索結果内の、そのユーザーの投稿(およびそれらの投稿に対する返信やRenote)
+* そのユーザーからの通知
+* メッセージ履歴一覧内の、そのユーザーとのメッセージ履歴
+
+ユーザーをミュートするには、対象のユーザーのユーザーページに表示されている「ミュート」ボタンを押します。
+
+ミュートを行ったことは相手に通知されず、ミュートされていることを知ることもできません。
+
+設定>ミュート から、自分がミュートしているユーザー一覧を確認することができます。
diff --git a/src/docs/id-ID/features/note.md b/src/docs/id-ID/features/note.md
new file mode 100644
index 0000000000..55f6bad286
--- /dev/null
+++ b/src/docs/id-ID/features/note.md
@@ -0,0 +1,51 @@
+# Catatan
+ノートは、Misskeyに投稿される、文章、ファイル、アンケートなどを含むコンテンツで、Misskeyの中心的概念です。また、そのノートを作成する行為自体もノートと呼ばれます。
+
+ノートが作成されると、[タイムライン](./timeline)に追加され、自分の[フォロワー](./follow)やサーバーのユーザーが見れるようになります。
+
+ノートには、[リアクション](./reaction)を行うことができます。また、返信や引用もできます。
+
+ノートを[お気に入り](./favorite)登録することで、後で簡単に見返すことができます。
+
+## ノートを作成する
+ノートを作成するには、画面上にある鉛筆マークのボタンを押して、作成フォームを開きます。作成フォームに内容を入力し、「ノート」ボタンを押すことでノートが作成されます。 ノートには、画像、動画など任意のファイルや、[アンケート](./poll)を添付することができます。また、本文中には[MFM](./mfm)が使用でき、[メンション](./mention)や[ハッシュタグ](./hashtag)を含めることもできます。 他にも、CWや公開範囲といった設定も行えます(詳細は後述)。
+<div class="info">ℹ️ コンピューターのクリップボードに画像データがある状態で、フォーム内のテキストボックスにペーストするとその画像を添付することができます。</div>
+<div class="info">ℹ️ テキストボックス内で<kbd class="key">Ctrl + Enter</kbd>を押すことでも投稿できます。</div>
+
+## Renote
+既にあるノートを引用、もしくはそのノートを新しいノートとして共有する行為、またそれによって作成されたノートをRenoteと呼びます。 自分がフォローしているユーザーの、気に入ったノートを自分のフォロワーに共有したい場合や、過去の自分のノートを再度共有したい場合に使います。 同じノートに対して無制限にRenoteを行うことができますが、あまり連続して使用すると迷惑になる場合もあるので、注意しましょう。
+<div class="warn">⚠️ 公開範囲がフォロワーやダイレクトのノートはRenoteできません</div>
+
+Renoteを削除するには、Renoteの時刻表示の隣にある「...」を押し、「Renote解除」を選択します。
+
+## CW
+Contents Warningの略で、ノートの内容を、閲覧者の操作なしには表示しないようにできる機能です。主に長大な内容を隠すためや、ネタバレ防止などに使うことができます。 設定するには、フォームの「内容を隠す」ボタン(目のアイコン)を押します。すると新しい入力エリアが表れるので、そこに内容の要約を記入します。
+
+## Visibilitas
+ノートごとに、そのノートが公開される範囲を設定することができます。フォームの「ノート」ボタンの左にあるアイコンを押すと公開範囲を以下から選択できます。
+
+### Publik
+全ての人に対してノートが公開されるほか、サーバーの全てのタイムライン(ホームタイムライン、ローカルタイムライン、ソーシャルタイムライン、グローバルタイムライン)にノートが流れます。
+<div class="warn">⚠️ アカウントが<a href="./silence">サイレンス</a>状態の時は、この公開範囲は使用できません。</div>
+
+### Beranda
+全ての人に対してノートが公開されますが、フォロワー以外のローカルタイムライン、ソーシャルタイムライン、グローバルタイムラインにはノートは流れません。
+
+### Pengikut
+自分のフォロワーに対してのみノートを公開します。フォロワーの全てのタイムラインに流れます。
+
+### Langsung
+指定したユーザーに対してのみノートを公開します。指定したユーザーの全てのタイムラインに流れます。
+
+### 「ローカルのみ」オプション
+このオプションを有効にすると、リモートにノートを連合しなくなります。
+
+### 公開範囲の比較
+<table>
+    <tr><th></th><th>Publik</th><th>Beranda</th><th>Pengikut</th><th>Langsung</th></tr>
+    <tr><th>フォロワーのLTL/STL/GTL</th><td>✔</td><td>✔</td><td>✔</td><td></td></tr>
+    <tr><th>非フォロワーのLTL/STL/GTL</th><td>✔</td><td></td><td></td><td></td></tr>
+</table>
+
+## Sematkan ke profil
+ノートをピン留めすると、ユーザーページに常にそのノートを表示しておくことができます。 ノートのメニューを開き、「ピン留め」を選択してピン留めできます。 複数のノートをピン留めできます。
diff --git a/src/docs/id-ID/features/pages.md b/src/docs/id-ID/features/pages.md
new file mode 100644
index 0000000000..a9684c7022
--- /dev/null
+++ b/src/docs/id-ID/features/pages.md
@@ -0,0 +1,10 @@
+# Pages
+
+## Variabel
+変数を使うことで動的なページを作成できます。テキスト内で <b>{ 変数名 }</b> と書くとそこに変数の値を埋め込めます。例えば <b>Hello { thing } world!</b> というテキストで、変数(thing)の値が <b>ai</b> だった場合、テキストは <b>Hello ai world!</b> になります。
+
+変数の評価(値を算出すること)は上から下に行われるので、ある変数の中で自分より下の変数を参照することはできません。例えば上から <b>A、B、C</b> と3つの変数を定義したとき、<b>C</b>の中で<b>A</b>や<b>B</b>を参照することはできますが、<b>A</b>の中で<b>B</b>や<b>C</b>を参照することはできません。
+
+ユーザーからの入力を受け取るには、ページに「ユーザー入力」ブロックを設置し、「変数名」に入力を格納したい変数名を設定します(変数は自動で作成されます)。その変数を使ってユーザー入力に応じた動作を行えます。
+
+関数を使うと、値の算出処理を再利用可能な形にまとめることができます。関数を作るには、「関数」タイプの変数を作成します。関数にはスロット(引数)を設定することができ、スロットの値は関数内で変数として利用可能です。また、関数を引数に取る関数(高階関数と呼ばれます)も存在します。関数は予め定義しておくほかに、このような高階関数のスロットに即席でセットすることもできます。
diff --git a/src/docs/id-ID/features/reaction.md b/src/docs/id-ID/features/reaction.md
new file mode 100644
index 0000000000..5361378acf
--- /dev/null
+++ b/src/docs/id-ID/features/reaction.md
@@ -0,0 +1,11 @@
+# Reaksi
+他の人のノートに、絵文字を付けて簡単にあなたの反応を伝えられる機能です。 リアクションするには、ノートの + アイコンをクリックしてピッカーを表示し、絵文字を選択します。 リアクションには[カスタム絵文字](./custom-emoji)も使用できます。
+
+## リアクションピッカーのカスタマイズ
+ピッカーに表示される絵文字を自分好みにカスタマイズすることができます。 設定の「リアクション」で設定します。
+
+## リモート投稿へのリアクションについて
+リアクションはMisskeyオリジナルの機能であるため、リモートインスタンスがMisskeyでない限りは、ほとんどの場合「Like」としてアクティビティが送信されます。一般的にはLikeは「お気に入り」として実装されているようです。
+
+## リモートからのリアクションについて
+リモートから「Like」アクティビティを受信したとき、Misskeyでは「👍」のリアクションとして解釈されます。
diff --git a/src/docs/id-ID/features/silence.md b/src/docs/id-ID/features/silence.md
new file mode 100644
index 0000000000..1aba8535ce
--- /dev/null
+++ b/src/docs/id-ID/features/silence.md
@@ -0,0 +1,6 @@
+# Bungkam
+サイレンスは、アカウントに設定される状態のひとつです。
+
+アカウントがサイレンス状態になると、ノートの公開範囲をパブリックにできなくなります。 ホーム、フォロワー、ダイレクトは選択可能なため、サイレンスを受けた場合でもフォロワーやあなたのユーザーページを直接訪れた場合は投稿を閲覧できますが、GTL(連合タイムライン)やLTL(ローカルタイムライン)には投稿が流れません。
+
+アカウントのサイレンス状態は、サーバーのモデレーターによって有効化/無効化されます。
diff --git a/src/docs/id-ID/features/theme.md b/src/docs/id-ID/features/theme.md
new file mode 100644
index 0000000000..b4b3f6d083
--- /dev/null
+++ b/src/docs/id-ID/features/theme.md
@@ -0,0 +1,68 @@
+# Tema
+
+テーマを設定して、Misskeyクライアントの見た目を変更できます。
+
+## テーマの設定
+設定 > テーマ
+
+## テーマを作成する
+テーマコードはJSON5で記述されたテーマオブジェクトです。 テーマは以下のようなオブジェクトです。
+``` js
+{
+    id: '17587283-dd92-4a2c-a22c-be0637c9e22a',
+
+    name: 'Danboard',
+    author: 'syuilo',
+
+    base: 'light',
+
+    props: {
+        accent: 'rgb(218, 141, 49)',
+        bg: 'rgb(218, 212, 190)',
+        fg: 'rgb(115, 108, 92)',
+        panel: 'rgb(236, 232, 220)',
+        renote: 'rgb(100, 152, 106)',
+        link: 'rgb(100, 152, 106)',
+        mention: '@accent',
+        hashtag: 'rgb(100, 152, 106)',
+        header: 'rgba(239, 227, 213, 0.75)',
+        navBg: 'rgb(216, 206, 182)',
+        inputBorder: 'rgba(0, 0, 0, 0.1)',
+    },
+}
+
+```
+
+* `id` ... テーマの一意なID。UUIDをおすすめします。
+* `name` ... テーマ名
+* `author` ... テーマの作者
+* `desc` ... テーマの説明(オプション)
+* `base` ... 明るいテーマか、暗いテーマか
+    * `light`にすると明るいテーマになり、`dark`にすると暗いテーマになります。
+    * テーマはここで設定されたベーステーマを継承します。
+* `props` ... テーマのスタイル定義。これから説明します。
+
+### テーマのスタイル定義
+`props`下にはテーマのスタイルを定義します。 キーがCSSの変数名になり、バリューで中身を指定します。 なお、この`props`オブジェクトはベーステーマから継承されます。 ベーステーマは、このテーマの`base`が`light`なら[_light.json5](https://github.com/misskey-dev/misskey/blob/develop/src/client/themes/_light.json5)で、`dark`なら[_dark.json5](https://github.com/misskey-dev/misskey/blob/develop/src/client/themes/_dark.json5)です。 つまり、このテーマ内の`props`に`panel`というキーが無くても、そこにはベーステーマの`panel`があると見なされます。
+
+#### バリューで使える構文
+* 16進数で表された色
+    * 例: `#00ff00`
+* `rgb(r, g, b)`形式で表された色
+    * 例: `rgb(0, 255, 0)`
+* `rgb(r, g, b, a)`形式で表された透明度を含む色
+    * 例: `rgba(0, 255, 0, 0.5)`
+* 他のキーの値の参照
+    * `@{キー名}`と書くと他のキーの値の参照になります。`{キー名}`は参照したいキーの名前に置き換えます。
+    * 例: `@panel`
+* 定数(後述)の参照
+    * `${定数名}`と書くと定数の参照になります。`{定数名}`は参照したい定数の名前に置き換えます。
+    * 例: `$main`
+* 関数(後述)
+    * `:{関数名}<{引数}<{色}`
+
+#### Konstanta
+「CSS変数として出力はしたくないが、他のCSS変数の値として使いまわしたい」値があるときは、定数を使うと便利です。 キー名を`$`で始めると、そのキーはCSS変数として出力されません。
+
+#### Fungsi
+wip
diff --git a/src/docs/id-ID/features/timeline.md b/src/docs/id-ID/features/timeline.md
new file mode 100644
index 0000000000..55977ab166
--- /dev/null
+++ b/src/docs/id-ID/features/timeline.md
@@ -0,0 +1,31 @@
+# Linimasa
+タイムラインは、[ノート](./note)が時系列で表示される機能です。 タイムラインには以下で示す種類があり、種類によって表示されるノートも異なります。 なお、タイムラインの種類によってはサーバーにより無効になっている場合があります。
+
+## Beranda
+自分のフォローしているユーザーの投稿が流れます。HTLと略されます。
+
+## Lokal
+全てのローカルユーザーの「ホーム」指定されていない投稿が流れます。LTLと略されます。
+
+## Sosial
+自分のフォローしているユーザーの投稿と、全てのローカルユーザーの「ホーム」指定されていない投稿が流れます。STLと略されます。
+
+## Global
+全てのローカルユーザーの「ホーム」指定されていない投稿と、サーバーに届いた全てのリモートユーザーの「ホーム」指定されていない投稿が流れます。GTLと略されます。
+
+## Membandingkan
+| ソース          |             |         | Linimasa |        |        |
+| ------------ | ----------- | ------- | -------- | ------ | ------ |
+| Pengguna     | Visibilitas | Beranda | Lokal    | Sosial | Global |
+| ローカル (フォロー)  | Terbitkan   | ✔       | ✔        | ✔      | ✔      |
+|              | Beranda     | ✔       |          | ✔      |        |
+|              | Pengikut    | ✔       | ✔        | ✔      | ✔      |
+| リモート (フォロー)  | Terbitkan   | ✔       |          | ✔      | ✔      |
+|              | Beranda     | ✔       |          | ✔      |        |
+|              | Pengikut    | ✔       |          | ✔      | ✔      |
+| ローカル (未フォロー) | Terbitkan   |         | ✔        | ✔      | ✔      |
+|              | Beranda     |         |          |        |        |
+|              | Pengikut    |         |          |        |        |
+| リモート (未フォロー) | Terbitkan   |         |          |        | ✔      |
+|              | Beranda     |         |          |        |        |
+|              | Pengikut    |         |          |        |        |
diff --git a/src/docs/id-ID/features/widgets.md b/src/docs/id-ID/features/widgets.md
new file mode 100644
index 0000000000..363254503b
--- /dev/null
+++ b/src/docs/id-ID/features/widgets.md
@@ -0,0 +1,7 @@
+# Widget
+ウィジェットは、MisskeyのUI上に設置できる小型の情報表示、操作が行えるパーツです。
+
+ウィジェットを編集するには、ウィジェット編集モードに切り替えます。切り替え方法はUIによって異なります。 ウィジェット編集モードでは、ウィジェットの追加、削除、並び替え、およびそれぞれのウィジェットの設定を行えます。
+
+## 利用可能なウィジェット一覧
+todo
diff --git a/src/docs/id-ID/general/apps.md b/src/docs/id-ID/general/apps.md
new file mode 100644
index 0000000000..1f4c85fe8f
--- /dev/null
+++ b/src/docs/id-ID/general/apps.md
@@ -0,0 +1,6 @@
+# サードパーティアプリのリスト
+## クライアント
+todo
+
+## 連携サービス
+todo
diff --git a/src/docs/id-ID/general/faq.md b/src/docs/id-ID/general/faq.md
new file mode 100644
index 0000000000..ecb664e32e
--- /dev/null
+++ b/src/docs/id-ID/general/faq.md
@@ -0,0 +1,22 @@
+# よくある質問
+ここでは利用上のよくある質問について掲載しています。 Misskeyのプロジェクト自体についてのよくある質問は[こちら](./misskey)に掲載されています。
+
+### iOS/Androidのアプリはありますか?
+公式にはそういったOSのネイティブアプリを開発していませんが、サードパーティ製のアプリがいくつかあります。 詳しくは[こちら](./apps)をご覧ください。
+
+ただ、サードパーティ製アプリはどうしても機能への対応が遅れてしまうため、とくに拘りがなければ公式のWebクライアントの利用をおすすめします。 なお、MisskeyのWebクライアントはPWAに対応しているので、ネイティブアプリのように動作させることも可能です。 詳しくは[こちら](todo)をご覧ください。
+
+## 他のサーバーのユーザーをフォローするときは?
+メニューから検索を選び、ユーザー名をホスト込みで入力します。例: `@syuilo@misskey.io`
+
+## Renoteを削除するには?
+Renoteの時刻表示の隣にある「...」を押し、「Renote解除」を選択します。 Renoteについては[こちら](../features/note)をご確認ください。
+
+## URLのプレビューを表示させたくない
+MFMには、そのURLのプレビューを無効にする構文があります。詳細は[MFMチートシート](/mfm-cheat-sheet)をご確認ください。
+
+## カスタム絵文字を追加したい
+運営者のみがカスタム絵文字を追加、編集、削除できます。それらを希望する場合は運営者に依頼してください。
+
+## Botを開発したい
+Misskey APIを利用してBotの開発が可能です。[こちら](../advanced/develop-bot)をご確認ください。
diff --git a/src/docs/id-ID/general/glossary.md b/src/docs/id-ID/general/glossary.md
new file mode 100644
index 0000000000..1f41236ad1
--- /dev/null
+++ b/src/docs/id-ID/general/glossary.md
@@ -0,0 +1,83 @@
+# 用語集
+Misskeyに関する用語集です。
+
+## AcitivityPub
+(読み: あくてぃびてぃぱぶ) 分散型を実現するために用いられるプロトコル(仕様)。このプロトコルに則ってサーバー同士通信を行うことで、連合が行われ、Fediverseを形成しています。
+
+## AiScript
+(読み: あいすくりぷと) Misskey上で使用できるプログラミング言語です。詳細は[こちら。](../advanced/aiscript)
+
+## API
+(読み: えーぴーあい) Misskeyのサーバーが公開している、プログラムからMisskeyを扱うためのインターフェース。詳細は[こちら。](../advanced/api)
+
+## Bot
+(読み: ぼっと) プログラムによって動作しているアカウント。
+
+## CW
+(読み: こんてんつわーにんぐ) Contents Warningの略。ノートの内容を、操作なしには表示しないようにできる機能。主に長大な内容を隠すためや、ネタバレ防止などに使われます。
+
+## Fediverse
+(読み: ふぇでぃばーす) Misskeyを含む様々な分散型ソフトウェアのサーバーで構成されたネットワーク。
+
+## GTL
+グローバルタイムライン(Global TimeLine)の略。タイムラインの詳細は[こちら。](../features/timeline)
+
+## HTL
+ホームタイムライン(Home TimeLine)の略。タイムラインの詳細は[こちら。](../features/timeline)
+
+## LTL
+ローカルタイムライン(Local TimeLine)の略。タイムラインの詳細は[こちら。](../features/timeline)
+
+## MFM
+(読み: えむえふえむ) Misskey Flavored Markdownの略で、Misskey上で使用できるマークアップ言語です。詳細は[こちら。](../features/mfm)
+
+## NSFW
+(読み: のっとせーふふぉーわーく) Not Safe For Workの略。画像を「閲覧注意」扱いにし、操作なしには表示しないようにすることができる機能。
+
+## Renote
+(読み: りのーと) 既にあるノートを引用、もしくはそのノートを新しいノートとして共有する行為、またそれによって作成されたノート。詳細は[こちら。](../features/note)
+
+## STL
+ソーシャルタイムライン(Social TimeLine)の略。タイムラインの詳細は[こちら。](../features/timeline)
+
+## 藍
+(読み: あい) Misskeyの看板娘(公式キャラクター)です。
+
+## アクティブユーザー
+インスタンスにアカウントを作っているユーザーのうち、現在も実際にサービスを利用しているユーザーのこと。
+
+## Instansi
+todo
+
+## コントロールパネル
+インスタンスの設定画面のこと。
+
+## Server
+todo
+
+## Bungkam
+ノートをパブリックな公開範囲で投稿できなくされている状態。モデレーターの判断でユーザーごとに設定されます。詳細は[こちら。](../features/silence)
+
+## Bekukan
+アカウントが使用不可に設定されている状態。
+
+## Drive
+Misskeyにアップロードしたファイルを管理する機能。詳細は[こちら。](../features/drive)
+
+## Catatan
+Misskeyに投稿される、文章、ファイル、アンケートなどを含めることができるコンテンツ。詳細は[こちら。](../features/note)
+
+## ミスキスト
+Misskeyを使う人のこと。
+
+## Moderator
+スパムの凍結およびサイレンスや不適切な投稿の削除など、コミュニティ運営に関する権限を持つユーザー。
+
+## Remote
+他サーバーのことを指します。リモートユーザーといったように接頭辞としても使われます。ローカルの逆です。
+
+## Federasi
+サーバー上で作成された情報が他のサーバーに伝わること。
+
+## Lokal
+自サーバーのことを指します。ローカルユーザー、ローカルタイムラインといったように接頭辞としても使われます。リモートの逆です。
diff --git a/src/docs/id-ID/general/links.md b/src/docs/id-ID/general/links.md
new file mode 100644
index 0000000000..d6b16856fb
--- /dev/null
+++ b/src/docs/id-ID/general/links.md
@@ -0,0 +1,5 @@
+# リンク集
+
+## ライブラリ
+- [misskey-dev/misskey.js](https://github.com/misskey-dev/misskey.js) - JavaScriptのMisskey SDK
+- [misskey-dev/mfm.js](https://github.com/misskey-dev/mfm.js) - JavaScriptのMFMパーサー実装
diff --git a/src/docs/id-ID/general/misskey.md b/src/docs/id-ID/general/misskey.md
new file mode 100644
index 0000000000..3239b0141d
--- /dev/null
+++ b/src/docs/id-ID/general/misskey.md
@@ -0,0 +1,87 @@
+# Tentang Misskey
+
+Misskeyはオープンソースの分散型マイクロブログプラットフォームプロジェクトです。 開発は日本でsyuiloによって2014年から開始されました。 ドライブ、リアクションなどの豊富な機能や、高いカスタマイズ性を備えたUIを持つことが特徴です。
+
+## 歴史
+開発当初は掲示板がメインのサービスでしたが、ユーザーが短文を投稿し、それを時系列で流れるタイムライン機能を追加したところ人気が高まり、徐々にそれがメインとして開発が進むようになりました。 当初は分散型ではありませんでしたが、2018年にAcitivityPubを実装し分散型になったことで、より多くの方に認知され利用されるサービスになり、現在に至ります。
+<div class="info">ℹ️ Misskeyという名前は、syuiloが当時聴いていたMay'nというアーティストの楽曲、Brain Diverの歌詞に由来します。</div>
+
+誰でも開発に参加することができ、現在でも活発に開発が続いています。
+
+## 分散型とは何か?
+
+<b>分散(distributed)型</b>とは、<b>非中央集権(decentralized)</b>とも呼ばれ、コミュニティが多数のサーバーに分散して存在し、それらが相互に<b>通信(連合、federation)</b>することでコンテンツ共有<b>ネットワーク(Fediverse)</b>を形成していることが特徴のサービスです。 単一のサーバーしか存在しない、もしくは複数存在しても互いに独立している場合は中央集権なサービスと言われ、例えばTwitterやFacebookなどほとんどのサービスがそれに該当します。 分散型のメリットは、自分に合った運営者やテーマのサーバーを選択できることです。自分でサーバーを作成することもできます。連合するおかげで、どのサーバーを選んでも、同じコミュニティにアクセスできます。
+
+## 常にオープンソース
+Misskeyはこれまでもこれからも、オープンソースであり続けます。オープンソースとは、簡単に言うと<b>ソフトウェアのソースコード(プログラム)が公開されている</b>ことです。ソースコードの修正や再配布が可能であることを定義に含めることもあります。 Misskeyのすべてのソースコードは[AGPL](https://github.com/misskey-dev/misskey/blob/develop/LICENSE)というオープンソースライセンスの下に[公開](https://github.com/misskey-dev)されていて、誰でも自由に閲覧、使用、修正、改変、再配布をすることができます。 オープンソースは、自分で好きなように変えたり、有害な処理が含まれていないことを確認することができたり、誰でも開発に参加できるなどの、様々なメリットがあります。 上述の分散型を実現するためにも、オープンソースであるということは必要不可欠な要素です。 再び引き合いに出しますが、TwitterやFacebookなどの利益を得ているほとんどのサービスはオープンソースではありません。
+
+<div class="info">ℹ️ 技術的に言うと、MisskeyのソースコードはGitで管理されていて、リポジトリは<a href="https://github.com/misskey-dev" target="_blank">GitHub上でホスティングされています。</a></div>
+
+## 開発に参加する、プロジェクトを支援する
+Misskeyを気に入っていただけたら、ぜひプロジェクトを支援してください。プロジェクトに貢献するには、以下で紹介するようにいろいろな方法があります。方法によっては開発のスキルは不要なので、誰でも気軽に参加し貢献することができます。いつでもお待ちしています。
+
+### 機能を追加したり、バグを修正する
+ソフトウェアエンジニアのスキルをお持ちの方であれば、ソースコードを編集する形でプロジェクトに貢献することができます。 貢献についてのガイドは[こちら](https://github.com/misskey-dev/misskey/blob/develop/CONTRIBUTING.md)です。
+
+### 議論に参加する
+新しい機能、または既存の機能について意見を述べたり、不具合を報告したりすることでも貢献できます。 そのようなディスカッションは[GitHub](https://github.com/misskey-dev)上か、[フォーラム](https://forum.misskey.io/)等で行われます。
+
+### テキストを翻訳する
+Misskeyは様々な言語に対応しています(i18n -internationalizationの略- と呼ばれます)。元の言語は基本的に日本語ですが、有志によって他の言語へと翻訳されています。 その翻訳作業に加わっていただくことでもMisskeyに貢献できます。 Misskeyは[Crowdinというサービスを使用して翻訳の管理を行っています。](https://crowdin.com/project/misskey)
+
+### 感想を投稿する
+不具合報告等だけではなく、Misskeyの良い点、楽しい点といったポジティブな意見もぜひ共有してください。開発の励みになり、それは間接的ですがプロジェクトへの貢献です。
+
+### ミスキストを増やす
+ミスキストとは、Misskeyを使用する人のことです。 知り合いに紹介するなどしてMisskeyを広めていただければ、ミスキストが増え開発のモチベーションが上がります。
+
+### 寄付をする
+Misskeyはビジネスではなく、利用は無料であるため、収益は皆様からの寄付のみです。(インスタンスによっては広告収入を得ているような場合もありますが、それは運営者の収入であり直接開発者への収入にはなりません) 寄付をしていただければ、今後も開発を続けることが可能になり、プロジェクトへの貢献になります。 寄付は基本的には[Patreon](https://www.patreon.com/syuilo)で受け付けています。 一定額寄付していただけると、Misskeyの[情報ページ](/about-misskey)に名前を記載することができます。
+
+また、サーバーの運営者も、基本的には収益を得ていません。サーバーの運営にはコストがかかるので、運営者の支援をすることもご検討ください。 開発には直接関係しませんが、サーバーがあってこそのプロジェクトなので、運営が維持されるというのは開発と同じくらい重要なことです。
+
+## クレジット
+Misskeyの開発者や、Misskeyに寄付をしてくださった方の一覧は[こちら](/about-misskey)で見ることができます。
+
+## よくある質問
+### プロジェクトは何を目指していますか?
+強いて言うと、漠然的になりますが広く使われる汎用的なプラットフォームになることを目指しています。 Misskeyは他のプロジェクトとは違い、何らかの思想(例えば、反中央集権)やビジョンに基づいて開発が行われているわけではなく、その点ではフラットです。 それが逆に、特定の方向性に縛られないフレキシブルさを生み出すことに繋がっていると感じています。
+<!-- TODO: ここにロードマップへのリンク -->
+
+### 企業によって開発されていますか?
+いいえ。Misskeyの開発は個人で行われており、商業的でもないため、特定の企業の関りはありません。 開発メンバーも基本的にはボランティアです。 また、開発に対し企業のスポンサーがつくこともありますが、その場合でもやはり開発は個人のコミュニティが主体です。
+
+### 誰が運営していますか?
+Misskeyは分散型なため、各サーバーにそれぞれ異なった運営者がいます。従って、特定の個人や企業によって、Misskeyの全てが運営されているわけではありません。 また、開発チームが運営を行うわけでもないため、運営に関する連絡は、お使いのサーバーの運営者に行ってください。 サーバーの運営者は、[このページ](/about)で確認することができます。 あなたがサーバーを作成すれば、あなたが運営者になります。
+
+### どのサーバーを選べばいいですか?
+[サーバー一覧が公開されています。](https://join.misskey.page/ja-JP/instances) サーバーによってコミュニティのテーマ(特定のこと、ものが好き 等)が決められている場合があるので、自分に合ったテーマのサーバーがあれば、そこを選ぶと良いかもしれません。 他にも、サーバーの規模、ユーザー層、国および言語、運営者が信頼できるかどうか、などの観点があります。 なお、Misskey公式のサーバーというものはありません。自身で新しくサーバーを作成するという選択肢もあります。
+
+基本的にどのサーバーを選んだとしても、他の全てのサーバーのユーザーと繋がることができます。
+
+### サーバーを建てるにはどうしたらいいですか?
+Misskeyサーバーの作成に興味を持っていただきありがとうございます。 2021年現在、Misskeyのホスティングサービスは存在しないため、サーバーの作成にはある程度の知識が必要です。 サーバーの作成方法については[こちら](todo)をご覧ください。
+
+### どのような技術を使用していますか?
+Misskeyは開発が進むにつれ使用する技術も大きく変わってきました。開発当初はMySQL + PHP + jQueryといった構成でしたが、現在は以下のようになっています。
+- サーバーサイド: Node.js
+- データベース: PostgreSQL、Redis
+- UIフレームワーク: Vue.js
+- プログラミング言語: TypeScript
+
+また、MFMやAiScriptなどの、Misskeyから派生して独自の技術も開発しています。
+
+### Mastodonのフォークですか?
+いいえ。MisskeyはMastodonやその他のプロジェクトとは全く別のプロジェクトです。 開発に関しても、Misskeyの方が昔から開発されています。ただし、分散型になったのはMastodonの登場より後です。 同じAcitivityPubという分散のためのプロトコルを実装しているという点以外、両者に特に関りがあるわけでもありません。
+
+### iOS/Androidのアプリはありますか?
+公式にはそういったOSのネイティブアプリを開発していませんが、サードパーティ製のアプリがいくつかあります。 詳しくは[こちら](./apps)をご覧ください。
+
+ただ、サードパーティ製アプリはどうしても機能への対応が遅れてしまうため、とくに拘りがなければ公式のWebクライアントの利用をおすすめします。 なお、MisskeyのWebクライアントはPWAに対応しているので、ネイティブアプリのように動作させることも可能です。 詳しくは[こちら](todo)をご覧ください。
+
+### Misskeyのロゴ、アイコンはどこで入手できますか?
+(準備中)
+
+### 時折目にする猫耳の可愛い女の子は?
+Misskeyの守り神、藍ちゃんです。アイチャンカワイイヤッター!
+<div class="info">ℹ️ 藍ちゃんについては<a href="https://xn--931a.moe/" target="_blank">こちら</a>です。</div>
diff --git a/src/docs/id-ID/general/report-issue.md b/src/docs/id-ID/general/report-issue.md
new file mode 100644
index 0000000000..63527e32af
--- /dev/null
+++ b/src/docs/id-ID/general/report-issue.md
@@ -0,0 +1,8 @@
+# 不具合の報告
+不具合と思われる状況に遭遇したときは、まず[トラブルシューティング](./troubleshooting)をご一読ください。 それでも問題が解決しないときは、以下の情報を含めて[フォーラム](https://forum.misskey.io/)に投稿してください。 投稿することで、解決策が見つかったり、不具合と判断されれば開発チームによって修正が行われます。
+
+## 含める情報
+- Misskeyのバージョン([情報ページ](/about)で確認できます)
+- お使いのブラウザの種類とバージョン
+- お使いのOSの種類とバージョン
+- 問題の再現手順
diff --git a/src/docs/id-ID/general/troubleshooting.md b/src/docs/id-ID/general/troubleshooting.md
new file mode 100644
index 0000000000..4a35091299
--- /dev/null
+++ b/src/docs/id-ID/general/troubleshooting.md
@@ -0,0 +1,36 @@
+# トラブルシューティング
+<div class="info">ℹ️ <a href="./faq">よくある質問</a>も合わせてお役立てください。</div>
+
+問題が発生したときは、まずこちらをご確認ください。 該当する項目が無い、もしくは手順を試しても効果がない場合は、サーバーの管理者に連絡するか[不具合を報告](./report-issue)してください。
+
+## クライアントが起動しない
+ほとんどの場合、お使いのブラウザまたはOSのバージョンが古いことが原因です。 ブラウザおよびOSのバージョンを最新のものに更新してから、再度試してみてください。
+
+これは稀ですが、それでも起動しない場合は、キャッシュが原因の場合があります。ブラウザのキャッシュをクリアして、再度試してみてください。
+
+## ページが読み込めない
+クライアントが起動するもののページが読み込めないというエラーが出る場合は、ネットワークに問題がないか確認してください。また、サーバーがダウンしていないか確認してください。
+
+これは稀ですが、キャッシュが原因の場合があります。ブラウザのキャッシュをクリアして、再度試してみてください。
+
+まだ問題がある場合は、サーバーの問題と思われるのでサーバーの管理者に連絡してください。
+
+## クライアントの動作が遅い
+以下を試してみてください:
+
+- クライアント設定で「UIのアニメーションを減らす」を有効にする
+- クライアント設定で「モーダルにぼかし効果を使用」を無効にする
+- お使いのブラウザの設定でハードウェアアクセラレーションを有効にする
+- お使いのデバイスのスペックを上げる
+
+## 通知やアンテナ等の点滅が消えない
+点滅は、未読のコンテンツがあることを示しています。通常点滅が消えない場合は、コンテンツを遡ると未読なコンテンツが残っています。 すべて既読にしたと思われるのに、それでもなお点滅が続く場合(おそらく不具合と思われます)は設定から強制的にすべて既読扱いにすることができます。
+
+## Renoteができない
+フォロワー限定のノートはRenoteすることはできません。
+
+## UI上で特定の要素が表示されない
+広告ブロッカーを使用しているとそのような不具合が発生することがあります。Misskeyではオフにしてご利用ください。
+
+## UI上で未翻訳の部分がある
+ほとんどの場合、単に翻訳が間に合っていないだけで、不具合ではありません。翻訳が終わるまでお待ちください。 [翻訳に参加](./misskey)していただくことも可能です。
diff --git a/src/docs/it-IT/admin/disable-timelines.md b/src/docs/it-IT/admin/disable-timelines.md
new file mode 100644
index 0000000000..b081e35ab0
--- /dev/null
+++ b/src/docs/it-IT/admin/disable-timelines.md
@@ -0,0 +1,8 @@
+# LTL/STL/GTLの無効化
+Misskeyでは、LTL/STL/GTLをそれぞれ無効化することができます。有効/無効を切り替えるには、インスタンスコントロールパネルで設定します。
+
+LTLやSTLは、そのインスタンス全員の投稿が見れるため、新規のユーザーにとってはユーザーを探す必要がなくなり、興味のあるユーザーを見つけやすいという利点があります。 しかし同時に、フォロー機能が活用されなくなったり、不適切な投稿が目につきやすくなったり、チャットのようになることで内輪感が生じて逆に新規ユーザーが参加しにくくなるといったデメリットも持ち合わせています。 サーバーによってメリット/デメリットどちらが優勢かは異なるので、オプションとして無効にできるようになっています。 もしデメリットの方が上回っていると感じたら、それらのタイムラインを無効化することも検討してください。
+
+<div class="warn">⚠️ 無効化を行うと、ユーザーが困惑し、短期的に見て利用者が減る可能性があります。そのため、無効化の際は影響を慎重に検討し、事前に説明してフォローを整える期間を一定程度設けることを推奨します。</div>
+
+なお、管理者/モデレーターは、これらのタイムラインの無効化状態は適用されず、引き続き利用することが可能です。
diff --git a/src/docs/it-IT/admin/faq.md b/src/docs/it-IT/admin/faq.md
new file mode 100644
index 0000000000..317b4e0655
--- /dev/null
+++ b/src/docs/it-IT/admin/faq.md
@@ -0,0 +1,5 @@
+# よくある質問
+ここでは、サーバー管理者向けのよくある質問を掲載しています。
+
+## デフォルトテーマを設定したい
+現在、デフォルトテーマ設定機能は実装されていません。
diff --git a/src/docs/it-IT/advanced/aiscript.md b/src/docs/it-IT/advanced/aiscript.md
new file mode 100644
index 0000000000..604d17daa8
--- /dev/null
+++ b/src/docs/it-IT/advanced/aiscript.md
@@ -0,0 +1,7 @@
+# AiScript
+AiScriptは、Misskeyで使用できるスクリプト言語です。
+
+<div class="info">ℹ️ AiScript実装はMisskeyとは別リポジトリで、<a href="https://github.com/syuilo/aiscript" target="_blank">オープンソースで公開されています。</a></div>
+
+## 使い方
+AiScriptの構文や組み込み関数などのドキュメントは、[こちら](https://github.com/syuilo/aiscript/tree/master/docs)で公開されています。
diff --git a/src/docs/it-IT/advanced/api.md b/src/docs/it-IT/advanced/api.md
new file mode 100644
index 0000000000..76019b6145
--- /dev/null
+++ b/src/docs/it-IT/advanced/api.md
@@ -0,0 +1,58 @@
+# Misskey API
+
+MisskeyAPIを使ってMisskeyクライアント、Misskey連携Webサービス、Bot等(以下「アプリケーション」と呼びます)を開発できます。 ストリーミングAPIもあるので、リアルタイム性のあるアプリケーションを作ることも可能です。
+
+APIを使い始めるには、まずアクセストークンを取得する必要があります。 このドキュメントでは、アクセストークンを取得する手順を説明した後、基本的なAPIの使い方を説明します。
+
+## アクセストークンの取得
+基本的に、APIはリクエストにはアクセストークンが必要となります。 APIにリクエストするのが自分自身なのか、不特定の利用者に使ってもらうアプリケーションなのかによって取得手順は異なります。
+
+* 前者の場合: [「自分自身のアクセストークンを手動発行する」](#自分自身のアクセストークンを手動発行する)に進む
+* 後者の場合: [「アプリケーション利用者にアクセストークンの発行をリクエストする」](#アプリケーション利用者にアクセストークンの発行をリクエストする)に進む
+
+### 自分自身のアクセストークンを手動発行する
+「設定 > API」で、自分のアクセストークンを発行できます。
+
+[「APIの使い方」へ進む](#APIの使い方)
+
+### アプリケーション利用者にアクセストークンの発行をリクエストする
+アプリケーション利用者のアクセストークンを取得するには、以下の手順で発行をリクエストします。
+
+#### Step 1
+
+UUIDを生成する。以後これをセッションIDと呼びます。
+
+> このセッションIDは毎回生成し、使いまわさないようにしてください。
+
+#### Step 2
+
+`{_URL_}/miauth/{session}`をユーザーのブラウザで表示させる。`{session}`の部分は、セッションIDに置き換えてください。
+> 例: `{_URL_}/miauth/c1f6d42b-468b-4fd2-8274-e58abdedef6f`
+
+表示する際、URLにクエリパラメータとしていくつかのオプションを設定できます:
+* `name` ... アプリケーション名
+    * > 例: `MissDeck`
+* `icon` ... アプリケーションのアイコン画像URL
+    * > 例: `https://missdeck.example.com/icon.png`
+* `callback` ... 認証が終わった後にリダイレクトするURL
+    * > 例: `https://missdeck.example.com/callback`
+    * リダイレクト時には、`session`というクエリパラメータでセッションIDが付きます
+* `permission` ... アプリケーションが要求する権限
+    * > 例: `write:notes,write:following,read:drive`
+    * 要求する権限を`,`で区切って列挙します
+    * どのような権限があるかは[APIリファレンス](/api-doc)で確認できます
+
+#### Step 3
+ユーザーが発行を許可した後、`{_URL_}/api/miauth/{session}/check`にPOSTリクエストすると、レスポンスとしてアクセストークンを含むJSONが返ります。
+
+レスポンスに含まれるプロパティ:
+* `token` ... ユーザーのアクセストークン
+* `user` ... ユーザーの情報
+
+[「APIの使い方」へ進む](#APIの使い方)
+
+## APIの使い方
+**APIはすべてPOSTで、リクエスト/レスポンスともにJSON形式です。RESTではありません。** アクセストークンは、`i`というパラメータ名でリクエストに含めます。
+
+* [APIリファレンス](/api-doc)
+* [ストリーミングAPI](./stream)
diff --git a/src/docs/it-IT/advanced/create-plugin.md b/src/docs/it-IT/advanced/create-plugin.md
new file mode 100644
index 0000000000..a263408fca
--- /dev/null
+++ b/src/docs/it-IT/advanced/create-plugin.md
@@ -0,0 +1,74 @@
+# プラグインの作成
+Misskey Webクライアントのプラグイン機能を使うと、クライアントを拡張し、様々な機能を追加できます。 ここではプラグインの作成にあたってのメタデータ定義や、AiScript APIリファレンスを掲載します。
+
+## Metadato
+プラグインは、AiScriptのメタデータ埋め込み機能を使って、デフォルトとしてプラグインのメタデータを定義する必要があります。 メタデータは次のプロパティを含むオブジェクトです。
+
+### name
+プラグイン名
+
+### author
+プラグイン作者
+
+### version
+プラグインバージョン。数値を指定してください。
+
+### description
+プラグインの説明
+
+### permissions
+プラグインが要求する権限。MisskeyAPIにリクエストする際に用いられます。
+
+### config
+プラグインの設定情報を表すオブジェクト。 キーに設定名、値に以下のプロパティを含めます。
+
+#### type
+設定値の種類を表す文字列。以下から選択します。 string number boolean
+
+#### label
+ユーザーに表示する設定名
+
+#### description
+設定の説明
+
+#### default
+設定のデフォルト値
+
+## APIリファレンス
+AiScript標準で組み込まれているAPIは掲載しません。
+
+### Mk:dialog(title text type)
+ダイアログを表示します。typeには以下の値が設定できます。 info success warn error question 省略すると info になります。
+
+### Mk:confirm(title text type)
+確認ダイアログを表示します。typeには以下の値が設定できます。 info success warn error question 省略すると question になります。 ユーザーが"OK"を選択した場合は true を、"キャンセル"を選択した場合は false が返ります。
+
+### Mk:api(endpoint params)
+Misskey APIにリクエストします。第一引数にエンドポイント名、第二引数にパラメータオブジェクトを渡します。
+
+### Mk:save(key value)
+任意の値に任意の名前を付けて永続化します。永続化した値は、AiScriptコンテキストが終了しても残り、Mk:loadで読み取ることができます。
+
+### Mk:load(key)
+Mk:saveで永続化した指定の名前の値を読み取ります。
+
+### Plugin:register_post_form_action(title fn)
+投稿フォームにアクションを追加します。第一引数にアクション名、第二引数にアクションが選択された際のコールバック関数を渡します。 コールバック関数には、第一引数に投稿フォームオブジェクトが渡されます。
+
+### Plugin:register_note_action(title fn)
+ノートメニューに項目を追加します。第一引数に項目名、第二引数に項目が選択された際のコールバック関数を渡します。 コールバック関数には、第一引数に対象のノートオブジェクトが渡されます。
+
+### Plugin:register_user_action(title fn)
+ユーザーメニューに項目を追加します。第一引数に項目名、第二引数に項目が選択された際のコールバック関数を渡します。 コールバック関数には、第一引数に対象のユーザーオブジェクトが渡されます。
+
+### Plugin:register_note_view_interruptor(fn)
+UIに表示されるノート情報を書き換えます。 コールバック関数には、第一引数に対象のノートオブジェクトが渡されます。 コールバック関数の返り値でノートが書き換えられます。
+
+### Plugin:register_note_post_interruptor(fn)
+ノート投稿時にノート情報を書き換えます。 コールバック関数には、第一引数に対象のノートオブジェクトが渡されます。 コールバック関数の返り値でノートが書き換えられます。
+
+### Plugin:open_url(url)
+第一引数に渡されたURLをブラウザの新しいタブで開きます。
+
+### Plugin:config
+プラグインの設定が格納されるオブジェクト。プラグイン定義のconfigで設定したキーで値が入ります。
diff --git a/src/docs/it-IT/advanced/develop-bot.md b/src/docs/it-IT/advanced/develop-bot.md
new file mode 100644
index 0000000000..7f825e9bc4
--- /dev/null
+++ b/src/docs/it-IT/advanced/develop-bot.md
@@ -0,0 +1,6 @@
+# Botの作成
+[Misskey API](./api)を利用してBotの開発が可能です。 また、いくつかのBot実装が公開されているため、ぜひ参考にしてください。
+
+- [syuilo/ai](https://github.com/syuilo/ai) ... Node.js上で動く、TypeScript製Bot実装
+
+Botを作成したときは、プロフィール設定からBotフラグをオンにしておくことを強くおすすめします。
diff --git a/src/docs/it-IT/advanced/reversi-bot.md b/src/docs/it-IT/advanced/reversi-bot.md
new file mode 100644
index 0000000000..00d4a18a8e
--- /dev/null
+++ b/src/docs/it-IT/advanced/reversi-bot.md
@@ -0,0 +1,160 @@
+# MisskeyリバーシBotの開発
+Misskeyのリバーシ機能に対応したBotの開発方法をここに記します。
+
+1. `games/reversi`ストリームに以下のパラメータを付けて接続する:
+    * `i`: botアカウントのAPIキー
+
+2. 対局への招待が来たら、ストリームから`invited`イベントが流れてくる
+    * イベントの中身に、`parent`という名前で対局へ誘ってきたユーザーの情報が含まれている
+
+3. `games/reversi/match`へ、`user_id`として`parent`の`id`が含まれたリクエストを送信する
+
+4. 上手くいくとゲーム情報が返ってくるので、`games/reversi-game`ストリームへ、以下のパラメータを付けて接続する:
+    * `i`: botアカウントのAPIキー
+    * `game`: `game`の`id`
+
+5. この間、相手がゲームの設定を変更するとその都度`update-settings`イベントが流れてくるので、必要であれば何かしらの処理を行う
+
+6. 設定に満足したら、`{ type: 'accept' }`メッセージをストリームに送信する
+
+7. ゲームが開始すると、`started`イベントが流れてくる
+    * イベントの中身にはゲーム情報が含まれている
+
+8. 石を打つには、ストリームに`{ type: 'set', pos: <位置> }`を送信する(位置の計算方法は後述)
+
+9. 相手または自分が石を打つと、ストリームから`set`イベントが流れてくる
+    * `color`として石の色が含まれている
+    * `pos`として位置情報が含まれている
+
+## 位置の計算法
+8x8のマップを考える場合、各マスの位置(インデックスと呼びます)は次のようになっています:
+```
++--+--+--+--+--+--+--+--+
+| 0| 1| 2| 3| 4| 5| 6| 7|
++--+--+--+--+--+--+--+--+
+| 8| 9|10|11|12|13|14|15|
++--+--+--+--+--+--+--+--+
+|16|17|18|19|20|21|22|23|
+...
+```
+
+### X,Y座標 から インデックス に変換する
+```
+pos = x + (y * mapWidth)
+```
+`mapWidth`は、ゲーム情報の`map`から、次のようにして計算できます:
+```
+mapWidth = map[0].length
+```
+
+### インデックス から X,Y座標 に変換する
+```
+x = pos % mapWidth
+y = Math.floor(pos / mapWidth)
+```
+
+## マップ情報
+マップ情報は、ゲーム情報の`map`に入っています。 文字列の配列になっており、ひとつひとつの文字がマス情報を表しています。 それをもとにマップのデザインを知る事が出来ます:
+* `(スペース)` ... マス無し
+* `-` ... マス
+* `b` ... 初期配置される黒石
+* `w` ... 初期配置される白石
+
+例えば、4*4の次のような単純なマップがあるとします:
+```text
++---+---+---+---+
+|   |   |   |   |
++---+---+---+---+
+|   | ○ | ● |   |
++---+---+---+---+
+|   | ● | ○ |   |
++---+---+---+---+
+|   |   |   |   |
++---+---+---+---+
+```
+
+この場合、マップデータはこのようになります:
+```javascript
+['----', '-wb-', '-bw-', '----']
+```
+
+## ユーザーにフォームを提示して対話可能Botを作成する
+ユーザーとのコミュニケーションを行うため、ゲームの設定画面でユーザーにフォームを提示することができます。 例えば、Botの強さをユーザーが設定できるようにする、といったシナリオが考えられます。
+
+フォームを提示するには、`reversi-game`ストリームに次のメッセージを送信します:
+```javascript
+{
+  type: 'init-form',
+  body: [フォームコントロールの配列]
+}
+```
+
+フォームコントロールの配列については今から説明します。 フォームコントロールは、次のようなオブジェクトです:
+```javascript
+{
+  id: 'switch1',
+  type: 'switch',
+  label: 'Enable hoge',
+  value: false
+}
+```
+`id` ... コントロールのID。 `type` ... コントロールの種類。後述します。 `label` ... コントロールと一緒に表記するテキスト。 `value` ... コントロールのデフォルト値。
+
+### フォームの操作を受け取る
+ユーザーがフォームを操作すると、ストリームから`update-form`イベントが流れてきます。 イベントの中身には、コントロールのIDと、ユーザーが設定した値が含まれています。 例えば、上で示したスイッチをユーザーがオンにしたとすると、次のイベントが流れてきます:
+```javascript
+{
+  id: 'switch1',
+  value: true
+}
+```
+
+### フォームコントロールの種類
+#### Interruttore
+type: `switch` スイッチを表示します。何かの機能をオン/オフさせたい場合に有用です。
+
+##### プロパティ
+`label` ... スイッチに表記するテキスト。
+
+#### ラジオボタン
+type: `radio` ラジオボタンを表示します。選択肢を提示するのに有用です。例えば、Botの強さを設定させるなどです。
+
+##### プロパティ
+`items` ... ラジオボタンの選択肢。例:
+```javascript
+items: [{
+  label: 'å¼±',
+  value: 1
+}, {
+  label: '中',
+  value: 2
+}, {
+  label: 'å¼·',
+  value: 3
+}]
+```
+
+#### スライダー
+type: `slider` スライダーを表示します。
+
+##### プロパティ
+`min` ... スライダーの下限。 `max` ... スライダーの上限。 `step` ... 入力欄で刻むステップ値。
+
+#### テキストボックス
+type: `textbox` テキストボックスを表示します。ユーザーになにか入力させる一般的な用途に利用できます。
+
+## ユーザーにメッセージを表示する
+設定画面でユーザーと対話する、フォーム以外のもうひとつの方法がこれです。ユーザーになにかメッセージを表示することができます。 例えば、ユーザーがBotの対応していないモードやマップを選択したとき、警告を表示するなどです。 メッセージを表示するには、次のメッセージをストリームに送信します:
+```javascript
+{
+  type: 'message',
+  body: {
+    text: 'メッセージ内容',
+    type: 'メッセージの種類'
+  }
+}
+```
+メッセージの種類: `success`, `info`, `warning`, `error`。
+
+## 投了する
+投了をするには、<a href="./api/endpoints/games/reversi/games/surrender">このエンドポイント</a>にリクエストします。
diff --git a/src/docs/it-IT/advanced/stream.md b/src/docs/it-IT/advanced/stream.md
new file mode 100644
index 0000000000..025eb41dec
--- /dev/null
+++ b/src/docs/it-IT/advanced/stream.md
@@ -0,0 +1,350 @@
+# ストリーミングAPI
+
+ストリーミングAPIを使うと、リアルタイムで様々な情報(例えばタイムラインに新しい投稿が流れてきた、メッセージが届いた、フォローされた、など)を受け取ったり、様々な操作を行ったりすることができます。
+
+## ストリームに接続する
+
+ストリーミングAPIを利用するには、まずMisskeyサーバーに**websocket**接続する必要があります。
+
+以下のURLに、`i`というパラメータ名で認証情報を含めて、websocket接続してください。例:
+```
+%WS_URL%/streaming?i=xxxxxxxxxxxxxxx
+```
+
+認証情報は、自分のAPIキーや、アプリケーションからストリームに接続する際はユーザーのアクセストークンのことを指します。
+
+<div class="info">ℹ️ 認証情報の取得については、<a href="./api">こちらのドキュメント</a>をご確認ください。</div>
+
+---
+
+認証情報は省略することもできますが、その場合非ログインでの利用ということになり、受信できる情報や可能な操作は限られます。例:
+
+```
+%WS_URL%/streaming
+```
+
+---
+
+ストリームに接続すると、後述するAPI操作や、投稿の購読を行ったりすることができます。 しかしまだこの段階では、例えばタイムラインへの新しい投稿を受信したりすることはできません。 それを行うには、ストリーム上で、後述する**チャンネル**に接続する必要があります。
+
+**ストリームでのやり取りはすべてJSONです。**
+
+## Canale
+MisskeyのストリーミングAPIにはチャンネルという概念があります。これは、送受信する情報を分離するための仕組みです。 Misskeyのストリームに接続しただけでは、まだリアルタイムでタイムラインの投稿を受信したりはできません。 ストリーム上でチャンネルに接続することで、様々な情報を受け取ったり情報を送信したりすることができるようになります。
+
+ひとつのストリーム上で、同時に複数のチャンネルに接続することができます。
+
+### チャンネルに接続する
+チャンネルに接続するには、次のようなデータをJSONでストリームに送信します:
+
+```json
+{
+    type: 'connect',
+    body: {
+        channel: 'xxxxxxxx',
+        id: 'foobar',
+        params: {
+            ...
+        }
+    }
+}
+```
+
+ここで、
+* `channel`には接続したいチャンネル名を設定します。チャンネルの種類については後述します。
+* `id`にはそのチャンネルとやり取りするための任意のIDを設定します。ストリームでは様々なメッセージが流れるので、そのメッセージがどのチャンネルからのものなのか識別する必要があるからです。このIDは、UUIDや、乱数のようなもので構いません。
+* `params`はチャンネルに接続する際のパラメータです。チャンネルによって接続時に必要とされるパラメータは異なります。パラメータ不要のチャンネルに接続する際は、このプロパティは省略可能です。
+
+<div class="info">ℹ️ IDはチャンネルごとではなく「チャンネルの接続ごと」です。なぜなら、同じチャンネルに異なるパラメータで複数接続するケースもあるからです。</div>
+
+### チャンネルからのメッセージを受け取る
+例えばタイムラインのチャンネルなら、新しい投稿があった時にメッセージを発します。そのメッセージを受け取ることで、タイムラインに新しい投稿がされたことをリアルタイムで知ることができます。
+
+チャンネルがメッセージを発すると、次のようなデータがJSONでストリームに流れてきます:
+```json
+{
+    type: 'channel',
+    body: {
+        id: 'foobar',
+        type: 'something',
+        body: {
+            some: 'thing'
+        }
+    }
+}
+```
+
+ここで、
+* `id`には前述したそのチャンネルに接続する際に設定したIDが設定されています。これで、このメッセージがどのチャンネルからのものなのか知ることができます。
+* `type`にはメッセージの種類が設定されます。チャンネルによって、どのような種類のメッセージが流れてくるかは異なります。
+* `body`にはメッセージの内容が設定されます。チャンネルによって、どのような内容のメッセージが流れてくるかは異なります。
+
+### チャンネルに向けてメッセージを送信する
+チャンネルによっては、メッセージを受け取るだけでなく、こちらから何かメッセージを送信し、何らかの操作を行える場合があります。
+
+チャンネルにメッセージを送信するには、次のようなデータをJSONでストリームに送信します:
+```json
+{
+    type: 'channel',
+    body: {
+        id: 'foobar',
+        type: 'something',
+        body: {
+            some: 'thing'
+        }
+    }
+}
+```
+
+ここで、
+* `id`には前述したそのチャンネルに接続する際に設定したIDを設定します。これで、このメッセージがどのチャンネルに向けたものなのか識別させることができます。
+* `type`にはメッセージの種類を設定します。チャンネルによって、どのような種類のメッセージを受け付けるかは異なります。
+* `body`にはメッセージの内容を設定します。チャンネルによって、どのような内容のメッセージを受け付けるかは異なります。
+
+### チャンネルから切断する
+チャンネルから切断するには、次のようなデータをJSONでストリームに送信します:
+
+```json
+{
+    type: 'disconnect',
+    body: {
+        id: 'foobar'
+    }
+}
+```
+
+ここで、
+* `id`には前述したそのチャンネルに接続する際に設定したIDを設定します。
+
+## ストリームを経由してAPIリクエストする
+
+ストリームを経由してAPIリクエストすると、HTTPリクエストを発生させずにAPIを利用できます。そのため、コードを簡潔にできたり、パフォーマンスの向上を見込めるかもしれません。
+
+ストリームを経由してAPIリクエストするには、次のようなデータをJSONでストリームに送信します:
+```json
+{
+    type: 'api',
+    body: {
+        id: 'xxxxxxxxxxxxxxxx',
+        endpoint: 'notes/create',
+        data: {
+            text: 'yee haw!'
+        }
+    }
+}
+```
+
+ここで、
+* `id`には、APIのレスポンスを識別するための、APIリクエストごとの一意なIDを設定する必要があります。UUIDや、簡単な乱数のようなもので構いません。
+* `endpoint`には、あなたがリクエストしたいAPIのエンドポイントを指定します。
+* `data`には、エンドポイントのパラメータを含めます。
+
+<div class="info">ℹ️ APIのエンドポイントやパラメータについてはAPIリファレンスをご確認ください。</div>
+
+### レスポンスの受信
+
+APIへリクエストすると、レスポンスがストリームから次のような形式で流れてきます。
+
+```json
+{
+    type: 'api:xxxxxxxxxxxxxxxx',
+    body: {
+        ...
+    }
+}
+```
+
+ここで、
+* `xxxxxxxxxxxxxxxx`の部分には、リクエストの際に設定された`id`が含まれています。これにより、どのリクエストに対するレスポンスなのか判別することができます。
+* `body`には、レスポンスが含まれています。
+
+## 投稿のキャプチャ
+
+Misskeyは投稿のキャプチャと呼ばれる仕組みを提供しています。これは、指定した投稿のイベントをストリームで受け取る機能です。
+
+例えばタイムラインを取得してユーザーに表示したとします。ここで誰かがそのタイムラインに含まれるどれかの投稿に対してリアクションしたとします。
+
+しかし、クライアントからするとある投稿にリアクションが付いたことなどは知る由がないため、リアルタイムでリアクションをタイムライン上の投稿に反映して表示するといったことができません。
+
+この問題を解決するために、Misskeyは投稿のキャプチャ機構を用意しています。投稿をキャプチャすると、その投稿に関するイベントを受け取ることができるため、リアルタイムでリアクションを反映させたりすることが可能になります。
+
+### 投稿をキャプチャする
+
+投稿をキャプチャするには、ストリームに次のようなメッセージを送信します:
+
+```json
+{
+    type: 'subNote',
+    body: {
+        id: 'xxxxxxxxxxxxxxxx'
+    }
+}
+```
+
+ここで、
+* `id`にキャプチャしたい投稿の`id`を設定します。
+
+このメッセージを送信すると、Misskeyにキャプチャを要請したことになり、以後、その投稿に関するイベントが流れてくるようになります。
+
+例えば投稿にリアクションが付いたとすると、次のようなメッセージが流れてきます:
+
+```json
+{
+    type: 'noteUpdated',
+    body: {
+        id: 'xxxxxxxxxxxxxxxx',
+        type: 'reacted',
+        body: {
+            reaction: 'like',
+            userId: 'yyyyyyyyyyyyyyyy'
+        }
+    }
+}
+```
+
+ここで、
+* `body`内の`id`に、イベントを発生させた投稿のIDが設定されます。
+* `body`内の`type`に、イベントの種類が設定されます。
+* `body`内の`body`に、イベントの詳細が設定されます。
+
+#### イベントの種類
+
+##### `reacted`
+その投稿にリアクションがされた時に発生します。
+
+* `reaction`に、リアクションの種類が設定されます。
+* `userId`に、リアクションを行ったユーザーのIDが設定されます。
+
+例:
+```json
+{
+    type: 'noteUpdated',
+    body: {
+        id: 'xxxxxxxxxxxxxxxx',
+        type: 'reacted',
+        body: {
+            reaction: 'like',
+            userId: 'yyyyyyyyyyyyyyyy'
+        }
+    }
+}
+```
+
+##### `deleted`
+その投稿が削除された時に発生します。
+
+* `deletedAt`に、削除日時が設定されます。
+
+例:
+```json
+{
+    type: 'noteUpdated',
+    body: {
+        id: 'xxxxxxxxxxxxxxxx',
+        type: 'deleted',
+        body: {
+            deletedAt: '2018-10-22T02:17:09.703Z'
+        }
+    }
+}
+```
+
+##### `pollVoted`
+その投稿に添付されたアンケートに投票された時に発生します。
+
+* `choice`に、選択肢IDが設定されます。
+* `userId`に、投票を行ったユーザーのIDが設定されます。
+
+例:
+```json
+{
+    type: 'noteUpdated',
+    body: {
+        id: 'xxxxxxxxxxxxxxxx',
+        type: 'pollVoted',
+        body: {
+            choice: 2,
+            userId: 'yyyyyyyyyyyyyyyy'
+        }
+    }
+}
+```
+
+### 投稿のキャプチャを解除する
+
+その投稿がもう画面に表示されなくなったりして、その投稿に関するイベントをもう受け取る必要がなくなったときは、キャプチャの解除を申請してください。
+
+次のメッセージを送信します:
+
+```json
+{
+    type: 'unsubNote',
+    body: {
+        id: 'xxxxxxxxxxxxxxxx'
+    }
+}
+```
+
+ここで、
+* `id`にキャプチャを解除したい投稿の`id`を設定します。
+
+このメッセージを送信すると、以後、その投稿に関するイベントは流れてこないようになります。
+
+# チャンネル一覧
+## `main`
+アカウントに関する基本的な情報が流れてきます。このチャンネルにパラメータはありません。
+
+### 流れてくるイベント一覧
+
+#### `renote`
+自分の投稿がRenoteされた時に発生するイベントです。自分自身の投稿をRenoteしたときは発生しません。
+
+#### `mention`
+誰かからメンションされたときに発生するイベントです。
+
+#### `readAllNotifications`
+自分宛ての通知がすべて既読になったことを表すイベントです。このイベントを利用して、「通知があることを示すアイコン」のようなものをオフにしたりする等のケースが想定されます。
+
+#### `meUpdated`
+自分の情報が更新されたことを表すイベントです。
+
+#### `follow`
+自分が誰かをフォローしたときに発生するイベントです。
+
+#### `unfollow`
+自分が誰かのフォローを解除したときに発生するイベントです。
+
+#### `followed`
+自分が誰かにフォローされたときに発生するイベントです。
+
+## `homeTimeline`
+ホームタイムラインの投稿情報が流れてきます。このチャンネルにパラメータはありません。
+
+### 流れてくるイベント一覧
+
+#### `note`
+タイムラインに新しい投稿が流れてきたときに発生するイベントです。
+
+## `localTimeline`
+ローカルタイムラインの投稿情報が流れてきます。このチャンネルにパラメータはありません。
+
+### 流れてくるイベント一覧
+
+#### `note`
+ローカルタイムラインに新しい投稿が流れてきたときに発生するイベントです。
+
+## `hybridTimeline`
+ソーシャルタイムラインの投稿情報が流れてきます。このチャンネルにパラメータはありません。
+
+### 流れてくるイベント一覧
+
+#### `note`
+ソーシャルタイムラインに新しい投稿が流れてきたときに発生するイベントです。
+
+## `globalTimeline`
+グローバルタイムラインの投稿情報が流れてきます。このチャンネルにパラメータはありません。
+
+### 流れてくるイベント一覧
+
+#### `note`
+グローバルタイムラインに新しい投稿が流れてきたときに発生するイベントです。
diff --git a/src/docs/it-IT/features/antenna.md b/src/docs/it-IT/features/antenna.md
new file mode 100644
index 0000000000..87424cc125
--- /dev/null
+++ b/src/docs/it-IT/features/antenna.md
@@ -0,0 +1,4 @@
+# Antenne
+アンテナは、自由に条件を設定して、合致するノートを自動で収集することができる機能です。
+
+条件を設定したアンテナが作成された状態で、条件に合致するノートが投稿されると、リアルタイムでそのアンテナのタイムラインにノートが追加されます。
diff --git a/src/docs/it-IT/features/custom-emoji.md b/src/docs/it-IT/features/custom-emoji.md
new file mode 100644
index 0000000000..603ac85add
--- /dev/null
+++ b/src/docs/it-IT/features/custom-emoji.md
@@ -0,0 +1,2 @@
+# Emoji personalizzati
+カスタム絵文字は、インスタンスで用意された画像を絵文字のように使える機能です。 ノート、リアクション、チャット、自己紹介、名前などの場所で使うことができます。 カスタム絵文字をそれらの場所で使うには、絵文字ピッカーボタン(ある場合)を押すか、`:`を入力して絵文字サジェストを表示します。 テキスト内に`:foo:`のような形式の文字列が見つかると、`foo`の部分がカスタム絵文字名と解釈され、表示時には対応したカスタム絵文字に置き換わります。
diff --git a/src/docs/it-IT/features/deck.md b/src/docs/it-IT/features/deck.md
new file mode 100644
index 0000000000..73e9efdaaf
--- /dev/null
+++ b/src/docs/it-IT/features/deck.md
@@ -0,0 +1,18 @@
+# Deck
+
+デッキは利用可能なUIのひとつです。「カラム」と呼ばれるビューを複数並べて表示させることで、カスタマイズ性が高く、情報量の多いUIが構築できることが特徴です。
+
+## カラムの追加
+デッキの背景を右クリックし、「カラムを追加」して任意のカラムを追加できます。
+
+## カラムの移動
+カラムは、ドラッグアンドドロップで他のカラムと位置を入れ替えることが出来るほか、カラムメニュー(カラムのヘッダー右クリック)から位置を移動させることもできます。
+
+## カラムの水平分割
+カラムは左右だけでなく、上下に並べることもできます。 カラムメニューを開き、「左に重ねる」を選択すると、左のカラムの下に現在のカラムが移動します。 上下分割を解除するには、カラムメニューの「右に出す」を選択します。
+
+## カラムの設定
+カラムメニューの「編集」を選択するとカラムの設定を編集できます。カラムの名前を変えたり、幅を変えたりできます。
+
+## デッキの設定
+デッキに関する設定は、[settings/deck](/settings/deck)で行えます。
diff --git a/src/docs/it-IT/features/drive.md b/src/docs/it-IT/features/drive.md
new file mode 100644
index 0000000000..c445b99a86
--- /dev/null
+++ b/src/docs/it-IT/features/drive.md
@@ -0,0 +1,17 @@
+# Drive
+ドライブは、Misskey上でファイルを管理できる機能です。
+
+[ドライブのページ](/my/drive)から任意のファイルをアップロードできるほか、アバターに設定した画像や、ノートに添付したファイルなどもすべてドライブにアップロードされます。
+
+<div class="warn">⚠️ ドライブからファイルを削除すると、そのファイルが添付されたノートも消えます。</div>
+
+ドライブにアップロードされたファイルは、いつでもダウンロードすることができるほか、ノート作成時に「ドライブからファイルを添付」することでファイルを再利用することもできます。
+
+ドライブ内にフォルダを作り、複数のファイルをまとめて整理することもできます。
+
+## 閲覧注意 (NSFW)
+<div class="info">ℹ️ この項目が閲覧注意なわけではありません</div>
+
+閲覧注意またはNSFW (Not safe for work) は、ドライブのファイルに設定することができるフラグです。 閲覧注意フラグを設定されたファイルは、表示される際に閲覧者の操作なしには表示されなくなります。 このフラグは、例えば職場や公共の場で閲覧するのに適切でないと思われる画像などに設定し、そのような画像が突然表示されてしまうことを防ぐ目的で使われます。
+
+このフラグは手動でオンオフを切り替えられるほか、モデレーターの判断で設定される場合もあります。
diff --git a/src/docs/it-IT/features/favorite.md b/src/docs/it-IT/features/favorite.md
new file mode 100644
index 0000000000..2272dbcc95
--- /dev/null
+++ b/src/docs/it-IT/features/favorite.md
@@ -0,0 +1,4 @@
+# Preferiti
+[ノート](./node)をお気に入りとして登録できる機能です。 お気に入り登録したノートは、[お気に入りページ](./my/favorites)で一覧することができます。 お気に入りに登録したことは相手に通知されず、お気に入りは自分しか見ることができません。
+
+ノートをお気に入り登録するには、ノートメニューの「お気に入り」を押します。お気に入り解除するには、ノートメニューの「お気に入り解除」を押します。
diff --git a/src/docs/it-IT/features/follow.md b/src/docs/it-IT/features/follow.md
new file mode 100644
index 0000000000..eab673b0ce
--- /dev/null
+++ b/src/docs/it-IT/features/follow.md
@@ -0,0 +1,2 @@
+# Follows
+ユーザーをフォローすると、タイムラインにそのユーザーの投稿が表示されるようになります。ただし、他のユーザーに対する返信は含まれません。 ユーザーをフォローするには、ユーザーページの「フォロー」ボタンをクリックします。フォローを解除するには、もう一度クリックします。
diff --git a/src/docs/it-IT/features/keyboard-shortcut.md b/src/docs/it-IT/features/keyboard-shortcut.md
new file mode 100644
index 0000000000..60533afce5
--- /dev/null
+++ b/src/docs/it-IT/features/keyboard-shortcut.md
@@ -0,0 +1,66 @@
+# キーボードショートカット
+
+## Federata
+これらのショートカットは基本的にどこでも使えます。
+<table>
+    <thead>
+        <tr><th>ショートカット</th><th>効果</th><th>由来</th></tr>
+    </thead>
+    <tbody>
+        <tr><td><kbd class="key">P</kbd>, <kbd class="key">N</kbd></td><td>新規投稿</td><td><b>P</b>ost, <b>N</b>ew, <b>N</b>ote</td></tr>
+        <tr><td><kbd class="key">T</kbd></td><td>タイムラインの最も新しい投稿にフォーカス</td><td><b>T</b>imeline, <b>T</b>op</td></tr>
+        <tr><td><kbd class="group"><kbd class="key">Shift</kbd> + <kbd class="key">N</kbd></kbd></td><td>通知を表示/隠す</td><td><b>N</b>otifications</td></tr>
+        <tr><td><kbd class="key">S</kbd></td><td>Cerca</td><td><b>S</b>earch</td></tr>
+        <tr><td><kbd class="key">H</kbd>, <kbd class="key">?</kbd></td><td>ヘルプを表示</td><td><b>H</b>elp</td></tr>
+    </tbody>
+</table>
+
+## 投稿にフォーカスされた状態
+<table>
+    <thead>
+        <tr><th>ショートカット</th><th>効果</th><th>由来</th></tr>
+    </thead>
+    <tbody>
+        <tr><td><kbd class="key">↑</kbd>, <kbd class="key">K</kbd>, <kbd class="group"><kbd class="key">Shift</kbd> + <kbd class="key">Tab</kbd></kbd></td><td>上の投稿にフォーカスを移動</td><td>-</td></tr>
+        <tr><td><kbd class="key">↓</kbd>, <kbd class="key">J</kbd>, <kbd class="key">Tab</kbd></td><td>下の投稿にフォーカスを移動</td><td>-</td></tr>
+        <tr><td><kbd class="key">R</kbd></td><td>返信フォームを開く</td><td><b>R</b>eply</td></tr>
+        <tr><td><kbd class="key">Q</kbd></td><td>Renoteフォームを開く</td><td><b>Q</b>uote</td></tr>
+        <tr><td><kbd class="group"><kbd class="key">Ctrl</kbd> + <kbd class="key">Q</kbd></kbd></td><td>即刻Renoteする(フォームを開かずに)</td><td>-</td></tr>
+        <tr><td><kbd class="key">E</kbd>, <kbd class="key">A</kbd>, <kbd class="key">+</kbd></td><td>リアクションフォームを開く</td><td><b>E</b>mote, re<b>A</b>ction</td></tr>
+        <tr><td><kbd class="key">0</kbd>~<kbd class="key">9</kbd></td><td>数字に対応したリアクションをする(対応については後述)</td><td>-</td></tr>
+        <tr><td><kbd class="key">F</kbd>, <kbd class="key">B</kbd></td><td>お気に入りに登録</td><td><b>F</b>avorite, <b>B</b>ookmark</td></tr>
+        <tr><td><kbd class="key">Del</kbd>, <kbd class="group"><kbd class="key">Ctrl</kbd> + <kbd class="key">D</kbd></kbd></td><td>投稿を削除</td><td><b>D</b>elete</tr>
+        <tr><td><kbd class="key">M</kbd>, <kbd class="key">O</kbd></td><td>投稿に対するメニューを開く</td><td><b>M</b>ore, <b>O</b>ther</td></tr>
+        <tr><td><kbd class="key">S</kbd></td><td>CWで隠された部分を表示 or 隠す</td><td><b>S</b>how, <b>S</b>ee</td></tr>
+        <tr><td><kbd class="key">Esc</kbd></td><td>フォーカスを外す</td><td>-</td></tr>
+    </tbody>
+</table>
+
+## Renoteフォーム
+<table>
+    <thead>
+        <tr><th>ショートカット</th><th>効果</th><th>由来</th></tr>
+    </thead>
+    <tbody>
+        <tr><td><kbd class="key">Enter</kbd></td><td>Renoteする</td><td>-</td></tr>
+        <tr><td><kbd class="key">Q</kbd></td><td>フォームを展開する</td><td><b>Q</b>uote</td></tr>
+        <tr><td><kbd class="key">Esc</kbd></td><td>フォームを閉じる</td><td>-</td></tr>
+    </tbody>
+</table>
+
+## リアクションフォーム
+デフォルトで「👍」にフォーカスが当たっている状態です。
+<table>
+    <thead>
+        <tr><th>ショートカット</th><th>効果</th><th>由来</th></tr>
+    </thead>
+    <tbody>
+        <tr><td><kbd class="key">↑</kbd>, <kbd class="key">K</kbd></td><td>上のリアクションにフォーカスを移動</td><td>-</td></tr>
+        <tr><td><kbd class="key">↓</kbd>, <kbd class="key">J</kbd></td><td>下のリアクションにフォーカスを移動</td><td>-</td></tr>
+        <tr><td><kbd class="key">←</kbd>, <kbd class="key">H</kbd>, <kbd class="group"><kbd class="key">Shift</kbd> + <kbd class="key">Tab</kbd></kbd></td><td>左のリアクションにフォーカスを移動</td><td>-</td></tr>
+        <tr><td><kbd class="key">→</kbd>, <kbd class="key">L</kbd>, <kbd class="key">Tab</kbd></td><td>右のリアクションにフォーカスを移動</td><td>-</td></tr>
+        <tr><td><kbd class="key">Enter</kbd>, <kbd class="key">Space</kbd>, <kbd class="key">+</kbd></td><td>リアクション確定</td><td>-</td></tr>
+        <tr><td><kbd class="key">0</kbd>~<kbd class="key">9</kbd></td><td>数字に対応したリアクションで確定</td><td>-</td></tr>
+        <tr><td><kbd class="key">Esc</kbd></td><td>リアクションするのをやめる</td><td>-</td></tr>
+    </tbody>
+</table>
diff --git a/src/docs/it-IT/features/mfm.md b/src/docs/it-IT/features/mfm.md
new file mode 100644
index 0000000000..5be2df4f30
--- /dev/null
+++ b/src/docs/it-IT/features/mfm.md
@@ -0,0 +1,12 @@
+# MFM
+MFMは、Misskey Flavored Markdownの略で、Misskeyの様々な場所で使用できる専用のマークアップ言語です。 MFMで使用可能な構文は[MFMチートシート](/mfm-cheat-sheet)で確認できます。
+
+## MFMが使用可能な場所の例
+- ノート本文
+- CW注釈
+- ユーザーの名前
+- ユーザーの自己紹介
+
+## 開発者向け情報
+MFMのパーサー実装はライブラリとして公開されており、簡単にクライアントにMFMを組み込むことが可能です。
+- [misskey-dev/mfm.js](https://github.com/misskey-dev/mfm.js) - JavaScriptパーサー実装
diff --git a/src/docs/it-IT/features/mute.md b/src/docs/it-IT/features/mute.md
new file mode 100644
index 0000000000..a6cb073755
--- /dev/null
+++ b/src/docs/it-IT/features/mute.md
@@ -0,0 +1,13 @@
+# Silenzia
+
+ユーザーをミュートすると、そのユーザーに関する次のコンテンツがMisskeyに表示されなくなります:
+
+* タイムラインや投稿の検索結果内の、そのユーザーの投稿(およびそれらの投稿に対する返信やRenote)
+* そのユーザーからの通知
+* メッセージ履歴一覧内の、そのユーザーとのメッセージ履歴
+
+ユーザーをミュートするには、対象のユーザーのユーザーページに表示されている「ミュート」ボタンを押します。
+
+ミュートを行ったことは相手に通知されず、ミュートされていることを知ることもできません。
+
+設定>ミュート から、自分がミュートしているユーザー一覧を確認することができます。
diff --git a/src/docs/it-IT/features/note.md b/src/docs/it-IT/features/note.md
new file mode 100644
index 0000000000..ad8ff3c45b
--- /dev/null
+++ b/src/docs/it-IT/features/note.md
@@ -0,0 +1,51 @@
+# Note
+ノートは、Misskeyに投稿される、文章、ファイル、アンケートなどを含むコンテンツで、Misskeyの中心的概念です。また、そのノートを作成する行為自体もノートと呼ばれます。
+
+ノートが作成されると、[タイムライン](./timeline)に追加され、自分の[フォロワー](./follow)やサーバーのユーザーが見れるようになります。
+
+ノートには、[リアクション](./reaction)を行うことができます。また、返信や引用もできます。
+
+ノートを[お気に入り](./favorite)登録することで、後で簡単に見返すことができます。
+
+## ノートを作成する
+ノートを作成するには、画面上にある鉛筆マークのボタンを押して、作成フォームを開きます。作成フォームに内容を入力し、「ノート」ボタンを押すことでノートが作成されます。 ノートには、画像、動画など任意のファイルや、[アンケート](./poll)を添付することができます。また、本文中には[MFM](./mfm)が使用でき、[メンション](./mention)や[ハッシュタグ](./hashtag)を含めることもできます。 他にも、CWや公開範囲といった設定も行えます(詳細は後述)。
+<div class="info">ℹ️ コンピューターのクリップボードに画像データがある状態で、フォーム内のテキストボックスにペーストするとその画像を添付することができます。</div>
+<div class="info">ℹ️ テキストボックス内で<kbd class="key">Ctrl + Enter</kbd>を押すことでも投稿できます。</div>
+
+## Rinota
+既にあるノートを引用、もしくはそのノートを新しいノートとして共有する行為、またそれによって作成されたノートをRenoteと呼びます。 自分がフォローしているユーザーの、気に入ったノートを自分のフォロワーに共有したい場合や、過去の自分のノートを再度共有したい場合に使います。 同じノートに対して無制限にRenoteを行うことができますが、あまり連続して使用すると迷惑になる場合もあるので、注意しましょう。
+<div class="warn">⚠️ 公開範囲がフォロワーやダイレクトのノートはRenoteできません</div>
+
+Renoteを削除するには、Renoteの時刻表示の隣にある「...」を押し、「Renote解除」を選択します。
+
+## CW
+Contents Warningの略で、ノートの内容を、閲覧者の操作なしには表示しないようにできる機能です。主に長大な内容を隠すためや、ネタバレ防止などに使うことができます。 設定するには、フォームの「内容を隠す」ボタン(目のアイコン)を押します。すると新しい入力エリアが表れるので、そこに内容の要約を記入します。
+
+## Visibilità
+ノートごとに、そのノートが公開される範囲を設定することができます。フォームの「ノート」ボタンの左にあるアイコンを押すと公開範囲を以下から選択できます。
+
+### Pubblica
+全ての人に対してノートが公開されるほか、サーバーの全てのタイムライン(ホームタイムライン、ローカルタイムライン、ソーシャルタイムライン、グローバルタイムライン)にノートが流れます。
+<div class="warn">⚠️ アカウントが<a href="./silence">サイレンス</a>状態の時は、この公開範囲は使用できません。</div>
+
+### Home
+全ての人に対してノートが公開されますが、フォロワー以外のローカルタイムライン、ソーシャルタイムライン、グローバルタイムラインにはノートは流れません。
+
+### Followers
+自分のフォロワーに対してのみノートを公開します。フォロワーの全てのタイムラインに流れます。
+
+### Diretta
+指定したユーザーに対してのみノートを公開します。指定したユーザーの全てのタイムラインに流れます。
+
+### 「ローカルのみ」オプション
+このオプションを有効にすると、リモートにノートを連合しなくなります。
+
+### 公開範囲の比較
+<table>
+    <tr><th></th><th>Pubblica</th><th>Home</th><th>Followers</th><th>Diretta</th></tr>
+    <tr><th>フォロワーのLTL/STL/GTL</th><td>✔</td><td>✔</td><td>✔</td><td></td></tr>
+    <tr><th>非フォロワーのLTL/STL/GTL</th><td>✔</td><td></td><td></td><td></td></tr>
+</table>
+
+## Fissa sul profilo
+ノートをピン留めすると、ユーザーページに常にそのノートを表示しておくことができます。 ノートのメニューを開き、「ピン留め」を選択してピン留めできます。 複数のノートをピン留めできます。
diff --git a/src/docs/it-IT/features/pages.md b/src/docs/it-IT/features/pages.md
new file mode 100644
index 0000000000..81c19dd20a
--- /dev/null
+++ b/src/docs/it-IT/features/pages.md
@@ -0,0 +1,10 @@
+# Pages
+
+## Variabili
+変数を使うことで動的なページを作成できます。テキスト内で <b>{ 変数名 }</b> と書くとそこに変数の値を埋め込めます。例えば <b>Hello { thing } world!</b> というテキストで、変数(thing)の値が <b>ai</b> だった場合、テキストは <b>Hello ai world!</b> になります。
+
+変数の評価(値を算出すること)は上から下に行われるので、ある変数の中で自分より下の変数を参照することはできません。例えば上から <b>A、B、C</b> と3つの変数を定義したとき、<b>C</b>の中で<b>A</b>や<b>B</b>を参照することはできますが、<b>A</b>の中で<b>B</b>や<b>C</b>を参照することはできません。
+
+ユーザーからの入力を受け取るには、ページに「ユーザー入力」ブロックを設置し、「変数名」に入力を格納したい変数名を設定します(変数は自動で作成されます)。その変数を使ってユーザー入力に応じた動作を行えます。
+
+関数を使うと、値の算出処理を再利用可能な形にまとめることができます。関数を作るには、「関数」タイプの変数を作成します。関数にはスロット(引数)を設定することができ、スロットの値は関数内で変数として利用可能です。また、関数を引数に取る関数(高階関数と呼ばれます)も存在します。関数は予め定義しておくほかに、このような高階関数のスロットに即席でセットすることもできます。
diff --git a/src/docs/it-IT/features/reaction.md b/src/docs/it-IT/features/reaction.md
new file mode 100644
index 0000000000..bca8c97d6b
--- /dev/null
+++ b/src/docs/it-IT/features/reaction.md
@@ -0,0 +1,11 @@
+# Reazione
+他の人のノートに、絵文字を付けて簡単にあなたの反応を伝えられる機能です。 リアクションするには、ノートの + アイコンをクリックしてピッカーを表示し、絵文字を選択します。 リアクションには[カスタム絵文字](./custom-emoji)も使用できます。
+
+## リアクションピッカーのカスタマイズ
+ピッカーに表示される絵文字を自分好みにカスタマイズすることができます。 設定の「リアクション」で設定します。
+
+## リモート投稿へのリアクションについて
+リアクションはMisskeyオリジナルの機能であるため、リモートインスタンスがMisskeyでない限りは、ほとんどの場合「Like」としてアクティビティが送信されます。一般的にはLikeは「お気に入り」として実装されているようです。
+
+## リモートからのリアクションについて
+リモートから「Like」アクティビティを受信したとき、Misskeyでは「👍」のリアクションとして解釈されます。
diff --git a/src/docs/it-IT/features/silence.md b/src/docs/it-IT/features/silence.md
new file mode 100644
index 0000000000..bcecce5f47
--- /dev/null
+++ b/src/docs/it-IT/features/silence.md
@@ -0,0 +1,6 @@
+# Silenzia
+サイレンスは、アカウントに設定される状態のひとつです。
+
+アカウントがサイレンス状態になると、ノートの公開範囲をパブリックにできなくなります。 ホーム、フォロワー、ダイレクトは選択可能なため、サイレンスを受けた場合でもフォロワーやあなたのユーザーページを直接訪れた場合は投稿を閲覧できますが、GTL(連合タイムライン)やLTL(ローカルタイムライン)には投稿が流れません。
+
+アカウントのサイレンス状態は、サーバーのモデレーターによって有効化/無効化されます。
diff --git a/src/docs/it-IT/features/theme.md b/src/docs/it-IT/features/theme.md
new file mode 100644
index 0000000000..793babb973
--- /dev/null
+++ b/src/docs/it-IT/features/theme.md
@@ -0,0 +1,68 @@
+# Tema
+
+テーマを設定して、Misskeyクライアントの見た目を変更できます。
+
+## テーマの設定
+設定 > テーマ
+
+## テーマを作成する
+テーマコードはJSON5で記述されたテーマオブジェクトです。 テーマは以下のようなオブジェクトです。
+``` js
+{
+    id: '17587283-dd92-4a2c-a22c-be0637c9e22a',
+
+    name: 'Danboard',
+    author: 'syuilo',
+
+    base: 'light',
+
+    props: {
+        accent: 'rgb(218, 141, 49)',
+        bg: 'rgb(218, 212, 190)',
+        fg: 'rgb(115, 108, 92)',
+        panel: 'rgb(236, 232, 220)',
+        renote: 'rgb(100, 152, 106)',
+        link: 'rgb(100, 152, 106)',
+        mention: '@accent',
+        hashtag: 'rgb(100, 152, 106)',
+        header: 'rgba(239, 227, 213, 0.75)',
+        navBg: 'rgb(216, 206, 182)',
+        inputBorder: 'rgba(0, 0, 0, 0.1)',
+    },
+}
+
+```
+
+* `id` ... テーマの一意なID。UUIDをおすすめします。
+* `name` ... テーマ名
+* `author` ... テーマの作者
+* `desc` ... テーマの説明(オプション)
+* `base` ... 明るいテーマか、暗いテーマか
+    * `light`にすると明るいテーマになり、`dark`にすると暗いテーマになります。
+    * テーマはここで設定されたベーステーマを継承します。
+* `props` ... テーマのスタイル定義。これから説明します。
+
+### テーマのスタイル定義
+`props`下にはテーマのスタイルを定義します。 キーがCSSの変数名になり、バリューで中身を指定します。 なお、この`props`オブジェクトはベーステーマから継承されます。 ベーステーマは、このテーマの`base`が`light`なら[_light.json5](https://github.com/misskey-dev/misskey/blob/develop/src/client/themes/_light.json5)で、`dark`なら[_dark.json5](https://github.com/misskey-dev/misskey/blob/develop/src/client/themes/_dark.json5)です。 つまり、このテーマ内の`props`に`panel`というキーが無くても、そこにはベーステーマの`panel`があると見なされます。
+
+#### バリューで使える構文
+* 16進数で表された色
+    * 例: `#00ff00`
+* `rgb(r, g, b)`形式で表された色
+    * 例: `rgb(0, 255, 0)`
+* `rgb(r, g, b, a)`形式で表された透明度を含む色
+    * 例: `rgba(0, 255, 0, 0.5)`
+* 他のキーの値の参照
+    * `@{キー名}`と書くと他のキーの値の参照になります。`{キー名}`は参照したいキーの名前に置き換えます。
+    * 例: `@panel`
+* 定数(後述)の参照
+    * `${定数名}`と書くと定数の参照になります。`{定数名}`は参照したい定数の名前に置き換えます。
+    * 例: `$main`
+* 関数(後述)
+    * `:{関数名}<{引数}<{色}`
+
+#### Costante
+「CSS変数として出力はしたくないが、他のCSS変数の値として使いまわしたい」値があるときは、定数を使うと便利です。 キー名を`$`で始めると、そのキーはCSS変数として出力されません。
+
+#### Funzione
+wip
diff --git a/src/docs/it-IT/features/timeline.md b/src/docs/it-IT/features/timeline.md
new file mode 100644
index 0000000000..958c414b77
--- /dev/null
+++ b/src/docs/it-IT/features/timeline.md
@@ -0,0 +1,31 @@
+# Timeline
+タイムラインは、[ノート](./note)が時系列で表示される機能です。 タイムラインには以下で示す種類があり、種類によって表示されるノートも異なります。 なお、タイムラインの種類によってはサーバーにより無効になっている場合があります。
+
+## Home
+自分のフォローしているユーザーの投稿が流れます。HTLと略されます。
+
+## Locale
+全てのローカルユーザーの「ホーム」指定されていない投稿が流れます。LTLと略されます。
+
+## Sociale
+自分のフォローしているユーザーの投稿と、全てのローカルユーザーの「ホーム」指定されていない投稿が流れます。STLと略されます。
+
+## Federata
+全てのローカルユーザーの「ホーム」指定されていない投稿と、サーバーに届いた全てのリモートユーザーの「ホーム」指定されていない投稿が流れます。GTLと略されます。
+
+## Metodo comparativo
+| ソース          |            |      | Timeline |         |          |
+| ------------ | ---------- | ---- | -------- | ------- | -------- |
+| Utente       | Visibilità | Home | Locale   | Sociale | Federata |
+| ローカル (フォロー)  | Pubblico   | ✔    | ✔        | ✔       | ✔        |
+|              | Home       | ✔    |          | ✔       |          |
+|              | Followers  | ✔    | ✔        | ✔       | ✔        |
+| リモート (フォロー)  | Pubblico   | ✔    |          | ✔       | ✔        |
+|              | Home       | ✔    |          | ✔       |          |
+|              | Followers  | ✔    |          | ✔       | ✔        |
+| ローカル (未フォロー) | Pubblico   |      | ✔        | ✔       | ✔        |
+|              | Home       |      |          |         |          |
+|              | Followers  |      |          |         |          |
+| リモート (未フォロー) | Pubblico   |      |          |         | ✔        |
+|              | Home       |      |          |         |          |
+|              | Followers  |      |          |         |          |
diff --git a/src/docs/it-IT/features/widgets.md b/src/docs/it-IT/features/widgets.md
new file mode 100644
index 0000000000..363254503b
--- /dev/null
+++ b/src/docs/it-IT/features/widgets.md
@@ -0,0 +1,7 @@
+# Widget
+ウィジェットは、MisskeyのUI上に設置できる小型の情報表示、操作が行えるパーツです。
+
+ウィジェットを編集するには、ウィジェット編集モードに切り替えます。切り替え方法はUIによって異なります。 ウィジェット編集モードでは、ウィジェットの追加、削除、並び替え、およびそれぞれのウィジェットの設定を行えます。
+
+## 利用可能なウィジェット一覧
+todo
diff --git a/src/docs/it-IT/general/apps.md b/src/docs/it-IT/general/apps.md
new file mode 100644
index 0000000000..1f4c85fe8f
--- /dev/null
+++ b/src/docs/it-IT/general/apps.md
@@ -0,0 +1,6 @@
+# サードパーティアプリのリスト
+## クライアント
+todo
+
+## 連携サービス
+todo
diff --git a/src/docs/it-IT/general/faq.md b/src/docs/it-IT/general/faq.md
new file mode 100644
index 0000000000..ecb664e32e
--- /dev/null
+++ b/src/docs/it-IT/general/faq.md
@@ -0,0 +1,22 @@
+# よくある質問
+ここでは利用上のよくある質問について掲載しています。 Misskeyのプロジェクト自体についてのよくある質問は[こちら](./misskey)に掲載されています。
+
+### iOS/Androidのアプリはありますか?
+公式にはそういったOSのネイティブアプリを開発していませんが、サードパーティ製のアプリがいくつかあります。 詳しくは[こちら](./apps)をご覧ください。
+
+ただ、サードパーティ製アプリはどうしても機能への対応が遅れてしまうため、とくに拘りがなければ公式のWebクライアントの利用をおすすめします。 なお、MisskeyのWebクライアントはPWAに対応しているので、ネイティブアプリのように動作させることも可能です。 詳しくは[こちら](todo)をご覧ください。
+
+## 他のサーバーのユーザーをフォローするときは?
+メニューから検索を選び、ユーザー名をホスト込みで入力します。例: `@syuilo@misskey.io`
+
+## Renoteを削除するには?
+Renoteの時刻表示の隣にある「...」を押し、「Renote解除」を選択します。 Renoteについては[こちら](../features/note)をご確認ください。
+
+## URLのプレビューを表示させたくない
+MFMには、そのURLのプレビューを無効にする構文があります。詳細は[MFMチートシート](/mfm-cheat-sheet)をご確認ください。
+
+## カスタム絵文字を追加したい
+運営者のみがカスタム絵文字を追加、編集、削除できます。それらを希望する場合は運営者に依頼してください。
+
+## Botを開発したい
+Misskey APIを利用してBotの開発が可能です。[こちら](../advanced/develop-bot)をご確認ください。
diff --git a/src/docs/it-IT/general/glossary.md b/src/docs/it-IT/general/glossary.md
new file mode 100644
index 0000000000..356f028e91
--- /dev/null
+++ b/src/docs/it-IT/general/glossary.md
@@ -0,0 +1,83 @@
+# 用語集
+Misskeyに関する用語集です。
+
+## AcitivityPub
+(読み: あくてぃびてぃぱぶ) 分散型を実現するために用いられるプロトコル(仕様)。このプロトコルに則ってサーバー同士通信を行うことで、連合が行われ、Fediverseを形成しています。
+
+## AiScript
+(読み: あいすくりぷと) Misskey上で使用できるプログラミング言語です。詳細は[こちら。](../advanced/aiscript)
+
+## API
+(読み: えーぴーあい) Misskeyのサーバーが公開している、プログラムからMisskeyを扱うためのインターフェース。詳細は[こちら。](../advanced/api)
+
+## Bot
+(読み: ぼっと) プログラムによって動作しているアカウント。
+
+## CW
+(読み: こんてんつわーにんぐ) Contents Warningの略。ノートの内容を、操作なしには表示しないようにできる機能。主に長大な内容を隠すためや、ネタバレ防止などに使われます。
+
+## Fediverse
+(読み: ふぇでぃばーす) Misskeyを含む様々な分散型ソフトウェアのサーバーで構成されたネットワーク。
+
+## GTL
+グローバルタイムライン(Global TimeLine)の略。タイムラインの詳細は[こちら。](../features/timeline)
+
+## HTL
+ホームタイムライン(Home TimeLine)の略。タイムラインの詳細は[こちら。](../features/timeline)
+
+## LTL
+ローカルタイムライン(Local TimeLine)の略。タイムラインの詳細は[こちら。](../features/timeline)
+
+## MFM
+(読み: えむえふえむ) Misskey Flavored Markdownの略で、Misskey上で使用できるマークアップ言語です。詳細は[こちら。](../features/mfm)
+
+## NSFW
+(読み: のっとせーふふぉーわーく) Not Safe For Workの略。画像を「閲覧注意」扱いにし、操作なしには表示しないようにすることができる機能。
+
+## Rinota
+(読み: りのーと) 既にあるノートを引用、もしくはそのノートを新しいノートとして共有する行為、またそれによって作成されたノート。詳細は[こちら。](../features/note)
+
+## STL
+ソーシャルタイムライン(Social TimeLine)の略。タイムラインの詳細は[こちら。](../features/timeline)
+
+## 藍
+(読み: あい) Misskeyの看板娘(公式キャラクター)です。
+
+## アクティブユーザー
+インスタンスにアカウントを作っているユーザーのうち、現在も実際にサービスを利用しているユーザーのこと。
+
+## Istanza
+todo
+
+## コントロールパネル
+インスタンスの設定画面のこと。
+
+## Server
+todo
+
+## Silenzia
+ノートをパブリックな公開範囲で投稿できなくされている状態。モデレーターの判断でユーザーごとに設定されます。詳細は[こちら。](../features/silence)
+
+## Sospendi
+アカウントが使用不可に設定されている状態。
+
+## Drive
+Misskeyにアップロードしたファイルを管理する機能。詳細は[こちら。](../features/drive)
+
+## Note
+Misskeyに投稿される、文章、ファイル、アンケートなどを含めることができるコンテンツ。詳細は[こちら。](../features/note)
+
+## ミスキスト
+Misskeyを使う人のこと。
+
+## Moderatore
+スパムの凍結およびサイレンスや不適切な投稿の削除など、コミュニティ運営に関する権限を持つユーザー。
+
+## Remoto
+他サーバーのことを指します。リモートユーザーといったように接頭辞としても使われます。ローカルの逆です。
+
+## Federazione
+サーバー上で作成された情報が他のサーバーに伝わること。
+
+## Locale
+自サーバーのことを指します。ローカルユーザー、ローカルタイムラインといったように接頭辞としても使われます。リモートの逆です。
diff --git a/src/docs/it-IT/general/links.md b/src/docs/it-IT/general/links.md
new file mode 100644
index 0000000000..d6b16856fb
--- /dev/null
+++ b/src/docs/it-IT/general/links.md
@@ -0,0 +1,5 @@
+# リンク集
+
+## ライブラリ
+- [misskey-dev/misskey.js](https://github.com/misskey-dev/misskey.js) - JavaScriptのMisskey SDK
+- [misskey-dev/mfm.js](https://github.com/misskey-dev/mfm.js) - JavaScriptのMFMパーサー実装
diff --git a/src/docs/it-IT/general/misskey.md b/src/docs/it-IT/general/misskey.md
new file mode 100644
index 0000000000..d9243c0c3e
--- /dev/null
+++ b/src/docs/it-IT/general/misskey.md
@@ -0,0 +1,87 @@
+# Informazioni di Misskey
+
+Misskeyはオープンソースの分散型マイクロブログプラットフォームプロジェクトです。 開発は日本でsyuiloによって2014年から開始されました。 ドライブ、リアクションなどの豊富な機能や、高いカスタマイズ性を備えたUIを持つことが特徴です。
+
+## 歴史
+開発当初は掲示板がメインのサービスでしたが、ユーザーが短文を投稿し、それを時系列で流れるタイムライン機能を追加したところ人気が高まり、徐々にそれがメインとして開発が進むようになりました。 当初は分散型ではありませんでしたが、2018年にAcitivityPubを実装し分散型になったことで、より多くの方に認知され利用されるサービスになり、現在に至ります。
+<div class="info">ℹ️ Misskeyという名前は、syuiloが当時聴いていたMay'nというアーティストの楽曲、Brain Diverの歌詞に由来します。</div>
+
+誰でも開発に参加することができ、現在でも活発に開発が続いています。
+
+## 分散型とは何か?
+
+<b>分散(distributed)型</b>とは、<b>非中央集権(decentralized)</b>とも呼ばれ、コミュニティが多数のサーバーに分散して存在し、それらが相互に<b>通信(連合、federation)</b>することでコンテンツ共有<b>ネットワーク(Fediverse)</b>を形成していることが特徴のサービスです。 単一のサーバーしか存在しない、もしくは複数存在しても互いに独立している場合は中央集権なサービスと言われ、例えばTwitterやFacebookなどほとんどのサービスがそれに該当します。 分散型のメリットは、自分に合った運営者やテーマのサーバーを選択できることです。自分でサーバーを作成することもできます。連合するおかげで、どのサーバーを選んでも、同じコミュニティにアクセスできます。
+
+## 常にオープンソース
+Misskeyはこれまでもこれからも、オープンソースであり続けます。オープンソースとは、簡単に言うと<b>ソフトウェアのソースコード(プログラム)が公開されている</b>ことです。ソースコードの修正や再配布が可能であることを定義に含めることもあります。 Misskeyのすべてのソースコードは[AGPL](https://github.com/misskey-dev/misskey/blob/develop/LICENSE)というオープンソースライセンスの下に[公開](https://github.com/misskey-dev)されていて、誰でも自由に閲覧、使用、修正、改変、再配布をすることができます。 オープンソースは、自分で好きなように変えたり、有害な処理が含まれていないことを確認することができたり、誰でも開発に参加できるなどの、様々なメリットがあります。 上述の分散型を実現するためにも、オープンソースであるということは必要不可欠な要素です。 再び引き合いに出しますが、TwitterやFacebookなどの利益を得ているほとんどのサービスはオープンソースではありません。
+
+<div class="info">ℹ️ 技術的に言うと、MisskeyのソースコードはGitで管理されていて、リポジトリは<a href="https://github.com/misskey-dev" target="_blank">GitHub上でホスティングされています。</a></div>
+
+## 開発に参加する、プロジェクトを支援する
+Misskeyを気に入っていただけたら、ぜひプロジェクトを支援してください。プロジェクトに貢献するには、以下で紹介するようにいろいろな方法があります。方法によっては開発のスキルは不要なので、誰でも気軽に参加し貢献することができます。いつでもお待ちしています。
+
+### 機能を追加したり、バグを修正する
+ソフトウェアエンジニアのスキルをお持ちの方であれば、ソースコードを編集する形でプロジェクトに貢献することができます。 貢献についてのガイドは[こちら](https://github.com/misskey-dev/misskey/blob/develop/CONTRIBUTING.md)です。
+
+### 議論に参加する
+新しい機能、または既存の機能について意見を述べたり、不具合を報告したりすることでも貢献できます。 そのようなディスカッションは[GitHub](https://github.com/misskey-dev)上か、[フォーラム](https://forum.misskey.io/)等で行われます。
+
+### テキストを翻訳する
+Misskeyは様々な言語に対応しています(i18n -internationalizationの略- と呼ばれます)。元の言語は基本的に日本語ですが、有志によって他の言語へと翻訳されています。 その翻訳作業に加わっていただくことでもMisskeyに貢献できます。 Misskeyは[Crowdinというサービスを使用して翻訳の管理を行っています。](https://crowdin.com/project/misskey)
+
+### 感想を投稿する
+不具合報告等だけではなく、Misskeyの良い点、楽しい点といったポジティブな意見もぜひ共有してください。開発の励みになり、それは間接的ですがプロジェクトへの貢献です。
+
+### ミスキストを増やす
+ミスキストとは、Misskeyを使用する人のことです。 知り合いに紹介するなどしてMisskeyを広めていただければ、ミスキストが増え開発のモチベーションが上がります。
+
+### 寄付をする
+Misskeyはビジネスではなく、利用は無料であるため、収益は皆様からの寄付のみです。(インスタンスによっては広告収入を得ているような場合もありますが、それは運営者の収入であり直接開発者への収入にはなりません) 寄付をしていただければ、今後も開発を続けることが可能になり、プロジェクトへの貢献になります。 寄付は基本的には[Patreon](https://www.patreon.com/syuilo)で受け付けています。 一定額寄付していただけると、Misskeyの[情報ページ](/about-misskey)に名前を記載することができます。
+
+また、サーバーの運営者も、基本的には収益を得ていません。サーバーの運営にはコストがかかるので、運営者の支援をすることもご検討ください。 開発には直接関係しませんが、サーバーがあってこそのプロジェクトなので、運営が維持されるというのは開発と同じくらい重要なことです。
+
+## クレジット
+Misskeyの開発者や、Misskeyに寄付をしてくださった方の一覧は[こちら](/about-misskey)で見ることができます。
+
+## よくある質問
+### プロジェクトは何を目指していますか?
+強いて言うと、漠然的になりますが広く使われる汎用的なプラットフォームになることを目指しています。 Misskeyは他のプロジェクトとは違い、何らかの思想(例えば、反中央集権)やビジョンに基づいて開発が行われているわけではなく、その点ではフラットです。 それが逆に、特定の方向性に縛られないフレキシブルさを生み出すことに繋がっていると感じています。
+<!-- TODO: ここにロードマップへのリンク -->
+
+### 企業によって開発されていますか?
+いいえ。Misskeyの開発は個人で行われており、商業的でもないため、特定の企業の関りはありません。 開発メンバーも基本的にはボランティアです。 また、開発に対し企業のスポンサーがつくこともありますが、その場合でもやはり開発は個人のコミュニティが主体です。
+
+### 誰が運営していますか?
+Misskeyは分散型なため、各サーバーにそれぞれ異なった運営者がいます。従って、特定の個人や企業によって、Misskeyの全てが運営されているわけではありません。 また、開発チームが運営を行うわけでもないため、運営に関する連絡は、お使いのサーバーの運営者に行ってください。 サーバーの運営者は、[このページ](/about)で確認することができます。 あなたがサーバーを作成すれば、あなたが運営者になります。
+
+### どのサーバーを選べばいいですか?
+[サーバー一覧が公開されています。](https://join.misskey.page/ja-JP/instances) サーバーによってコミュニティのテーマ(特定のこと、ものが好き 等)が決められている場合があるので、自分に合ったテーマのサーバーがあれば、そこを選ぶと良いかもしれません。 他にも、サーバーの規模、ユーザー層、国および言語、運営者が信頼できるかどうか、などの観点があります。 なお、Misskey公式のサーバーというものはありません。自身で新しくサーバーを作成するという選択肢もあります。
+
+基本的にどのサーバーを選んだとしても、他の全てのサーバーのユーザーと繋がることができます。
+
+### サーバーを建てるにはどうしたらいいですか?
+Misskeyサーバーの作成に興味を持っていただきありがとうございます。 2021年現在、Misskeyのホスティングサービスは存在しないため、サーバーの作成にはある程度の知識が必要です。 サーバーの作成方法については[こちら](todo)をご覧ください。
+
+### どのような技術を使用していますか?
+Misskeyは開発が進むにつれ使用する技術も大きく変わってきました。開発当初はMySQL + PHP + jQueryといった構成でしたが、現在は以下のようになっています。
+- サーバーサイド: Node.js
+- データベース: PostgreSQL、Redis
+- UIフレームワーク: Vue.js
+- プログラミング言語: TypeScript
+
+また、MFMやAiScriptなどの、Misskeyから派生して独自の技術も開発しています。
+
+### Mastodonのフォークですか?
+いいえ。MisskeyはMastodonやその他のプロジェクトとは全く別のプロジェクトです。 開発に関しても、Misskeyの方が昔から開発されています。ただし、分散型になったのはMastodonの登場より後です。 同じAcitivityPubという分散のためのプロトコルを実装しているという点以外、両者に特に関りがあるわけでもありません。
+
+### iOS/Androidのアプリはありますか?
+公式にはそういったOSのネイティブアプリを開発していませんが、サードパーティ製のアプリがいくつかあります。 詳しくは[こちら](./apps)をご覧ください。
+
+ただ、サードパーティ製アプリはどうしても機能への対応が遅れてしまうため、とくに拘りがなければ公式のWebクライアントの利用をおすすめします。 なお、MisskeyのWebクライアントはPWAに対応しているので、ネイティブアプリのように動作させることも可能です。 詳しくは[こちら](todo)をご覧ください。
+
+### Misskeyのロゴ、アイコンはどこで入手できますか?
+(準備中)
+
+### 時折目にする猫耳の可愛い女の子は?
+Misskeyの守り神、藍ちゃんです。アイチャンカワイイヤッター!
+<div class="info">ℹ️ 藍ちゃんについては<a href="https://xn--931a.moe/" target="_blank">こちら</a>です。</div>
diff --git a/src/docs/it-IT/general/report-issue.md b/src/docs/it-IT/general/report-issue.md
new file mode 100644
index 0000000000..63527e32af
--- /dev/null
+++ b/src/docs/it-IT/general/report-issue.md
@@ -0,0 +1,8 @@
+# 不具合の報告
+不具合と思われる状況に遭遇したときは、まず[トラブルシューティング](./troubleshooting)をご一読ください。 それでも問題が解決しないときは、以下の情報を含めて[フォーラム](https://forum.misskey.io/)に投稿してください。 投稿することで、解決策が見つかったり、不具合と判断されれば開発チームによって修正が行われます。
+
+## 含める情報
+- Misskeyのバージョン([情報ページ](/about)で確認できます)
+- お使いのブラウザの種類とバージョン
+- お使いのOSの種類とバージョン
+- 問題の再現手順
diff --git a/src/docs/it-IT/general/troubleshooting.md b/src/docs/it-IT/general/troubleshooting.md
new file mode 100644
index 0000000000..f400783ac7
--- /dev/null
+++ b/src/docs/it-IT/general/troubleshooting.md
@@ -0,0 +1,36 @@
+# Risoluzione problemi
+<div class="info">ℹ️ <a href="./faq">よくある質問</a>も合わせてお役立てください。</div>
+
+問題が発生したときは、まずこちらをご確認ください。 該当する項目が無い、もしくは手順を試しても効果がない場合は、サーバーの管理者に連絡するか[不具合を報告](./report-issue)してください。
+
+## クライアントが起動しない
+ほとんどの場合、お使いのブラウザまたはOSのバージョンが古いことが原因です。 ブラウザおよびOSのバージョンを最新のものに更新してから、再度試してみてください。
+
+これは稀ですが、それでも起動しない場合は、キャッシュが原因の場合があります。ブラウザのキャッシュをクリアして、再度試してみてください。
+
+## ページが読み込めない
+クライアントが起動するもののページが読み込めないというエラーが出る場合は、ネットワークに問題がないか確認してください。また、サーバーがダウンしていないか確認してください。
+
+これは稀ですが、キャッシュが原因の場合があります。ブラウザのキャッシュをクリアして、再度試してみてください。
+
+まだ問題がある場合は、サーバーの問題と思われるのでサーバーの管理者に連絡してください。
+
+## クライアントの動作が遅い
+以下を試してみてください:
+
+- クライアント設定で「UIのアニメーションを減らす」を有効にする
+- クライアント設定で「モーダルにぼかし効果を使用」を無効にする
+- お使いのブラウザの設定でハードウェアアクセラレーションを有効にする
+- お使いのデバイスのスペックを上げる
+
+## 通知やアンテナ等の点滅が消えない
+点滅は、未読のコンテンツがあることを示しています。通常点滅が消えない場合は、コンテンツを遡ると未読なコンテンツが残っています。 すべて既読にしたと思われるのに、それでもなお点滅が続く場合(おそらく不具合と思われます)は設定から強制的にすべて既読扱いにすることができます。
+
+## Renoteができない
+フォロワー限定のノートはRenoteすることはできません。
+
+## UI上で特定の要素が表示されない
+広告ブロッカーを使用しているとそのような不具合が発生することがあります。Misskeyではオフにしてご利用ください。
+
+## UI上で未翻訳の部分がある
+ほとんどの場合、単に翻訳が間に合っていないだけで、不具合ではありません。翻訳が終わるまでお待ちください。 [翻訳に参加](./misskey)していただくことも可能です。
diff --git a/src/docs/ja-KS/admin/disable-timelines.md b/src/docs/ja-KS/admin/disable-timelines.md
new file mode 100644
index 0000000000..b081e35ab0
--- /dev/null
+++ b/src/docs/ja-KS/admin/disable-timelines.md
@@ -0,0 +1,8 @@
+# LTL/STL/GTLの無効化
+Misskeyでは、LTL/STL/GTLをそれぞれ無効化することができます。有効/無効を切り替えるには、インスタンスコントロールパネルで設定します。
+
+LTLやSTLは、そのインスタンス全員の投稿が見れるため、新規のユーザーにとってはユーザーを探す必要がなくなり、興味のあるユーザーを見つけやすいという利点があります。 しかし同時に、フォロー機能が活用されなくなったり、不適切な投稿が目につきやすくなったり、チャットのようになることで内輪感が生じて逆に新規ユーザーが参加しにくくなるといったデメリットも持ち合わせています。 サーバーによってメリット/デメリットどちらが優勢かは異なるので、オプションとして無効にできるようになっています。 もしデメリットの方が上回っていると感じたら、それらのタイムラインを無効化することも検討してください。
+
+<div class="warn">⚠️ 無効化を行うと、ユーザーが困惑し、短期的に見て利用者が減る可能性があります。そのため、無効化の際は影響を慎重に検討し、事前に説明してフォローを整える期間を一定程度設けることを推奨します。</div>
+
+なお、管理者/モデレーターは、これらのタイムラインの無効化状態は適用されず、引き続き利用することが可能です。
diff --git a/src/docs/ja-KS/admin/faq.md b/src/docs/ja-KS/admin/faq.md
new file mode 100644
index 0000000000..317b4e0655
--- /dev/null
+++ b/src/docs/ja-KS/admin/faq.md
@@ -0,0 +1,5 @@
+# よくある質問
+ここでは、サーバー管理者向けのよくある質問を掲載しています。
+
+## デフォルトテーマを設定したい
+現在、デフォルトテーマ設定機能は実装されていません。
diff --git a/src/docs/ja-KS/advanced/aiscript.md b/src/docs/ja-KS/advanced/aiscript.md
new file mode 100644
index 0000000000..604d17daa8
--- /dev/null
+++ b/src/docs/ja-KS/advanced/aiscript.md
@@ -0,0 +1,7 @@
+# AiScript
+AiScriptは、Misskeyで使用できるスクリプト言語です。
+
+<div class="info">ℹ️ AiScript実装はMisskeyとは別リポジトリで、<a href="https://github.com/syuilo/aiscript" target="_blank">オープンソースで公開されています。</a></div>
+
+## 使い方
+AiScriptの構文や組み込み関数などのドキュメントは、[こちら](https://github.com/syuilo/aiscript/tree/master/docs)で公開されています。
diff --git a/src/docs/ja-KS/advanced/api.md b/src/docs/ja-KS/advanced/api.md
new file mode 100644
index 0000000000..76019b6145
--- /dev/null
+++ b/src/docs/ja-KS/advanced/api.md
@@ -0,0 +1,58 @@
+# Misskey API
+
+MisskeyAPIを使ってMisskeyクライアント、Misskey連携Webサービス、Bot等(以下「アプリケーション」と呼びます)を開発できます。 ストリーミングAPIもあるので、リアルタイム性のあるアプリケーションを作ることも可能です。
+
+APIを使い始めるには、まずアクセストークンを取得する必要があります。 このドキュメントでは、アクセストークンを取得する手順を説明した後、基本的なAPIの使い方を説明します。
+
+## アクセストークンの取得
+基本的に、APIはリクエストにはアクセストークンが必要となります。 APIにリクエストするのが自分自身なのか、不特定の利用者に使ってもらうアプリケーションなのかによって取得手順は異なります。
+
+* 前者の場合: [「自分自身のアクセストークンを手動発行する」](#自分自身のアクセストークンを手動発行する)に進む
+* 後者の場合: [「アプリケーション利用者にアクセストークンの発行をリクエストする」](#アプリケーション利用者にアクセストークンの発行をリクエストする)に進む
+
+### 自分自身のアクセストークンを手動発行する
+「設定 > API」で、自分のアクセストークンを発行できます。
+
+[「APIの使い方」へ進む](#APIの使い方)
+
+### アプリケーション利用者にアクセストークンの発行をリクエストする
+アプリケーション利用者のアクセストークンを取得するには、以下の手順で発行をリクエストします。
+
+#### Step 1
+
+UUIDを生成する。以後これをセッションIDと呼びます。
+
+> このセッションIDは毎回生成し、使いまわさないようにしてください。
+
+#### Step 2
+
+`{_URL_}/miauth/{session}`をユーザーのブラウザで表示させる。`{session}`の部分は、セッションIDに置き換えてください。
+> 例: `{_URL_}/miauth/c1f6d42b-468b-4fd2-8274-e58abdedef6f`
+
+表示する際、URLにクエリパラメータとしていくつかのオプションを設定できます:
+* `name` ... アプリケーション名
+    * > 例: `MissDeck`
+* `icon` ... アプリケーションのアイコン画像URL
+    * > 例: `https://missdeck.example.com/icon.png`
+* `callback` ... 認証が終わった後にリダイレクトするURL
+    * > 例: `https://missdeck.example.com/callback`
+    * リダイレクト時には、`session`というクエリパラメータでセッションIDが付きます
+* `permission` ... アプリケーションが要求する権限
+    * > 例: `write:notes,write:following,read:drive`
+    * 要求する権限を`,`で区切って列挙します
+    * どのような権限があるかは[APIリファレンス](/api-doc)で確認できます
+
+#### Step 3
+ユーザーが発行を許可した後、`{_URL_}/api/miauth/{session}/check`にPOSTリクエストすると、レスポンスとしてアクセストークンを含むJSONが返ります。
+
+レスポンスに含まれるプロパティ:
+* `token` ... ユーザーのアクセストークン
+* `user` ... ユーザーの情報
+
+[「APIの使い方」へ進む](#APIの使い方)
+
+## APIの使い方
+**APIはすべてPOSTで、リクエスト/レスポンスともにJSON形式です。RESTではありません。** アクセストークンは、`i`というパラメータ名でリクエストに含めます。
+
+* [APIリファレンス](/api-doc)
+* [ストリーミングAPI](./stream)
diff --git a/src/docs/ja-KS/advanced/create-plugin.md b/src/docs/ja-KS/advanced/create-plugin.md
new file mode 100644
index 0000000000..0d2fa19178
--- /dev/null
+++ b/src/docs/ja-KS/advanced/create-plugin.md
@@ -0,0 +1,74 @@
+# プラグインの作成
+Misskey Webクライアントのプラグイン機能を使うと、クライアントを拡張し、様々な機能を追加できます。 ここではプラグインの作成にあたってのメタデータ定義や、AiScript APIリファレンスを掲載します。
+
+## メタデータ
+プラグインは、AiScriptのメタデータ埋め込み機能を使って、デフォルトとしてプラグインのメタデータを定義する必要があります。 メタデータは次のプロパティを含むオブジェクトです。
+
+### name
+プラグイン名
+
+### author
+プラグイン作者
+
+### version
+プラグインバージョン。数値を指定してください。
+
+### description
+プラグインの説明
+
+### permissions
+プラグインが要求する権限。MisskeyAPIにリクエストする際に用いられます。
+
+### config
+プラグインの設定情報を表すオブジェクト。 キーに設定名、値に以下のプロパティを含めます。
+
+#### type
+設定値の種類を表す文字列。以下から選択します。 string number boolean
+
+#### label
+ユーザーに表示する設定名
+
+#### description
+設定の説明
+
+#### default
+設定のデフォルト値
+
+## APIリファレンス
+AiScript標準で組み込まれているAPIは掲載しません。
+
+### Mk:dialog(title text type)
+ダイアログを表示します。typeには以下の値が設定できます。 info success warn error question 省略すると info になります。
+
+### Mk:confirm(title text type)
+確認ダイアログを表示します。typeには以下の値が設定できます。 info success warn error question 省略すると question になります。 ユーザーが"OK"を選択した場合は true を、"キャンセル"を選択した場合は false が返ります。
+
+### Mk:api(endpoint params)
+Misskey APIにリクエストします。第一引数にエンドポイント名、第二引数にパラメータオブジェクトを渡します。
+
+### Mk:save(key value)
+任意の値に任意の名前を付けて永続化します。永続化した値は、AiScriptコンテキストが終了しても残り、Mk:loadで読み取ることができます。
+
+### Mk:load(key)
+Mk:saveで永続化した指定の名前の値を読み取ります。
+
+### Plugin:register_post_form_action(title fn)
+投稿フォームにアクションを追加します。第一引数にアクション名、第二引数にアクションが選択された際のコールバック関数を渡します。 コールバック関数には、第一引数に投稿フォームオブジェクトが渡されます。
+
+### Plugin:register_note_action(title fn)
+ノートメニューに項目を追加します。第一引数に項目名、第二引数に項目が選択された際のコールバック関数を渡します。 コールバック関数には、第一引数に対象のノートオブジェクトが渡されます。
+
+### Plugin:register_user_action(title fn)
+ユーザーメニューに項目を追加します。第一引数に項目名、第二引数に項目が選択された際のコールバック関数を渡します。 コールバック関数には、第一引数に対象のユーザーオブジェクトが渡されます。
+
+### Plugin:register_note_view_interruptor(fn)
+UIに表示されるノート情報を書き換えます。 コールバック関数には、第一引数に対象のノートオブジェクトが渡されます。 コールバック関数の返り値でノートが書き換えられます。
+
+### Plugin:register_note_post_interruptor(fn)
+ノート投稿時にノート情報を書き換えます。 コールバック関数には、第一引数に対象のノートオブジェクトが渡されます。 コールバック関数の返り値でノートが書き換えられます。
+
+### Plugin:open_url(url)
+第一引数に渡されたURLをブラウザの新しいタブで開きます。
+
+### Plugin:config
+プラグインの設定が格納されるオブジェクト。プラグイン定義のconfigで設定したキーで値が入ります。
diff --git a/src/docs/ja-KS/advanced/develop-bot.md b/src/docs/ja-KS/advanced/develop-bot.md
new file mode 100644
index 0000000000..7f825e9bc4
--- /dev/null
+++ b/src/docs/ja-KS/advanced/develop-bot.md
@@ -0,0 +1,6 @@
+# Botの作成
+[Misskey API](./api)を利用してBotの開発が可能です。 また、いくつかのBot実装が公開されているため、ぜひ参考にしてください。
+
+- [syuilo/ai](https://github.com/syuilo/ai) ... Node.js上で動く、TypeScript製Bot実装
+
+Botを作成したときは、プロフィール設定からBotフラグをオンにしておくことを強くおすすめします。
diff --git a/src/docs/ja-KS/advanced/reversi-bot.md b/src/docs/ja-KS/advanced/reversi-bot.md
new file mode 100644
index 0000000000..7ab2a7212e
--- /dev/null
+++ b/src/docs/ja-KS/advanced/reversi-bot.md
@@ -0,0 +1,160 @@
+# MisskeyリバーシBotの開発
+Misskeyのリバーシ機能に対応したBotの開発方法をここに記します。
+
+1. `games/reversi`ストリームに以下のパラメータを付けて接続する:
+    * `i`: botアカウントのAPIキー
+
+2. 対局への招待が来たら、ストリームから`invited`イベントが流れてくる
+    * イベントの中身に、`parent`という名前で対局へ誘ってきたユーザーの情報が含まれている
+
+3. `games/reversi/match`へ、`user_id`として`parent`の`id`が含まれたリクエストを送信する
+
+4. 上手くいくとゲーム情報が返ってくるので、`games/reversi-game`ストリームへ、以下のパラメータを付けて接続する:
+    * `i`: botアカウントのAPIキー
+    * `game`: `game`の`id`
+
+5. この間、相手がゲームの設定を変更するとその都度`update-settings`イベントが流れてくるので、必要であれば何かしらの処理を行う
+
+6. 設定に満足したら、`{ type: 'accept' }`メッセージをストリームに送信する
+
+7. ゲームが開始すると、`started`イベントが流れてくる
+    * イベントの中身にはゲーム情報が含まれている
+
+8. 石を打つには、ストリームに`{ type: 'set', pos: <位置> }`を送信する(位置の計算方法は後述)
+
+9. 相手または自分が石を打つと、ストリームから`set`イベントが流れてくる
+    * `color`として石の色が含まれている
+    * `pos`として位置情報が含まれている
+
+## 位置の計算法
+8x8のマップを考える場合、各マスの位置(インデックスと呼びます)は次のようになっています:
+```
++--+--+--+--+--+--+--+--+
+| 0| 1| 2| 3| 4| 5| 6| 7|
++--+--+--+--+--+--+--+--+
+| 8| 9|10|11|12|13|14|15|
++--+--+--+--+--+--+--+--+
+|16|17|18|19|20|21|22|23|
+...
+```
+
+### X,Y座標 から インデックス に変換する
+```
+pos = x + (y * mapWidth)
+```
+`mapWidth`は、ゲーム情報の`map`から、次のようにして計算できます:
+```
+mapWidth = map[0].length
+```
+
+### インデックス から X,Y座標 に変換する
+```
+x = pos % mapWidth
+y = Math.floor(pos / mapWidth)
+```
+
+## マップ情報
+マップ情報は、ゲーム情報の`map`に入っています。 文字列の配列になっており、ひとつひとつの文字がマス情報を表しています。 それをもとにマップのデザインを知る事が出来ます:
+* `(スペース)` ... マス無し
+* `-` ... マス
+* `b` ... 初期配置される黒石
+* `w` ... 初期配置される白石
+
+例えば、4*4の次のような単純なマップがあるとします:
+```text
++---+---+---+---+
+|   |   |   |   |
++---+---+---+---+
+|   | ○ | ● |   |
++---+---+---+---+
+|   | ● | ○ |   |
++---+---+---+---+
+|   |   |   |   |
++---+---+---+---+
+```
+
+この場合、マップデータはこのようになります:
+```javascript
+['----', '-wb-', '-bw-', '----']
+```
+
+## ユーザーにフォームを提示して対話可能Botを作成する
+ユーザーとのコミュニケーションを行うため、ゲームの設定画面でユーザーにフォームを提示することができます。 例えば、Botの強さをユーザーが設定できるようにする、といったシナリオが考えられます。
+
+フォームを提示するには、`reversi-game`ストリームに次のメッセージを送信します:
+```javascript
+{
+  type: 'init-form',
+  body: [フォームコントロールの配列]
+}
+```
+
+フォームコントロールの配列については今から説明します。 フォームコントロールは、次のようなオブジェクトです:
+```javascript
+{
+  id: 'switch1',
+  type: 'switch',
+  label: 'Enable hoge',
+  value: false
+}
+```
+`id` ... コントロールのID。 `type` ... コントロールの種類。後述します。 `label` ... コントロールと一緒に表記するテキスト。 `value` ... コントロールのデフォルト値。
+
+### フォームの操作を受け取る
+ユーザーがフォームを操作すると、ストリームから`update-form`イベントが流れてきます。 イベントの中身には、コントロールのIDと、ユーザーが設定した値が含まれています。 例えば、上で示したスイッチをユーザーがオンにしたとすると、次のイベントが流れてきます:
+```javascript
+{
+  id: 'switch1',
+  value: true
+}
+```
+
+### フォームコントロールの種類
+#### スイッチ
+type: `switch` スイッチを表示します。何かの機能をオン/オフさせたい場合に有用です。
+
+##### プロパティ
+`label` ... スイッチに表記するテキスト。
+
+#### ラジオボタン
+type: `radio` ラジオボタンを表示します。選択肢を提示するのに有用です。例えば、Botの強さを設定させるなどです。
+
+##### プロパティ
+`items` ... ラジオボタンの選択肢。例:
+```javascript
+items: [{
+  label: 'å¼±',
+  value: 1
+}, {
+  label: '中',
+  value: 2
+}, {
+  label: 'å¼·',
+  value: 3
+}]
+```
+
+#### スライダー
+type: `slider` スライダーを表示します。
+
+##### プロパティ
+`min` ... スライダーの下限。 `max` ... スライダーの上限。 `step` ... 入力欄で刻むステップ値。
+
+#### テキストボックス
+type: `textbox` テキストボックスを表示します。ユーザーになにか入力させる一般的な用途に利用できます。
+
+## ユーザーにメッセージを表示する
+設定画面でユーザーと対話する、フォーム以外のもうひとつの方法がこれです。ユーザーになにかメッセージを表示することができます。 例えば、ユーザーがBotの対応していないモードやマップを選択したとき、警告を表示するなどです。 メッセージを表示するには、次のメッセージをストリームに送信します:
+```javascript
+{
+  type: 'message',
+  body: {
+    text: 'メッセージ内容',
+    type: 'メッセージの種類'
+  }
+}
+```
+メッセージの種類: `success`, `info`, `warning`, `error`。
+
+## 投了する
+投了をするには、<a href="./api/endpoints/games/reversi/games/surrender">このエンドポイント</a>にリクエストします。
diff --git a/src/docs/ja-KS/advanced/stream.md b/src/docs/ja-KS/advanced/stream.md
new file mode 100644
index 0000000000..0e5edd2b0c
--- /dev/null
+++ b/src/docs/ja-KS/advanced/stream.md
@@ -0,0 +1,350 @@
+# ストリーミングAPI
+
+ストリーミングAPIを使うと、リアルタイムで様々な情報(例えばタイムラインに新しい投稿が流れてきた、メッセージが届いた、フォローされた、など)を受け取ったり、様々な操作を行ったりすることができます。
+
+## ストリームに接続する
+
+ストリーミングAPIを利用するには、まずMisskeyサーバーに**websocket**接続する必要があります。
+
+以下のURLに、`i`というパラメータ名で認証情報を含めて、websocket接続してください。例:
+```
+%WS_URL%/streaming?i=xxxxxxxxxxxxxxx
+```
+
+認証情報は、自分のAPIキーや、アプリケーションからストリームに接続する際はユーザーのアクセストークンのことを指します。
+
+<div class="info">ℹ️ 認証情報の取得については、<a href="./api">こちらのドキュメント</a>をご確認ください。</div>
+
+---
+
+認証情報は省略することもできますが、その場合非ログインでの利用ということになり、受信できる情報や可能な操作は限られます。例:
+
+```
+%WS_URL%/streaming
+```
+
+---
+
+ストリームに接続すると、後述するAPI操作や、投稿の購読を行ったりすることができます。 しかしまだこの段階では、例えばタイムラインへの新しい投稿を受信したりすることはできません。 それを行うには、ストリーム上で、後述する**チャンネル**に接続する必要があります。
+
+**ストリームでのやり取りはすべてJSONです。**
+
+## チャンネル
+MisskeyのストリーミングAPIにはチャンネルという概念があります。これは、送受信する情報を分離するための仕組みです。 Misskeyのストリームに接続しただけでは、まだリアルタイムでタイムラインの投稿を受信したりはできません。 ストリーム上でチャンネルに接続することで、様々な情報を受け取ったり情報を送信したりすることができるようになります。
+
+ひとつのストリーム上で、同時に複数のチャンネルに接続することができます。
+
+### チャンネルに接続する
+チャンネルに接続するには、次のようなデータをJSONでストリームに送信します:
+
+```json
+{
+    type: 'connect',
+    body: {
+        channel: 'xxxxxxxx',
+        id: 'foobar',
+        params: {
+            ...
+        }
+    }
+}
+```
+
+ここで、
+* `channel`には接続したいチャンネル名を設定します。チャンネルの種類については後述します。
+* `id`にはそのチャンネルとやり取りするための任意のIDを設定します。ストリームでは様々なメッセージが流れるので、そのメッセージがどのチャンネルからのものなのか識別する必要があるからです。このIDは、UUIDや、乱数のようなもので構いません。
+* `params`はチャンネルに接続する際のパラメータです。チャンネルによって接続時に必要とされるパラメータは異なります。パラメータ不要のチャンネルに接続する際は、このプロパティは省略可能です。
+
+<div class="info">ℹ️ IDはチャンネルごとではなく「チャンネルの接続ごと」です。なぜなら、同じチャンネルに異なるパラメータで複数接続するケースもあるからです。</div>
+
+### チャンネルからのメッセージを受け取る
+例えばタイムラインのチャンネルなら、新しい投稿があった時にメッセージを発します。そのメッセージを受け取ることで、タイムラインに新しい投稿がされたことをリアルタイムで知ることができます。
+
+チャンネルがメッセージを発すると、次のようなデータがJSONでストリームに流れてきます:
+```json
+{
+    type: 'channel',
+    body: {
+        id: 'foobar',
+        type: 'something',
+        body: {
+            some: 'thing'
+        }
+    }
+}
+```
+
+ここで、
+* `id`には前述したそのチャンネルに接続する際に設定したIDが設定されています。これで、このメッセージがどのチャンネルからのものなのか知ることができます。
+* `type`にはメッセージの種類が設定されます。チャンネルによって、どのような種類のメッセージが流れてくるかは異なります。
+* `body`にはメッセージの内容が設定されます。チャンネルによって、どのような内容のメッセージが流れてくるかは異なります。
+
+### チャンネルに向けてメッセージを送信する
+チャンネルによっては、メッセージを受け取るだけでなく、こちらから何かメッセージを送信し、何らかの操作を行える場合があります。
+
+チャンネルにメッセージを送信するには、次のようなデータをJSONでストリームに送信します:
+```json
+{
+    type: 'channel',
+    body: {
+        id: 'foobar',
+        type: 'something',
+        body: {
+            some: 'thing'
+        }
+    }
+}
+```
+
+ここで、
+* `id`には前述したそのチャンネルに接続する際に設定したIDを設定します。これで、このメッセージがどのチャンネルに向けたものなのか識別させることができます。
+* `type`にはメッセージの種類を設定します。チャンネルによって、どのような種類のメッセージを受け付けるかは異なります。
+* `body`にはメッセージの内容を設定します。チャンネルによって、どのような内容のメッセージを受け付けるかは異なります。
+
+### チャンネルから切断する
+チャンネルから切断するには、次のようなデータをJSONでストリームに送信します:
+
+```json
+{
+    type: 'disconnect',
+    body: {
+        id: 'foobar'
+    }
+}
+```
+
+ここで、
+* `id`には前述したそのチャンネルに接続する際に設定したIDを設定します。
+
+## ストリームを経由してAPIリクエストする
+
+ストリームを経由してAPIリクエストすると、HTTPリクエストを発生させずにAPIを利用できます。そのため、コードを簡潔にできたり、パフォーマンスの向上を見込めるかもしれません。
+
+ストリームを経由してAPIリクエストするには、次のようなデータをJSONでストリームに送信します:
+```json
+{
+    type: 'api',
+    body: {
+        id: 'xxxxxxxxxxxxxxxx',
+        endpoint: 'notes/create',
+        data: {
+            text: 'yee haw!'
+        }
+    }
+}
+```
+
+ここで、
+* `id`には、APIのレスポンスを識別するための、APIリクエストごとの一意なIDを設定する必要があります。UUIDや、簡単な乱数のようなもので構いません。
+* `endpoint`には、あなたがリクエストしたいAPIのエンドポイントを指定します。
+* `data`には、エンドポイントのパラメータを含めます。
+
+<div class="info">ℹ️ APIのエンドポイントやパラメータについてはAPIリファレンスをご確認ください。</div>
+
+### レスポンスの受信
+
+APIへリクエストすると、レスポンスがストリームから次のような形式で流れてきます。
+
+```json
+{
+    type: 'api:xxxxxxxxxxxxxxxx',
+    body: {
+        ...
+    }
+}
+```
+
+ここで、
+* `xxxxxxxxxxxxxxxx`の部分には、リクエストの際に設定された`id`が含まれています。これにより、どのリクエストに対するレスポンスなのか判別することができます。
+* `body`には、レスポンスが含まれています。
+
+## 投稿のキャプチャ
+
+Misskeyは投稿のキャプチャと呼ばれる仕組みを提供しています。これは、指定した投稿のイベントをストリームで受け取る機能です。
+
+例えばタイムラインを取得してユーザーに表示したとします。ここで誰かがそのタイムラインに含まれるどれかの投稿に対してリアクションしたとします。
+
+しかし、クライアントからするとある投稿にリアクションが付いたことなどは知る由がないため、リアルタイムでリアクションをタイムライン上の投稿に反映して表示するといったことができません。
+
+この問題を解決するために、Misskeyは投稿のキャプチャ機構を用意しています。投稿をキャプチャすると、その投稿に関するイベントを受け取ることができるため、リアルタイムでリアクションを反映させたりすることが可能になります。
+
+### 投稿をキャプチャする
+
+投稿をキャプチャするには、ストリームに次のようなメッセージを送信します:
+
+```json
+{
+    type: 'subNote',
+    body: {
+        id: 'xxxxxxxxxxxxxxxx'
+    }
+}
+```
+
+ここで、
+* `id`にキャプチャしたい投稿の`id`を設定します。
+
+このメッセージを送信すると、Misskeyにキャプチャを要請したことになり、以後、その投稿に関するイベントが流れてくるようになります。
+
+例えば投稿にリアクションが付いたとすると、次のようなメッセージが流れてきます:
+
+```json
+{
+    type: 'noteUpdated',
+    body: {
+        id: 'xxxxxxxxxxxxxxxx',
+        type: 'reacted',
+        body: {
+            reaction: 'like',
+            userId: 'yyyyyyyyyyyyyyyy'
+        }
+    }
+}
+```
+
+ここで、
+* `body`内の`id`に、イベントを発生させた投稿のIDが設定されます。
+* `body`内の`type`に、イベントの種類が設定されます。
+* `body`内の`body`に、イベントの詳細が設定されます。
+
+#### イベントの種類
+
+##### `reacted`
+その投稿にリアクションがされた時に発生します。
+
+* `reaction`に、リアクションの種類が設定されます。
+* `userId`に、リアクションを行ったユーザーのIDが設定されます。
+
+例:
+```json
+{
+    type: 'noteUpdated',
+    body: {
+        id: 'xxxxxxxxxxxxxxxx',
+        type: 'reacted',
+        body: {
+            reaction: 'like',
+            userId: 'yyyyyyyyyyyyyyyy'
+        }
+    }
+}
+```
+
+##### `deleted`
+その投稿が削除された時に発生します。
+
+* `deletedAt`に、削除日時が設定されます。
+
+例:
+```json
+{
+    type: 'noteUpdated',
+    body: {
+        id: 'xxxxxxxxxxxxxxxx',
+        type: 'deleted',
+        body: {
+            deletedAt: '2018-10-22T02:17:09.703Z'
+        }
+    }
+}
+```
+
+##### `pollVoted`
+その投稿に添付されたアンケートに投票された時に発生します。
+
+* `choice`に、選択肢IDが設定されます。
+* `userId`に、投票を行ったユーザーのIDが設定されます。
+
+例:
+```json
+{
+    type: 'noteUpdated',
+    body: {
+        id: 'xxxxxxxxxxxxxxxx',
+        type: 'pollVoted',
+        body: {
+            choice: 2,
+            userId: 'yyyyyyyyyyyyyyyy'
+        }
+    }
+}
+```
+
+### 投稿のキャプチャを解除する
+
+その投稿がもう画面に表示されなくなったりして、その投稿に関するイベントをもう受け取る必要がなくなったときは、キャプチャの解除を申請してください。
+
+次のメッセージを送信します:
+
+```json
+{
+    type: 'unsubNote',
+    body: {
+        id: 'xxxxxxxxxxxxxxxx'
+    }
+}
+```
+
+ここで、
+* `id`にキャプチャを解除したい投稿の`id`を設定します。
+
+このメッセージを送信すると、以後、その投稿に関するイベントは流れてこないようになります。
+
+# チャンネル一覧
+## `main`
+アカウントに関する基本的な情報が流れてきます。このチャンネルにパラメータはありません。
+
+### 流れてくるイベント一覧
+
+#### `renote`
+自分の投稿がRenoteされた時に発生するイベントです。自分自身の投稿をRenoteしたときは発生しません。
+
+#### `mention`
+誰かからメンションされたときに発生するイベントです。
+
+#### `readAllNotifications`
+自分宛ての通知がすべて既読になったことを表すイベントです。このイベントを利用して、「通知があることを示すアイコン」のようなものをオフにしたりする等のケースが想定されます。
+
+#### `meUpdated`
+自分の情報が更新されたことを表すイベントです。
+
+#### `follow`
+自分が誰かをフォローしたときに発生するイベントです。
+
+#### `unfollow`
+自分が誰かのフォローを解除したときに発生するイベントです。
+
+#### `followed`
+自分が誰かにフォローされたときに発生するイベントです。
+
+## `homeTimeline`
+ホームタイムラインの投稿情報が流れてきます。このチャンネルにパラメータはありません。
+
+### 流れてくるイベント一覧
+
+#### `note`
+タイムラインに新しい投稿が流れてきたときに発生するイベントです。
+
+## `localTimeline`
+ローカルタイムラインの投稿情報が流れてきます。このチャンネルにパラメータはありません。
+
+### 流れてくるイベント一覧
+
+#### `note`
+ローカルタイムラインに新しい投稿が流れてきたときに発生するイベントです。
+
+## `hybridTimeline`
+ソーシャルタイムラインの投稿情報が流れてきます。このチャンネルにパラメータはありません。
+
+### 流れてくるイベント一覧
+
+#### `note`
+ソーシャルタイムラインに新しい投稿が流れてきたときに発生するイベントです。
+
+## `globalTimeline`
+グローバルタイムラインの投稿情報が流れてきます。このチャンネルにパラメータはありません。
+
+### 流れてくるイベント一覧
+
+#### `note`
+グローバルタイムラインに新しい投稿が流れてきたときに発生するイベントです。
diff --git a/src/docs/ja-KS/features/antenna.md b/src/docs/ja-KS/features/antenna.md
new file mode 100644
index 0000000000..94ad9e4aea
--- /dev/null
+++ b/src/docs/ja-KS/features/antenna.md
@@ -0,0 +1,4 @@
+# アンテナ
+アンテナは、自由に条件を設定して、合致するノートを自動で収集することができる機能です。
+
+条件を設定したアンテナが作成された状態で、条件に合致するノートが投稿されると、リアルタイムでそのアンテナのタイムラインにノートが追加されます。
diff --git a/src/docs/ja-KS/features/custom-emoji.md b/src/docs/ja-KS/features/custom-emoji.md
new file mode 100644
index 0000000000..ed2e92be16
--- /dev/null
+++ b/src/docs/ja-KS/features/custom-emoji.md
@@ -0,0 +1,2 @@
+# カスタム絵文字
+カスタム絵文字は、インスタンスで用意された画像を絵文字のように使える機能です。 ノート、リアクション、チャット、自己紹介、名前などの場所で使うことができます。 カスタム絵文字をそれらの場所で使うには、絵文字ピッカーボタン(ある場合)を押すか、`:`を入力して絵文字サジェストを表示します。 テキスト内に`:foo:`のような形式の文字列が見つかると、`foo`の部分がカスタム絵文字名と解釈され、表示時には対応したカスタム絵文字に置き換わります。
diff --git a/src/docs/ja-KS/features/deck.md b/src/docs/ja-KS/features/deck.md
new file mode 100644
index 0000000000..8057e262fd
--- /dev/null
+++ b/src/docs/ja-KS/features/deck.md
@@ -0,0 +1,18 @@
+# デッキ
+
+デッキは利用可能なUIのひとつです。「カラム」と呼ばれるビューを複数並べて表示させることで、カスタマイズ性が高く、情報量の多いUIが構築できることが特徴です。
+
+## カラムの追加
+デッキの背景を右クリックし、「カラムを追加」して任意のカラムを追加できます。
+
+## カラムの移動
+カラムは、ドラッグアンドドロップで他のカラムと位置を入れ替えることが出来るほか、カラムメニュー(カラムのヘッダー右クリック)から位置を移動させることもできます。
+
+## カラムの水平分割
+カラムは左右だけでなく、上下に並べることもできます。 カラムメニューを開き、「左に重ねる」を選択すると、左のカラムの下に現在のカラムが移動します。 上下分割を解除するには、カラムメニューの「右に出す」を選択します。
+
+## カラムの設定
+カラムメニューの「編集」を選択するとカラムの設定を編集できます。カラムの名前を変えたり、幅を変えたりできます。
+
+## デッキの設定
+デッキに関する設定は、[settings/deck](/settings/deck)で行えます。
diff --git a/src/docs/ja-KS/features/drive.md b/src/docs/ja-KS/features/drive.md
new file mode 100644
index 0000000000..b82a41082a
--- /dev/null
+++ b/src/docs/ja-KS/features/drive.md
@@ -0,0 +1,17 @@
+# ドライブ
+ドライブは、Misskey上でファイルを管理できる機能です。
+
+[ドライブのページ](/my/drive)から任意のファイルをアップロードできるほか、アバターに設定した画像や、ノートに添付したファイルなどもすべてドライブにアップロードされます。
+
+<div class="warn">⚠️ ドライブからファイルを削除すると、そのファイルが添付されたノートも消えます。</div>
+
+ドライブにアップロードされたファイルは、いつでもダウンロードすることができるほか、ノート作成時に「ドライブからファイルを添付」することでファイルを再利用することもできます。
+
+ドライブ内にフォルダを作り、複数のファイルをまとめて整理することもできます。
+
+## 閲覧注意 (NSFW)
+<div class="info">ℹ️ この項目が閲覧注意なわけではありません</div>
+
+閲覧注意またはNSFW (Not safe for work) は、ドライブのファイルに設定することができるフラグです。 閲覧注意フラグを設定されたファイルは、表示される際に閲覧者の操作なしには表示されなくなります。 このフラグは、例えば職場や公共の場で閲覧するのに適切でないと思われる画像などに設定し、そのような画像が突然表示されてしまうことを防ぐ目的で使われます。
+
+このフラグは手動でオンオフを切り替えられるほか、モデレーターの判断で設定される場合もあります。
diff --git a/src/docs/ja-KS/features/favorite.md b/src/docs/ja-KS/features/favorite.md
new file mode 100644
index 0000000000..a0e5f8bf78
--- /dev/null
+++ b/src/docs/ja-KS/features/favorite.md
@@ -0,0 +1,4 @@
+# お気に入り
+[ノート](./node)をお気に入りとして登録できる機能です。 お気に入り登録したノートは、[お気に入りページ](./my/favorites)で一覧することができます。 お気に入りに登録したことは相手に通知されず、お気に入りは自分しか見ることができません。
+
+ノートをお気に入り登録するには、ノートメニューの「お気に入り」を押します。お気に入り解除するには、ノートメニューの「お気に入り解除」を押します。
diff --git a/src/docs/ja-KS/features/follow.md b/src/docs/ja-KS/features/follow.md
new file mode 100644
index 0000000000..3c1ea7bbe0
--- /dev/null
+++ b/src/docs/ja-KS/features/follow.md
@@ -0,0 +1,2 @@
+# フォロー
+ユーザーをフォローすると、タイムラインにそのユーザーの投稿が表示されるようになります。ただし、他のユーザーに対する返信は含まれません。 ユーザーをフォローするには、ユーザーページの「フォロー」ボタンをクリックします。フォローを解除するには、もう一度クリックします。
diff --git a/src/docs/ja-KS/features/keyboard-shortcut.md b/src/docs/ja-KS/features/keyboard-shortcut.md
new file mode 100644
index 0000000000..b4b0d53a7e
--- /dev/null
+++ b/src/docs/ja-KS/features/keyboard-shortcut.md
@@ -0,0 +1,66 @@
+# キーボードショートカット
+
+## グローバル
+これらのショートカットは基本的にどこでも使えます。
+<table>
+    <thead>
+        <tr><th>ショートカット</th><th>効果</th><th>由来</th></tr>
+    </thead>
+    <tbody>
+        <tr><td><kbd class="key">P</kbd>, <kbd class="key">N</kbd></td><td>新規投稿</td><td><b>P</b>ost, <b>N</b>ew, <b>N</b>ote</td></tr>
+        <tr><td><kbd class="key">T</kbd></td><td>タイムラインの最も新しい投稿にフォーカス</td><td><b>T</b>imeline, <b>T</b>op</td></tr>
+        <tr><td><kbd class="group"><kbd class="key">Shift</kbd> + <kbd class="key">N</kbd></kbd></td><td>通知を表示/隠す</td><td><b>N</b>otifications</td></tr>
+        <tr><td><kbd class="key">S</kbd></td><td>探す</td><td><b>S</b>earch</td></tr>
+        <tr><td><kbd class="key">H</kbd>, <kbd class="key">?</kbd></td><td>ヘルプを表示</td><td><b>H</b>elp</td></tr>
+    </tbody>
+</table>
+
+## 投稿にフォーカスされた状態
+<table>
+    <thead>
+        <tr><th>ショートカット</th><th>効果</th><th>由来</th></tr>
+    </thead>
+    <tbody>
+        <tr><td><kbd class="key">↑</kbd>, <kbd class="key">K</kbd>, <kbd class="group"><kbd class="key">Shift</kbd> + <kbd class="key">Tab</kbd></kbd></td><td>上の投稿にフォーカスを移動</td><td>-</td></tr>
+        <tr><td><kbd class="key">↓</kbd>, <kbd class="key">J</kbd>, <kbd class="key">Tab</kbd></td><td>下の投稿にフォーカスを移動</td><td>-</td></tr>
+        <tr><td><kbd class="key">R</kbd></td><td>返信フォームを開く</td><td><b>R</b>eply</td></tr>
+        <tr><td><kbd class="key">Q</kbd></td><td>Renoteフォームを開く</td><td><b>Q</b>uote</td></tr>
+        <tr><td><kbd class="group"><kbd class="key">Ctrl</kbd> + <kbd class="key">Q</kbd></kbd></td><td>即刻Renoteする(フォームを開かずに)</td><td>-</td></tr>
+        <tr><td><kbd class="key">E</kbd>, <kbd class="key">A</kbd>, <kbd class="key">+</kbd></td><td>リアクションフォームを開く</td><td><b>E</b>mote, re<b>A</b>ction</td></tr>
+        <tr><td><kbd class="key">0</kbd>~<kbd class="key">9</kbd></td><td>数字に対応したリアクションをする(対応については後述)</td><td>-</td></tr>
+        <tr><td><kbd class="key">F</kbd>, <kbd class="key">B</kbd></td><td>お気に入りに登録</td><td><b>F</b>avorite, <b>B</b>ookmark</td></tr>
+        <tr><td><kbd class="key">Del</kbd>, <kbd class="group"><kbd class="key">Ctrl</kbd> + <kbd class="key">D</kbd></kbd></td><td>投稿を削除</td><td><b>D</b>elete</tr>
+        <tr><td><kbd class="key">M</kbd>, <kbd class="key">O</kbd></td><td>投稿に対するメニューを開く</td><td><b>M</b>ore, <b>O</b>ther</td></tr>
+        <tr><td><kbd class="key">S</kbd></td><td>CWで隠された部分を表示 or 隠す</td><td><b>S</b>how, <b>S</b>ee</td></tr>
+        <tr><td><kbd class="key">Esc</kbd></td><td>フォーカスを外す</td><td>-</td></tr>
+    </tbody>
+</table>
+
+## Renoteフォーム
+<table>
+    <thead>
+        <tr><th>ショートカット</th><th>効果</th><th>由来</th></tr>
+    </thead>
+    <tbody>
+        <tr><td><kbd class="key">Enter</kbd></td><td>Renoteする</td><td>-</td></tr>
+        <tr><td><kbd class="key">Q</kbd></td><td>フォームを展開する</td><td><b>Q</b>uote</td></tr>
+        <tr><td><kbd class="key">Esc</kbd></td><td>フォームを閉じる</td><td>-</td></tr>
+    </tbody>
+</table>
+
+## リアクションフォーム
+デフォルトで「👍」にフォーカスが当たっている状態です。
+<table>
+    <thead>
+        <tr><th>ショートカット</th><th>効果</th><th>由来</th></tr>
+    </thead>
+    <tbody>
+        <tr><td><kbd class="key">↑</kbd>, <kbd class="key">K</kbd></td><td>上のリアクションにフォーカスを移動</td><td>-</td></tr>
+        <tr><td><kbd class="key">↓</kbd>, <kbd class="key">J</kbd></td><td>下のリアクションにフォーカスを移動</td><td>-</td></tr>
+        <tr><td><kbd class="key">←</kbd>, <kbd class="key">H</kbd>, <kbd class="group"><kbd class="key">Shift</kbd> + <kbd class="key">Tab</kbd></kbd></td><td>左のリアクションにフォーカスを移動</td><td>-</td></tr>
+        <tr><td><kbd class="key">→</kbd>, <kbd class="key">L</kbd>, <kbd class="key">Tab</kbd></td><td>右のリアクションにフォーカスを移動</td><td>-</td></tr>
+        <tr><td><kbd class="key">Enter</kbd>, <kbd class="key">Space</kbd>, <kbd class="key">+</kbd></td><td>リアクション確定</td><td>-</td></tr>
+        <tr><td><kbd class="key">0</kbd>~<kbd class="key">9</kbd></td><td>数字に対応したリアクションで確定</td><td>-</td></tr>
+        <tr><td><kbd class="key">Esc</kbd></td><td>リアクションするのをやめる</td><td>-</td></tr>
+    </tbody>
+</table>
diff --git a/src/docs/ja-KS/features/mfm.md b/src/docs/ja-KS/features/mfm.md
new file mode 100644
index 0000000000..5be2df4f30
--- /dev/null
+++ b/src/docs/ja-KS/features/mfm.md
@@ -0,0 +1,12 @@
+# MFM
+MFMは、Misskey Flavored Markdownの略で、Misskeyの様々な場所で使用できる専用のマークアップ言語です。 MFMで使用可能な構文は[MFMチートシート](/mfm-cheat-sheet)で確認できます。
+
+## MFMが使用可能な場所の例
+- ノート本文
+- CW注釈
+- ユーザーの名前
+- ユーザーの自己紹介
+
+## 開発者向け情報
+MFMのパーサー実装はライブラリとして公開されており、簡単にクライアントにMFMを組み込むことが可能です。
+- [misskey-dev/mfm.js](https://github.com/misskey-dev/mfm.js) - JavaScriptパーサー実装
diff --git a/src/docs/ja-KS/features/mute.md b/src/docs/ja-KS/features/mute.md
new file mode 100644
index 0000000000..6a9608662a
--- /dev/null
+++ b/src/docs/ja-KS/features/mute.md
@@ -0,0 +1,13 @@
+# ミュート
+
+ユーザーをミュートすると、そのユーザーに関する次のコンテンツがMisskeyに表示されなくなります:
+
+* タイムラインや投稿の検索結果内の、そのユーザーの投稿(およびそれらの投稿に対する返信やRenote)
+* そのユーザーからの通知
+* メッセージ履歴一覧内の、そのユーザーとのメッセージ履歴
+
+ユーザーをミュートするには、対象のユーザーのユーザーページに表示されている「ミュート」ボタンを押します。
+
+ミュートを行ったことは相手に通知されず、ミュートされていることを知ることもできません。
+
+設定>ミュート から、自分がミュートしているユーザー一覧を確認することができます。
diff --git a/src/docs/ja-KS/features/note.md b/src/docs/ja-KS/features/note.md
new file mode 100644
index 0000000000..3e07ebcf4a
--- /dev/null
+++ b/src/docs/ja-KS/features/note.md
@@ -0,0 +1,51 @@
+# ノート
+ノートは、Misskeyに投稿される、文章、ファイル、アンケートなどを含むコンテンツで、Misskeyの中心的概念です。また、そのノートを作成する行為自体もノートと呼ばれます。
+
+ノートが作成されると、[タイムライン](./timeline)に追加され、自分の[フォロワー](./follow)やサーバーのユーザーが見れるようになります。
+
+ノートには、[リアクション](./reaction)を行うことができます。また、返信や引用もできます。
+
+ノートを[お気に入り](./favorite)登録することで、後で簡単に見返すことができます。
+
+## ノートを作成する
+ノートを作成するには、画面上にある鉛筆マークのボタンを押して、作成フォームを開きます。作成フォームに内容を入力し、「ノート」ボタンを押すことでノートが作成されます。 ノートには、画像、動画など任意のファイルや、[アンケート](./poll)を添付することができます。また、本文中には[MFM](./mfm)が使用でき、[メンション](./mention)や[ハッシュタグ](./hashtag)を含めることもできます。 他にも、CWや公開範囲といった設定も行えます(詳細は後述)。
+<div class="info">ℹ️ コンピューターのクリップボードに画像データがある状態で、フォーム内のテキストボックスにペーストするとその画像を添付することができます。</div>
+<div class="info">ℹ️ テキストボックス内で<kbd class="key">Ctrl + Enter</kbd>を押すことでも投稿できます。</div>
+
+## Renote
+既にあるノートを引用、もしくはそのノートを新しいノートとして共有する行為、またそれによって作成されたノートをRenoteと呼びます。 自分がフォローしているユーザーの、気に入ったノートを自分のフォロワーに共有したい場合や、過去の自分のノートを再度共有したい場合に使います。 同じノートに対して無制限にRenoteを行うことができますが、あまり連続して使用すると迷惑になる場合もあるので、注意しましょう。
+<div class="warn">⚠️ 公開範囲がフォロワーやダイレクトのノートはRenoteできません</div>
+
+Renoteを削除するには、Renoteの時刻表示の隣にある「...」を押し、「Renote解除」を選択します。
+
+## CW
+Contents Warningの略で、ノートの内容を、閲覧者の操作なしには表示しないようにできる機能です。主に長大な内容を隠すためや、ネタバレ防止などに使うことができます。 設定するには、フォームの「内容を隠す」ボタン(目のアイコン)を押します。すると新しい入力エリアが表れるので、そこに内容の要約を記入します。
+
+## 公開範囲
+ノートごとに、そのノートが公開される範囲を設定することができます。フォームの「ノート」ボタンの左にあるアイコンを押すと公開範囲を以下から選択できます。
+
+### パブリック
+全ての人に対してノートが公開されるほか、サーバーの全てのタイムライン(ホームタイムライン、ローカルタイムライン、ソーシャルタイムライン、グローバルタイムライン)にノートが流れます。
+<div class="warn">⚠️ アカウントが<a href="./silence">サイレンス</a>状態の時は、この公開範囲は使用できません。</div>
+
+### ホーム
+全ての人に対してノートが公開されますが、フォロワー以外のローカルタイムライン、ソーシャルタイムライン、グローバルタイムラインにはノートは流れません。
+
+### フォロワー
+自分のフォロワーに対してのみノートを公開します。フォロワーの全てのタイムラインに流れます。
+
+### ダイレクト
+指定したユーザーに対してのみノートを公開します。指定したユーザーの全てのタイムラインに流れます。
+
+### 「ローカルのみ」オプション
+このオプションを有効にすると、リモートにノートを連合しなくなります。
+
+### 公開範囲の比較
+<table>
+    <tr><th></th><th>パブリック</th><th>ホーム</th><th>フォロワー</th><th>ダイレクト</th></tr>
+    <tr><th>フォロワーのLTL/STL/GTL</th><td>✔</td><td>✔</td><td>✔</td><td></td></tr>
+    <tr><th>非フォロワーのLTL/STL/GTL</th><td>✔</td><td></td><td></td><td></td></tr>
+</table>
+
+## ピン留めしとく
+ノートをピン留めすると、ユーザーページに常にそのノートを表示しておくことができます。 ノートのメニューを開き、「ピン留め」を選択してピン留めできます。 複数のノートをピン留めできます。
diff --git a/src/docs/ja-KS/features/pages.md b/src/docs/ja-KS/features/pages.md
new file mode 100644
index 0000000000..a7311b95e6
--- /dev/null
+++ b/src/docs/ja-KS/features/pages.md
@@ -0,0 +1,10 @@
+# Pages
+
+## 変数
+変数を使うことで動的なページを作成できます。テキスト内で <b>{ 変数名 }</b> と書くとそこに変数の値を埋め込めます。例えば <b>Hello { thing } world!</b> というテキストで、変数(thing)の値が <b>ai</b> だった場合、テキストは <b>Hello ai world!</b> になります。
+
+変数の評価(値を算出すること)は上から下に行われるので、ある変数の中で自分より下の変数を参照することはできません。例えば上から <b>A、B、C</b> と3つの変数を定義したとき、<b>C</b>の中で<b>A</b>や<b>B</b>を参照することはできますが、<b>A</b>の中で<b>B</b>や<b>C</b>を参照することはできません。
+
+ユーザーからの入力を受け取るには、ページに「ユーザー入力」ブロックを設置し、「変数名」に入力を格納したい変数名を設定します(変数は自動で作成されます)。その変数を使ってユーザー入力に応じた動作を行えます。
+
+関数を使うと、値の算出処理を再利用可能な形にまとめることができます。関数を作るには、「関数」タイプの変数を作成します。関数にはスロット(引数)を設定することができ、スロットの値は関数内で変数として利用可能です。また、関数を引数に取る関数(高階関数と呼ばれます)も存在します。関数は予め定義しておくほかに、このような高階関数のスロットに即席でセットすることもできます。
diff --git a/src/docs/ja-KS/features/reaction.md b/src/docs/ja-KS/features/reaction.md
new file mode 100644
index 0000000000..4d479fd416
--- /dev/null
+++ b/src/docs/ja-KS/features/reaction.md
@@ -0,0 +1,11 @@
+# リアクション
+他の人のノートに、絵文字を付けて簡単にあなたの反応を伝えられる機能です。 リアクションするには、ノートの + アイコンをクリックしてピッカーを表示し、絵文字を選択します。 リアクションには[カスタム絵文字](./custom-emoji)も使用できます。
+
+## リアクションピッカーのカスタマイズ
+ピッカーに表示される絵文字を自分好みにカスタマイズすることができます。 設定の「リアクション」で設定します。
+
+## リモート投稿へのリアクションについて
+リアクションはMisskeyオリジナルの機能であるため、リモートインスタンスがMisskeyでない限りは、ほとんどの場合「Like」としてアクティビティが送信されます。一般的にはLikeは「お気に入り」として実装されているようです。
+
+## リモートからのリアクションについて
+リモートから「Like」アクティビティを受信したとき、Misskeyでは「👍」のリアクションとして解釈されます。
diff --git a/src/docs/ja-KS/features/silence.md b/src/docs/ja-KS/features/silence.md
new file mode 100644
index 0000000000..7e26feab0d
--- /dev/null
+++ b/src/docs/ja-KS/features/silence.md
@@ -0,0 +1,6 @@
+# サイレンス
+サイレンスは、アカウントに設定される状態のひとつです。
+
+アカウントがサイレンス状態になると、ノートの公開範囲をパブリックにできなくなります。 ホーム、フォロワー、ダイレクトは選択可能なため、サイレンスを受けた場合でもフォロワーやあなたのユーザーページを直接訪れた場合は投稿を閲覧できますが、GTL(連合タイムライン)やLTL(ローカルタイムライン)には投稿が流れません。
+
+アカウントのサイレンス状態は、サーバーのモデレーターによって有効化/無効化されます。
diff --git a/src/docs/ja-KS/features/theme.md b/src/docs/ja-KS/features/theme.md
new file mode 100644
index 0000000000..a406f3433c
--- /dev/null
+++ b/src/docs/ja-KS/features/theme.md
@@ -0,0 +1,68 @@
+# テーマ
+
+テーマを設定して、Misskeyクライアントの見た目を変更できます。
+
+## テーマの設定
+設定 > テーマ
+
+## テーマを作成する
+テーマコードはJSON5で記述されたテーマオブジェクトです。 テーマは以下のようなオブジェクトです。
+``` js
+{
+    id: '17587283-dd92-4a2c-a22c-be0637c9e22a',
+
+    name: 'Danboard',
+    author: 'syuilo',
+
+    base: 'light',
+
+    props: {
+        accent: 'rgb(218, 141, 49)',
+        bg: 'rgb(218, 212, 190)',
+        fg: 'rgb(115, 108, 92)',
+        panel: 'rgb(236, 232, 220)',
+        renote: 'rgb(100, 152, 106)',
+        link: 'rgb(100, 152, 106)',
+        mention: '@accent',
+        hashtag: 'rgb(100, 152, 106)',
+        header: 'rgba(239, 227, 213, 0.75)',
+        navBg: 'rgb(216, 206, 182)',
+        inputBorder: 'rgba(0, 0, 0, 0.1)',
+    },
+}
+
+```
+
+* `id` ... テーマの一意なID。UUIDをおすすめします。
+* `name` ... テーマ名
+* `author` ... テーマの作者
+* `desc` ... テーマの説明(オプション)
+* `base` ... 明るいテーマか、暗いテーマか
+    * `light`にすると明るいテーマになり、`dark`にすると暗いテーマになります。
+    * テーマはここで設定されたベーステーマを継承します。
+* `props` ... テーマのスタイル定義。これから説明します。
+
+### テーマのスタイル定義
+`props`下にはテーマのスタイルを定義します。 キーがCSSの変数名になり、バリューで中身を指定します。 なお、この`props`オブジェクトはベーステーマから継承されます。 ベーステーマは、このテーマの`base`が`light`なら[_light.json5](https://github.com/misskey-dev/misskey/blob/develop/src/client/themes/_light.json5)で、`dark`なら[_dark.json5](https://github.com/misskey-dev/misskey/blob/develop/src/client/themes/_dark.json5)です。 つまり、このテーマ内の`props`に`panel`というキーが無くても、そこにはベーステーマの`panel`があると見なされます。
+
+#### バリューで使える構文
+* 16進数で表された色
+    * 例: `#00ff00`
+* `rgb(r, g, b)`形式で表された色
+    * 例: `rgb(0, 255, 0)`
+* `rgb(r, g, b, a)`形式で表された透明度を含む色
+    * 例: `rgba(0, 255, 0, 0.5)`
+* 他のキーの値の参照
+    * `@{キー名}`と書くと他のキーの値の参照になります。`{キー名}`は参照したいキーの名前に置き換えます。
+    * 例: `@panel`
+* 定数(後述)の参照
+    * `${定数名}`と書くと定数の参照になります。`{定数名}`は参照したい定数の名前に置き換えます。
+    * 例: `$main`
+* 関数(後述)
+    * `:{関数名}<{引数}<{色}`
+
+#### 定数
+「CSS変数として出力はしたくないが、他のCSS変数の値として使いまわしたい」値があるときは、定数を使うと便利です。 キー名を`$`で始めると、そのキーはCSS変数として出力されません。
+
+#### 関数
+wip
diff --git a/src/docs/ja-KS/features/timeline.md b/src/docs/ja-KS/features/timeline.md
new file mode 100644
index 0000000000..f431014f84
--- /dev/null
+++ b/src/docs/ja-KS/features/timeline.md
@@ -0,0 +1,31 @@
+# タイムライン
+タイムラインは、[ノート](./note)が時系列で表示される機能です。 タイムラインには以下で示す種類があり、種類によって表示されるノートも異なります。 なお、タイムラインの種類によってはサーバーにより無効になっている場合があります。
+
+## ホーム
+自分のフォローしているユーザーの投稿が流れます。HTLと略されます。
+
+## ローカル
+全てのローカルユーザーの「ホーム」指定されていない投稿が流れます。LTLと略されます。
+
+## ソーシャル
+自分のフォローしているユーザーの投稿と、全てのローカルユーザーの「ホーム」指定されていない投稿が流れます。STLと略されます。
+
+## グローバル
+全てのローカルユーザーの「ホーム」指定されていない投稿と、サーバーに届いた全てのリモートユーザーの「ホーム」指定されていない投稿が流れます。GTLと略されます。
+
+## 比較
+| ソース          |       |     | タイムライン |       |       |
+| ------------ | ----- | --- | ------ | ----- | ----- |
+| ユーザー         | 公開範囲  | ホーム | ローカル   | ソーシャル | グローバル |
+| ローカル (フォロー)  | 公開    | ✔   | ✔      | ✔     | ✔     |
+|              | ホーム   | ✔   |        | ✔     |       |
+|              | フォロワー | ✔   | ✔      | ✔     | ✔     |
+| リモート (フォロー)  | 公開    | ✔   |        | ✔     | ✔     |
+|              | ホーム   | ✔   |        | ✔     |       |
+|              | フォロワー | ✔   |        | ✔     | ✔     |
+| ローカル (未フォロー) | 公開    |     | ✔      | ✔     | ✔     |
+|              | ホーム   |     |        |       |       |
+|              | フォロワー |     |        |       |       |
+| リモート (未フォロー) | 公開    |     |        |       | ✔     |
+|              | ホーム   |     |        |       |       |
+|              | フォロワー |     |        |       |       |
diff --git a/src/docs/ja-KS/features/widgets.md b/src/docs/ja-KS/features/widgets.md
new file mode 100644
index 0000000000..a7c2c1d1d6
--- /dev/null
+++ b/src/docs/ja-KS/features/widgets.md
@@ -0,0 +1,7 @@
+# ウィジェット
+ウィジェットは、MisskeyのUI上に設置できる小型の情報表示、操作が行えるパーツです。
+
+ウィジェットを編集するには、ウィジェット編集モードに切り替えます。切り替え方法はUIによって異なります。 ウィジェット編集モードでは、ウィジェットの追加、削除、並び替え、およびそれぞれのウィジェットの設定を行えます。
+
+## 利用可能なウィジェット一覧
+todo
diff --git a/src/docs/ja-KS/general/apps.md b/src/docs/ja-KS/general/apps.md
new file mode 100644
index 0000000000..1f4c85fe8f
--- /dev/null
+++ b/src/docs/ja-KS/general/apps.md
@@ -0,0 +1,6 @@
+# サードパーティアプリのリスト
+## クライアント
+todo
+
+## 連携サービス
+todo
diff --git a/src/docs/ja-KS/general/faq.md b/src/docs/ja-KS/general/faq.md
new file mode 100644
index 0000000000..ecb664e32e
--- /dev/null
+++ b/src/docs/ja-KS/general/faq.md
@@ -0,0 +1,22 @@
+# よくある質問
+ここでは利用上のよくある質問について掲載しています。 Misskeyのプロジェクト自体についてのよくある質問は[こちら](./misskey)に掲載されています。
+
+### iOS/Androidのアプリはありますか?
+公式にはそういったOSのネイティブアプリを開発していませんが、サードパーティ製のアプリがいくつかあります。 詳しくは[こちら](./apps)をご覧ください。
+
+ただ、サードパーティ製アプリはどうしても機能への対応が遅れてしまうため、とくに拘りがなければ公式のWebクライアントの利用をおすすめします。 なお、MisskeyのWebクライアントはPWAに対応しているので、ネイティブアプリのように動作させることも可能です。 詳しくは[こちら](todo)をご覧ください。
+
+## 他のサーバーのユーザーをフォローするときは?
+メニューから検索を選び、ユーザー名をホスト込みで入力します。例: `@syuilo@misskey.io`
+
+## Renoteを削除するには?
+Renoteの時刻表示の隣にある「...」を押し、「Renote解除」を選択します。 Renoteについては[こちら](../features/note)をご確認ください。
+
+## URLのプレビューを表示させたくない
+MFMには、そのURLのプレビューを無効にする構文があります。詳細は[MFMチートシート](/mfm-cheat-sheet)をご確認ください。
+
+## カスタム絵文字を追加したい
+運営者のみがカスタム絵文字を追加、編集、削除できます。それらを希望する場合は運営者に依頼してください。
+
+## Botを開発したい
+Misskey APIを利用してBotの開発が可能です。[こちら](../advanced/develop-bot)をご確認ください。
diff --git a/src/docs/ja-KS/general/glossary.md b/src/docs/ja-KS/general/glossary.md
new file mode 100644
index 0000000000..1f403a06d2
--- /dev/null
+++ b/src/docs/ja-KS/general/glossary.md
@@ -0,0 +1,83 @@
+# 用語集
+Misskeyに関する用語集です。
+
+## AcitivityPub
+(読み: あくてぃびてぃぱぶ) 分散型を実現するために用いられるプロトコル(仕様)。このプロトコルに則ってサーバー同士通信を行うことで、連合が行われ、Fediverseを形成しています。
+
+## AiScript
+(読み: あいすくりぷと) Misskey上で使用できるプログラミング言語です。詳細は[こちら。](../advanced/aiscript)
+
+## API
+(読み: えーぴーあい) Misskeyのサーバーが公開している、プログラムからMisskeyを扱うためのインターフェース。詳細は[こちら。](../advanced/api)
+
+## Bot
+(読み: ぼっと) プログラムによって動作しているアカウント。
+
+## CW
+(読み: こんてんつわーにんぐ) Contents Warningの略。ノートの内容を、操作なしには表示しないようにできる機能。主に長大な内容を隠すためや、ネタバレ防止などに使われます。
+
+## Fediverse
+(読み: ふぇでぃばーす) Misskeyを含む様々な分散型ソフトウェアのサーバーで構成されたネットワーク。
+
+## GTL
+グローバルタイムライン(Global TimeLine)の略。タイムラインの詳細は[こちら。](../features/timeline)
+
+## HTL
+ホームタイムライン(Home TimeLine)の略。タイムラインの詳細は[こちら。](../features/timeline)
+
+## LTL
+ローカルタイムライン(Local TimeLine)の略。タイムラインの詳細は[こちら。](../features/timeline)
+
+## MFM
+(読み: えむえふえむ) Misskey Flavored Markdownの略で、Misskey上で使用できるマークアップ言語です。詳細は[こちら。](../features/mfm)
+
+## NSFW
+(読み: のっとせーふふぉーわーく) Not Safe For Workの略。画像を「閲覧注意」扱いにし、操作なしには表示しないようにすることができる機能。
+
+## Renote
+(読み: りのーと) 既にあるノートを引用、もしくはそのノートを新しいノートとして共有する行為、またそれによって作成されたノート。詳細は[こちら。](../features/note)
+
+## STL
+ソーシャルタイムライン(Social TimeLine)の略。タイムラインの詳細は[こちら。](../features/timeline)
+
+## 藍
+(読み: あい) Misskeyの看板娘(公式キャラクター)です。
+
+## アクティブユーザー
+インスタンスにアカウントを作っているユーザーのうち、現在も実際にサービスを利用しているユーザーのこと。
+
+## インスタンス
+todo
+
+## コントロールパネル
+インスタンスの設定画面のこと。
+
+## サーバー
+todo
+
+## サイレンス
+ノートをパブリックな公開範囲で投稿できなくされている状態。モデレーターの判断でユーザーごとに設定されます。詳細は[こちら。](../features/silence)
+
+## 凍結
+アカウントが使用不可に設定されている状態。
+
+## ドライブ
+Misskeyにアップロードしたファイルを管理する機能。詳細は[こちら。](../features/drive)
+
+## ノート
+Misskeyに投稿される、文章、ファイル、アンケートなどを含めることができるコンテンツ。詳細は[こちら。](../features/note)
+
+## ミスキスト
+Misskeyを使う人のこと。
+
+## モデレーター
+スパムの凍結およびサイレンスや不適切な投稿の削除など、コミュニティ運営に関する権限を持つユーザー。
+
+## リモート
+他サーバーのことを指します。リモートユーザーといったように接頭辞としても使われます。ローカルの逆です。
+
+## 連合
+サーバー上で作成された情報が他のサーバーに伝わること。
+
+## ローカル
+自サーバーのことを指します。ローカルユーザー、ローカルタイムラインといったように接頭辞としても使われます。リモートの逆です。
diff --git a/src/docs/ja-KS/general/links.md b/src/docs/ja-KS/general/links.md
new file mode 100644
index 0000000000..d6b16856fb
--- /dev/null
+++ b/src/docs/ja-KS/general/links.md
@@ -0,0 +1,5 @@
+# リンク集
+
+## ライブラリ
+- [misskey-dev/misskey.js](https://github.com/misskey-dev/misskey.js) - JavaScriptのMisskey SDK
+- [misskey-dev/mfm.js](https://github.com/misskey-dev/mfm.js) - JavaScriptのMFMパーサー実装
diff --git a/src/docs/ja-KS/general/misskey.md b/src/docs/ja-KS/general/misskey.md
new file mode 100644
index 0000000000..3975b805d8
--- /dev/null
+++ b/src/docs/ja-KS/general/misskey.md
@@ -0,0 +1,87 @@
+# Misskeyってなんや?
+
+Misskeyはオープンソースの分散型マイクロブログプラットフォームプロジェクトです。 開発は日本でsyuiloによって2014年から開始されました。 ドライブ、リアクションなどの豊富な機能や、高いカスタマイズ性を備えたUIを持つことが特徴です。
+
+## 歴史
+開発当初は掲示板がメインのサービスでしたが、ユーザーが短文を投稿し、それを時系列で流れるタイムライン機能を追加したところ人気が高まり、徐々にそれがメインとして開発が進むようになりました。 当初は分散型ではありませんでしたが、2018年にAcitivityPubを実装し分散型になったことで、より多くの方に認知され利用されるサービスになり、現在に至ります。
+<div class="info">ℹ️ Misskeyという名前は、syuiloが当時聴いていたMay'nというアーティストの楽曲、Brain Diverの歌詞に由来します。</div>
+
+誰でも開発に参加することができ、現在でも活発に開発が続いています。
+
+## 分散型とは何か?
+
+<b>分散(distributed)型</b>とは、<b>非中央集権(decentralized)</b>とも呼ばれ、コミュニティが多数のサーバーに分散して存在し、それらが相互に<b>通信(連合、federation)</b>することでコンテンツ共有<b>ネットワーク(Fediverse)</b>を形成していることが特徴のサービスです。 単一のサーバーしか存在しない、もしくは複数存在しても互いに独立している場合は中央集権なサービスと言われ、例えばTwitterやFacebookなどほとんどのサービスがそれに該当します。 分散型のメリットは、自分に合った運営者やテーマのサーバーを選択できることです。自分でサーバーを作成することもできます。連合するおかげで、どのサーバーを選んでも、同じコミュニティにアクセスできます。
+
+## 常にオープンソース
+Misskeyはこれまでもこれからも、オープンソースであり続けます。オープンソースとは、簡単に言うと<b>ソフトウェアのソースコード(プログラム)が公開されている</b>ことです。ソースコードの修正や再配布が可能であることを定義に含めることもあります。 Misskeyのすべてのソースコードは[AGPL](https://github.com/misskey-dev/misskey/blob/develop/LICENSE)というオープンソースライセンスの下に[公開](https://github.com/misskey-dev)されていて、誰でも自由に閲覧、使用、修正、改変、再配布をすることができます。 オープンソースは、自分で好きなように変えたり、有害な処理が含まれていないことを確認することができたり、誰でも開発に参加できるなどの、様々なメリットがあります。 上述の分散型を実現するためにも、オープンソースであるということは必要不可欠な要素です。 再び引き合いに出しますが、TwitterやFacebookなどの利益を得ているほとんどのサービスはオープンソースではありません。
+
+<div class="info">ℹ️ 技術的に言うと、MisskeyのソースコードはGitで管理されていて、リポジトリは<a href="https://github.com/misskey-dev" target="_blank">GitHub上でホスティングされています。</a></div>
+
+## 開発に参加する、プロジェクトを支援する
+Misskeyを気に入っていただけたら、ぜひプロジェクトを支援してください。プロジェクトに貢献するには、以下で紹介するようにいろいろな方法があります。方法によっては開発のスキルは不要なので、誰でも気軽に参加し貢献することができます。いつでもお待ちしています。
+
+### 機能を追加したり、バグを修正する
+ソフトウェアエンジニアのスキルをお持ちの方であれば、ソースコードを編集する形でプロジェクトに貢献することができます。 貢献についてのガイドは[こちら](https://github.com/misskey-dev/misskey/blob/develop/CONTRIBUTING.md)です。
+
+### 議論に参加する
+新しい機能、または既存の機能について意見を述べたり、不具合を報告したりすることでも貢献できます。 そのようなディスカッションは[GitHub](https://github.com/misskey-dev)上か、[フォーラム](https://forum.misskey.io/)等で行われます。
+
+### テキストを翻訳する
+Misskeyは様々な言語に対応しています(i18n -internationalizationの略- と呼ばれます)。元の言語は基本的に日本語ですが、有志によって他の言語へと翻訳されています。 その翻訳作業に加わっていただくことでもMisskeyに貢献できます。 Misskeyは[Crowdinというサービスを使用して翻訳の管理を行っています。](https://crowdin.com/project/misskey)
+
+### 感想を投稿する
+不具合報告等だけではなく、Misskeyの良い点、楽しい点といったポジティブな意見もぜひ共有してください。開発の励みになり、それは間接的ですがプロジェクトへの貢献です。
+
+### ミスキストを増やす
+ミスキストとは、Misskeyを使用する人のことです。 知り合いに紹介するなどしてMisskeyを広めていただければ、ミスキストが増え開発のモチベーションが上がります。
+
+### 寄付をする
+Misskeyはビジネスではなく、利用は無料であるため、収益は皆様からの寄付のみです。(インスタンスによっては広告収入を得ているような場合もありますが、それは運営者の収入であり直接開発者への収入にはなりません) 寄付をしていただければ、今後も開発を続けることが可能になり、プロジェクトへの貢献になります。 寄付は基本的には[Patreon](https://www.patreon.com/syuilo)で受け付けています。 一定額寄付していただけると、Misskeyの[情報ページ](/about-misskey)に名前を記載することができます。
+
+また、サーバーの運営者も、基本的には収益を得ていません。サーバーの運営にはコストがかかるので、運営者の支援をすることもご検討ください。 開発には直接関係しませんが、サーバーがあってこそのプロジェクトなので、運営が維持されるというのは開発と同じくらい重要なことです。
+
+## クレジット
+Misskeyの開発者や、Misskeyに寄付をしてくださった方の一覧は[こちら](/about-misskey)で見ることができます。
+
+## よくある質問
+### プロジェクトは何を目指していますか?
+強いて言うと、漠然的になりますが広く使われる汎用的なプラットフォームになることを目指しています。 Misskeyは他のプロジェクトとは違い、何らかの思想(例えば、反中央集権)やビジョンに基づいて開発が行われているわけではなく、その点ではフラットです。 それが逆に、特定の方向性に縛られないフレキシブルさを生み出すことに繋がっていると感じています。
+<!-- TODO: ここにロードマップへのリンク -->
+
+### 企業によって開発されていますか?
+いいえ。Misskeyの開発は個人で行われており、商業的でもないため、特定の企業の関りはありません。 開発メンバーも基本的にはボランティアです。 また、開発に対し企業のスポンサーがつくこともありますが、その場合でもやはり開発は個人のコミュニティが主体です。
+
+### 誰が運営していますか?
+Misskeyは分散型なため、各サーバーにそれぞれ異なった運営者がいます。従って、特定の個人や企業によって、Misskeyの全てが運営されているわけではありません。 また、開発チームが運営を行うわけでもないため、運営に関する連絡は、お使いのサーバーの運営者に行ってください。 サーバーの運営者は、[このページ](/about)で確認することができます。 あなたがサーバーを作成すれば、あなたが運営者になります。
+
+### どのサーバーを選べばいいですか?
+[サーバー一覧が公開されています。](https://join.misskey.page/ja-JP/instances) サーバーによってコミュニティのテーマ(特定のこと、ものが好き 等)が決められている場合があるので、自分に合ったテーマのサーバーがあれば、そこを選ぶと良いかもしれません。 他にも、サーバーの規模、ユーザー層、国および言語、運営者が信頼できるかどうか、などの観点があります。 なお、Misskey公式のサーバーというものはありません。自身で新しくサーバーを作成するという選択肢もあります。
+
+基本的にどのサーバーを選んだとしても、他の全てのサーバーのユーザーと繋がることができます。
+
+### サーバーを建てるにはどうしたらいいですか?
+Misskeyサーバーの作成に興味を持っていただきありがとうございます。 2021年現在、Misskeyのホスティングサービスは存在しないため、サーバーの作成にはある程度の知識が必要です。 サーバーの作成方法については[こちら](todo)をご覧ください。
+
+### どのような技術を使用していますか?
+Misskeyは開発が進むにつれ使用する技術も大きく変わってきました。開発当初はMySQL + PHP + jQueryといった構成でしたが、現在は以下のようになっています。
+- サーバーサイド: Node.js
+- データベース: PostgreSQL、Redis
+- UIフレームワーク: Vue.js
+- プログラミング言語: TypeScript
+
+また、MFMやAiScriptなどの、Misskeyから派生して独自の技術も開発しています。
+
+### Mastodonのフォークですか?
+いいえ。MisskeyはMastodonやその他のプロジェクトとは全く別のプロジェクトです。 開発に関しても、Misskeyの方が昔から開発されています。ただし、分散型になったのはMastodonの登場より後です。 同じAcitivityPubという分散のためのプロトコルを実装しているという点以外、両者に特に関りがあるわけでもありません。
+
+### iOS/Androidのアプリはありますか?
+公式にはそういったOSのネイティブアプリを開発していませんが、サードパーティ製のアプリがいくつかあります。 詳しくは[こちら](./apps)をご覧ください。
+
+ただ、サードパーティ製アプリはどうしても機能への対応が遅れてしまうため、とくに拘りがなければ公式のWebクライアントの利用をおすすめします。 なお、MisskeyのWebクライアントはPWAに対応しているので、ネイティブアプリのように動作させることも可能です。 詳しくは[こちら](todo)をご覧ください。
+
+### Misskeyのロゴ、アイコンはどこで入手できますか?
+(準備中)
+
+### 時折目にする猫耳の可愛い女の子は?
+Misskeyの守り神、藍ちゃんです。アイチャンカワイイヤッター!
+<div class="info">ℹ️ 藍ちゃんについては<a href="https://xn--931a.moe/" target="_blank">こちら</a>です。</div>
diff --git a/src/docs/ja-KS/general/report-issue.md b/src/docs/ja-KS/general/report-issue.md
new file mode 100644
index 0000000000..63527e32af
--- /dev/null
+++ b/src/docs/ja-KS/general/report-issue.md
@@ -0,0 +1,8 @@
+# 不具合の報告
+不具合と思われる状況に遭遇したときは、まず[トラブルシューティング](./troubleshooting)をご一読ください。 それでも問題が解決しないときは、以下の情報を含めて[フォーラム](https://forum.misskey.io/)に投稿してください。 投稿することで、解決策が見つかったり、不具合と判断されれば開発チームによって修正が行われます。
+
+## 含める情報
+- Misskeyのバージョン([情報ページ](/about)で確認できます)
+- お使いのブラウザの種類とバージョン
+- お使いのOSの種類とバージョン
+- 問題の再現手順
diff --git a/src/docs/ja-KS/general/troubleshooting.md b/src/docs/ja-KS/general/troubleshooting.md
new file mode 100644
index 0000000000..4a35091299
--- /dev/null
+++ b/src/docs/ja-KS/general/troubleshooting.md
@@ -0,0 +1,36 @@
+# トラブルシューティング
+<div class="info">ℹ️ <a href="./faq">よくある質問</a>も合わせてお役立てください。</div>
+
+問題が発生したときは、まずこちらをご確認ください。 該当する項目が無い、もしくは手順を試しても効果がない場合は、サーバーの管理者に連絡するか[不具合を報告](./report-issue)してください。
+
+## クライアントが起動しない
+ほとんどの場合、お使いのブラウザまたはOSのバージョンが古いことが原因です。 ブラウザおよびOSのバージョンを最新のものに更新してから、再度試してみてください。
+
+これは稀ですが、それでも起動しない場合は、キャッシュが原因の場合があります。ブラウザのキャッシュをクリアして、再度試してみてください。
+
+## ページが読み込めない
+クライアントが起動するもののページが読み込めないというエラーが出る場合は、ネットワークに問題がないか確認してください。また、サーバーがダウンしていないか確認してください。
+
+これは稀ですが、キャッシュが原因の場合があります。ブラウザのキャッシュをクリアして、再度試してみてください。
+
+まだ問題がある場合は、サーバーの問題と思われるのでサーバーの管理者に連絡してください。
+
+## クライアントの動作が遅い
+以下を試してみてください:
+
+- クライアント設定で「UIのアニメーションを減らす」を有効にする
+- クライアント設定で「モーダルにぼかし効果を使用」を無効にする
+- お使いのブラウザの設定でハードウェアアクセラレーションを有効にする
+- お使いのデバイスのスペックを上げる
+
+## 通知やアンテナ等の点滅が消えない
+点滅は、未読のコンテンツがあることを示しています。通常点滅が消えない場合は、コンテンツを遡ると未読なコンテンツが残っています。 すべて既読にしたと思われるのに、それでもなお点滅が続く場合(おそらく不具合と思われます)は設定から強制的にすべて既読扱いにすることができます。
+
+## Renoteができない
+フォロワー限定のノートはRenoteすることはできません。
+
+## UI上で特定の要素が表示されない
+広告ブロッカーを使用しているとそのような不具合が発生することがあります。Misskeyではオフにしてご利用ください。
+
+## UI上で未翻訳の部分がある
+ほとんどの場合、単に翻訳が間に合っていないだけで、不具合ではありません。翻訳が終わるまでお待ちください。 [翻訳に参加](./misskey)していただくことも可能です。
diff --git a/src/docs/jbo-EN/admin/disable-timelines.md b/src/docs/jbo-EN/admin/disable-timelines.md
new file mode 100644
index 0000000000..b081e35ab0
--- /dev/null
+++ b/src/docs/jbo-EN/admin/disable-timelines.md
@@ -0,0 +1,8 @@
+# LTL/STL/GTLの無効化
+Misskeyでは、LTL/STL/GTLをそれぞれ無効化することができます。有効/無効を切り替えるには、インスタンスコントロールパネルで設定します。
+
+LTLやSTLは、そのインスタンス全員の投稿が見れるため、新規のユーザーにとってはユーザーを探す必要がなくなり、興味のあるユーザーを見つけやすいという利点があります。 しかし同時に、フォロー機能が活用されなくなったり、不適切な投稿が目につきやすくなったり、チャットのようになることで内輪感が生じて逆に新規ユーザーが参加しにくくなるといったデメリットも持ち合わせています。 サーバーによってメリット/デメリットどちらが優勢かは異なるので、オプションとして無効にできるようになっています。 もしデメリットの方が上回っていると感じたら、それらのタイムラインを無効化することも検討してください。
+
+<div class="warn">⚠️ 無効化を行うと、ユーザーが困惑し、短期的に見て利用者が減る可能性があります。そのため、無効化の際は影響を慎重に検討し、事前に説明してフォローを整える期間を一定程度設けることを推奨します。</div>
+
+なお、管理者/モデレーターは、これらのタイムラインの無効化状態は適用されず、引き続き利用することが可能です。
diff --git a/src/docs/jbo-EN/admin/faq.md b/src/docs/jbo-EN/admin/faq.md
new file mode 100644
index 0000000000..317b4e0655
--- /dev/null
+++ b/src/docs/jbo-EN/admin/faq.md
@@ -0,0 +1,5 @@
+# よくある質問
+ここでは、サーバー管理者向けのよくある質問を掲載しています。
+
+## デフォルトテーマを設定したい
+現在、デフォルトテーマ設定機能は実装されていません。
diff --git a/src/docs/jbo-EN/advanced/aiscript.md b/src/docs/jbo-EN/advanced/aiscript.md
new file mode 100644
index 0000000000..604d17daa8
--- /dev/null
+++ b/src/docs/jbo-EN/advanced/aiscript.md
@@ -0,0 +1,7 @@
+# AiScript
+AiScriptは、Misskeyで使用できるスクリプト言語です。
+
+<div class="info">ℹ️ AiScript実装はMisskeyとは別リポジトリで、<a href="https://github.com/syuilo/aiscript" target="_blank">オープンソースで公開されています。</a></div>
+
+## 使い方
+AiScriptの構文や組み込み関数などのドキュメントは、[こちら](https://github.com/syuilo/aiscript/tree/master/docs)で公開されています。
diff --git a/src/docs/jbo-EN/advanced/api.md b/src/docs/jbo-EN/advanced/api.md
new file mode 100644
index 0000000000..76019b6145
--- /dev/null
+++ b/src/docs/jbo-EN/advanced/api.md
@@ -0,0 +1,58 @@
+# Misskey API
+
+MisskeyAPIを使ってMisskeyクライアント、Misskey連携Webサービス、Bot等(以下「アプリケーション」と呼びます)を開発できます。 ストリーミングAPIもあるので、リアルタイム性のあるアプリケーションを作ることも可能です。
+
+APIを使い始めるには、まずアクセストークンを取得する必要があります。 このドキュメントでは、アクセストークンを取得する手順を説明した後、基本的なAPIの使い方を説明します。
+
+## アクセストークンの取得
+基本的に、APIはリクエストにはアクセストークンが必要となります。 APIにリクエストするのが自分自身なのか、不特定の利用者に使ってもらうアプリケーションなのかによって取得手順は異なります。
+
+* 前者の場合: [「自分自身のアクセストークンを手動発行する」](#自分自身のアクセストークンを手動発行する)に進む
+* 後者の場合: [「アプリケーション利用者にアクセストークンの発行をリクエストする」](#アプリケーション利用者にアクセストークンの発行をリクエストする)に進む
+
+### 自分自身のアクセストークンを手動発行する
+「設定 > API」で、自分のアクセストークンを発行できます。
+
+[「APIの使い方」へ進む](#APIの使い方)
+
+### アプリケーション利用者にアクセストークンの発行をリクエストする
+アプリケーション利用者のアクセストークンを取得するには、以下の手順で発行をリクエストします。
+
+#### Step 1
+
+UUIDを生成する。以後これをセッションIDと呼びます。
+
+> このセッションIDは毎回生成し、使いまわさないようにしてください。
+
+#### Step 2
+
+`{_URL_}/miauth/{session}`をユーザーのブラウザで表示させる。`{session}`の部分は、セッションIDに置き換えてください。
+> 例: `{_URL_}/miauth/c1f6d42b-468b-4fd2-8274-e58abdedef6f`
+
+表示する際、URLにクエリパラメータとしていくつかのオプションを設定できます:
+* `name` ... アプリケーション名
+    * > 例: `MissDeck`
+* `icon` ... アプリケーションのアイコン画像URL
+    * > 例: `https://missdeck.example.com/icon.png`
+* `callback` ... 認証が終わった後にリダイレクトするURL
+    * > 例: `https://missdeck.example.com/callback`
+    * リダイレクト時には、`session`というクエリパラメータでセッションIDが付きます
+* `permission` ... アプリケーションが要求する権限
+    * > 例: `write:notes,write:following,read:drive`
+    * 要求する権限を`,`で区切って列挙します
+    * どのような権限があるかは[APIリファレンス](/api-doc)で確認できます
+
+#### Step 3
+ユーザーが発行を許可した後、`{_URL_}/api/miauth/{session}/check`にPOSTリクエストすると、レスポンスとしてアクセストークンを含むJSONが返ります。
+
+レスポンスに含まれるプロパティ:
+* `token` ... ユーザーのアクセストークン
+* `user` ... ユーザーの情報
+
+[「APIの使い方」へ進む](#APIの使い方)
+
+## APIの使い方
+**APIはすべてPOSTで、リクエスト/レスポンスともにJSON形式です。RESTではありません。** アクセストークンは、`i`というパラメータ名でリクエストに含めます。
+
+* [APIリファレンス](/api-doc)
+* [ストリーミングAPI](./stream)
diff --git a/src/docs/jbo-EN/advanced/create-plugin.md b/src/docs/jbo-EN/advanced/create-plugin.md
new file mode 100644
index 0000000000..0d2fa19178
--- /dev/null
+++ b/src/docs/jbo-EN/advanced/create-plugin.md
@@ -0,0 +1,74 @@
+# プラグインの作成
+Misskey Webクライアントのプラグイン機能を使うと、クライアントを拡張し、様々な機能を追加できます。 ここではプラグインの作成にあたってのメタデータ定義や、AiScript APIリファレンスを掲載します。
+
+## メタデータ
+プラグインは、AiScriptのメタデータ埋め込み機能を使って、デフォルトとしてプラグインのメタデータを定義する必要があります。 メタデータは次のプロパティを含むオブジェクトです。
+
+### name
+プラグイン名
+
+### author
+プラグイン作者
+
+### version
+プラグインバージョン。数値を指定してください。
+
+### description
+プラグインの説明
+
+### permissions
+プラグインが要求する権限。MisskeyAPIにリクエストする際に用いられます。
+
+### config
+プラグインの設定情報を表すオブジェクト。 キーに設定名、値に以下のプロパティを含めます。
+
+#### type
+設定値の種類を表す文字列。以下から選択します。 string number boolean
+
+#### label
+ユーザーに表示する設定名
+
+#### description
+設定の説明
+
+#### default
+設定のデフォルト値
+
+## APIリファレンス
+AiScript標準で組み込まれているAPIは掲載しません。
+
+### Mk:dialog(title text type)
+ダイアログを表示します。typeには以下の値が設定できます。 info success warn error question 省略すると info になります。
+
+### Mk:confirm(title text type)
+確認ダイアログを表示します。typeには以下の値が設定できます。 info success warn error question 省略すると question になります。 ユーザーが"OK"を選択した場合は true を、"キャンセル"を選択した場合は false が返ります。
+
+### Mk:api(endpoint params)
+Misskey APIにリクエストします。第一引数にエンドポイント名、第二引数にパラメータオブジェクトを渡します。
+
+### Mk:save(key value)
+任意の値に任意の名前を付けて永続化します。永続化した値は、AiScriptコンテキストが終了しても残り、Mk:loadで読み取ることができます。
+
+### Mk:load(key)
+Mk:saveで永続化した指定の名前の値を読み取ります。
+
+### Plugin:register_post_form_action(title fn)
+投稿フォームにアクションを追加します。第一引数にアクション名、第二引数にアクションが選択された際のコールバック関数を渡します。 コールバック関数には、第一引数に投稿フォームオブジェクトが渡されます。
+
+### Plugin:register_note_action(title fn)
+ノートメニューに項目を追加します。第一引数に項目名、第二引数に項目が選択された際のコールバック関数を渡します。 コールバック関数には、第一引数に対象のノートオブジェクトが渡されます。
+
+### Plugin:register_user_action(title fn)
+ユーザーメニューに項目を追加します。第一引数に項目名、第二引数に項目が選択された際のコールバック関数を渡します。 コールバック関数には、第一引数に対象のユーザーオブジェクトが渡されます。
+
+### Plugin:register_note_view_interruptor(fn)
+UIに表示されるノート情報を書き換えます。 コールバック関数には、第一引数に対象のノートオブジェクトが渡されます。 コールバック関数の返り値でノートが書き換えられます。
+
+### Plugin:register_note_post_interruptor(fn)
+ノート投稿時にノート情報を書き換えます。 コールバック関数には、第一引数に対象のノートオブジェクトが渡されます。 コールバック関数の返り値でノートが書き換えられます。
+
+### Plugin:open_url(url)
+第一引数に渡されたURLをブラウザの新しいタブで開きます。
+
+### Plugin:config
+プラグインの設定が格納されるオブジェクト。プラグイン定義のconfigで設定したキーで値が入ります。
diff --git a/src/docs/jbo-EN/advanced/develop-bot.md b/src/docs/jbo-EN/advanced/develop-bot.md
new file mode 100644
index 0000000000..7f825e9bc4
--- /dev/null
+++ b/src/docs/jbo-EN/advanced/develop-bot.md
@@ -0,0 +1,6 @@
+# Botの作成
+[Misskey API](./api)を利用してBotの開発が可能です。 また、いくつかのBot実装が公開されているため、ぜひ参考にしてください。
+
+- [syuilo/ai](https://github.com/syuilo/ai) ... Node.js上で動く、TypeScript製Bot実装
+
+Botを作成したときは、プロフィール設定からBotフラグをオンにしておくことを強くおすすめします。
diff --git a/src/docs/jbo-EN/advanced/reversi-bot.md b/src/docs/jbo-EN/advanced/reversi-bot.md
new file mode 100644
index 0000000000..7ab2a7212e
--- /dev/null
+++ b/src/docs/jbo-EN/advanced/reversi-bot.md
@@ -0,0 +1,160 @@
+# MisskeyリバーシBotの開発
+Misskeyのリバーシ機能に対応したBotの開発方法をここに記します。
+
+1. `games/reversi`ストリームに以下のパラメータを付けて接続する:
+    * `i`: botアカウントのAPIキー
+
+2. 対局への招待が来たら、ストリームから`invited`イベントが流れてくる
+    * イベントの中身に、`parent`という名前で対局へ誘ってきたユーザーの情報が含まれている
+
+3. `games/reversi/match`へ、`user_id`として`parent`の`id`が含まれたリクエストを送信する
+
+4. 上手くいくとゲーム情報が返ってくるので、`games/reversi-game`ストリームへ、以下のパラメータを付けて接続する:
+    * `i`: botアカウントのAPIキー
+    * `game`: `game`の`id`
+
+5. この間、相手がゲームの設定を変更するとその都度`update-settings`イベントが流れてくるので、必要であれば何かしらの処理を行う
+
+6. 設定に満足したら、`{ type: 'accept' }`メッセージをストリームに送信する
+
+7. ゲームが開始すると、`started`イベントが流れてくる
+    * イベントの中身にはゲーム情報が含まれている
+
+8. 石を打つには、ストリームに`{ type: 'set', pos: <位置> }`を送信する(位置の計算方法は後述)
+
+9. 相手または自分が石を打つと、ストリームから`set`イベントが流れてくる
+    * `color`として石の色が含まれている
+    * `pos`として位置情報が含まれている
+
+## 位置の計算法
+8x8のマップを考える場合、各マスの位置(インデックスと呼びます)は次のようになっています:
+```
++--+--+--+--+--+--+--+--+
+| 0| 1| 2| 3| 4| 5| 6| 7|
++--+--+--+--+--+--+--+--+
+| 8| 9|10|11|12|13|14|15|
++--+--+--+--+--+--+--+--+
+|16|17|18|19|20|21|22|23|
+...
+```
+
+### X,Y座標 から インデックス に変換する
+```
+pos = x + (y * mapWidth)
+```
+`mapWidth`は、ゲーム情報の`map`から、次のようにして計算できます:
+```
+mapWidth = map[0].length
+```
+
+### インデックス から X,Y座標 に変換する
+```
+x = pos % mapWidth
+y = Math.floor(pos / mapWidth)
+```
+
+## マップ情報
+マップ情報は、ゲーム情報の`map`に入っています。 文字列の配列になっており、ひとつひとつの文字がマス情報を表しています。 それをもとにマップのデザインを知る事が出来ます:
+* `(スペース)` ... マス無し
+* `-` ... マス
+* `b` ... 初期配置される黒石
+* `w` ... 初期配置される白石
+
+例えば、4*4の次のような単純なマップがあるとします:
+```text
++---+---+---+---+
+|   |   |   |   |
++---+---+---+---+
+|   | ○ | ● |   |
++---+---+---+---+
+|   | ● | ○ |   |
++---+---+---+---+
+|   |   |   |   |
++---+---+---+---+
+```
+
+この場合、マップデータはこのようになります:
+```javascript
+['----', '-wb-', '-bw-', '----']
+```
+
+## ユーザーにフォームを提示して対話可能Botを作成する
+ユーザーとのコミュニケーションを行うため、ゲームの設定画面でユーザーにフォームを提示することができます。 例えば、Botの強さをユーザーが設定できるようにする、といったシナリオが考えられます。
+
+フォームを提示するには、`reversi-game`ストリームに次のメッセージを送信します:
+```javascript
+{
+  type: 'init-form',
+  body: [フォームコントロールの配列]
+}
+```
+
+フォームコントロールの配列については今から説明します。 フォームコントロールは、次のようなオブジェクトです:
+```javascript
+{
+  id: 'switch1',
+  type: 'switch',
+  label: 'Enable hoge',
+  value: false
+}
+```
+`id` ... コントロールのID。 `type` ... コントロールの種類。後述します。 `label` ... コントロールと一緒に表記するテキスト。 `value` ... コントロールのデフォルト値。
+
+### フォームの操作を受け取る
+ユーザーがフォームを操作すると、ストリームから`update-form`イベントが流れてきます。 イベントの中身には、コントロールのIDと、ユーザーが設定した値が含まれています。 例えば、上で示したスイッチをユーザーがオンにしたとすると、次のイベントが流れてきます:
+```javascript
+{
+  id: 'switch1',
+  value: true
+}
+```
+
+### フォームコントロールの種類
+#### スイッチ
+type: `switch` スイッチを表示します。何かの機能をオン/オフさせたい場合に有用です。
+
+##### プロパティ
+`label` ... スイッチに表記するテキスト。
+
+#### ラジオボタン
+type: `radio` ラジオボタンを表示します。選択肢を提示するのに有用です。例えば、Botの強さを設定させるなどです。
+
+##### プロパティ
+`items` ... ラジオボタンの選択肢。例:
+```javascript
+items: [{
+  label: 'å¼±',
+  value: 1
+}, {
+  label: '中',
+  value: 2
+}, {
+  label: 'å¼·',
+  value: 3
+}]
+```
+
+#### スライダー
+type: `slider` スライダーを表示します。
+
+##### プロパティ
+`min` ... スライダーの下限。 `max` ... スライダーの上限。 `step` ... 入力欄で刻むステップ値。
+
+#### テキストボックス
+type: `textbox` テキストボックスを表示します。ユーザーになにか入力させる一般的な用途に利用できます。
+
+## ユーザーにメッセージを表示する
+設定画面でユーザーと対話する、フォーム以外のもうひとつの方法がこれです。ユーザーになにかメッセージを表示することができます。 例えば、ユーザーがBotの対応していないモードやマップを選択したとき、警告を表示するなどです。 メッセージを表示するには、次のメッセージをストリームに送信します:
+```javascript
+{
+  type: 'message',
+  body: {
+    text: 'メッセージ内容',
+    type: 'メッセージの種類'
+  }
+}
+```
+メッセージの種類: `success`, `info`, `warning`, `error`。
+
+## 投了する
+投了をするには、<a href="./api/endpoints/games/reversi/games/surrender">このエンドポイント</a>にリクエストします。
diff --git a/src/docs/jbo-EN/advanced/stream.md b/src/docs/jbo-EN/advanced/stream.md
new file mode 100644
index 0000000000..0e5edd2b0c
--- /dev/null
+++ b/src/docs/jbo-EN/advanced/stream.md
@@ -0,0 +1,350 @@
+# ストリーミングAPI
+
+ストリーミングAPIを使うと、リアルタイムで様々な情報(例えばタイムラインに新しい投稿が流れてきた、メッセージが届いた、フォローされた、など)を受け取ったり、様々な操作を行ったりすることができます。
+
+## ストリームに接続する
+
+ストリーミングAPIを利用するには、まずMisskeyサーバーに**websocket**接続する必要があります。
+
+以下のURLに、`i`というパラメータ名で認証情報を含めて、websocket接続してください。例:
+```
+%WS_URL%/streaming?i=xxxxxxxxxxxxxxx
+```
+
+認証情報は、自分のAPIキーや、アプリケーションからストリームに接続する際はユーザーのアクセストークンのことを指します。
+
+<div class="info">ℹ️ 認証情報の取得については、<a href="./api">こちらのドキュメント</a>をご確認ください。</div>
+
+---
+
+認証情報は省略することもできますが、その場合非ログインでの利用ということになり、受信できる情報や可能な操作は限られます。例:
+
+```
+%WS_URL%/streaming
+```
+
+---
+
+ストリームに接続すると、後述するAPI操作や、投稿の購読を行ったりすることができます。 しかしまだこの段階では、例えばタイムラインへの新しい投稿を受信したりすることはできません。 それを行うには、ストリーム上で、後述する**チャンネル**に接続する必要があります。
+
+**ストリームでのやり取りはすべてJSONです。**
+
+## チャンネル
+MisskeyのストリーミングAPIにはチャンネルという概念があります。これは、送受信する情報を分離するための仕組みです。 Misskeyのストリームに接続しただけでは、まだリアルタイムでタイムラインの投稿を受信したりはできません。 ストリーム上でチャンネルに接続することで、様々な情報を受け取ったり情報を送信したりすることができるようになります。
+
+ひとつのストリーム上で、同時に複数のチャンネルに接続することができます。
+
+### チャンネルに接続する
+チャンネルに接続するには、次のようなデータをJSONでストリームに送信します:
+
+```json
+{
+    type: 'connect',
+    body: {
+        channel: 'xxxxxxxx',
+        id: 'foobar',
+        params: {
+            ...
+        }
+    }
+}
+```
+
+ここで、
+* `channel`には接続したいチャンネル名を設定します。チャンネルの種類については後述します。
+* `id`にはそのチャンネルとやり取りするための任意のIDを設定します。ストリームでは様々なメッセージが流れるので、そのメッセージがどのチャンネルからのものなのか識別する必要があるからです。このIDは、UUIDや、乱数のようなもので構いません。
+* `params`はチャンネルに接続する際のパラメータです。チャンネルによって接続時に必要とされるパラメータは異なります。パラメータ不要のチャンネルに接続する際は、このプロパティは省略可能です。
+
+<div class="info">ℹ️ IDはチャンネルごとではなく「チャンネルの接続ごと」です。なぜなら、同じチャンネルに異なるパラメータで複数接続するケースもあるからです。</div>
+
+### チャンネルからのメッセージを受け取る
+例えばタイムラインのチャンネルなら、新しい投稿があった時にメッセージを発します。そのメッセージを受け取ることで、タイムラインに新しい投稿がされたことをリアルタイムで知ることができます。
+
+チャンネルがメッセージを発すると、次のようなデータがJSONでストリームに流れてきます:
+```json
+{
+    type: 'channel',
+    body: {
+        id: 'foobar',
+        type: 'something',
+        body: {
+            some: 'thing'
+        }
+    }
+}
+```
+
+ここで、
+* `id`には前述したそのチャンネルに接続する際に設定したIDが設定されています。これで、このメッセージがどのチャンネルからのものなのか知ることができます。
+* `type`にはメッセージの種類が設定されます。チャンネルによって、どのような種類のメッセージが流れてくるかは異なります。
+* `body`にはメッセージの内容が設定されます。チャンネルによって、どのような内容のメッセージが流れてくるかは異なります。
+
+### チャンネルに向けてメッセージを送信する
+チャンネルによっては、メッセージを受け取るだけでなく、こちらから何かメッセージを送信し、何らかの操作を行える場合があります。
+
+チャンネルにメッセージを送信するには、次のようなデータをJSONでストリームに送信します:
+```json
+{
+    type: 'channel',
+    body: {
+        id: 'foobar',
+        type: 'something',
+        body: {
+            some: 'thing'
+        }
+    }
+}
+```
+
+ここで、
+* `id`には前述したそのチャンネルに接続する際に設定したIDを設定します。これで、このメッセージがどのチャンネルに向けたものなのか識別させることができます。
+* `type`にはメッセージの種類を設定します。チャンネルによって、どのような種類のメッセージを受け付けるかは異なります。
+* `body`にはメッセージの内容を設定します。チャンネルによって、どのような内容のメッセージを受け付けるかは異なります。
+
+### チャンネルから切断する
+チャンネルから切断するには、次のようなデータをJSONでストリームに送信します:
+
+```json
+{
+    type: 'disconnect',
+    body: {
+        id: 'foobar'
+    }
+}
+```
+
+ここで、
+* `id`には前述したそのチャンネルに接続する際に設定したIDを設定します。
+
+## ストリームを経由してAPIリクエストする
+
+ストリームを経由してAPIリクエストすると、HTTPリクエストを発生させずにAPIを利用できます。そのため、コードを簡潔にできたり、パフォーマンスの向上を見込めるかもしれません。
+
+ストリームを経由してAPIリクエストするには、次のようなデータをJSONでストリームに送信します:
+```json
+{
+    type: 'api',
+    body: {
+        id: 'xxxxxxxxxxxxxxxx',
+        endpoint: 'notes/create',
+        data: {
+            text: 'yee haw!'
+        }
+    }
+}
+```
+
+ここで、
+* `id`には、APIのレスポンスを識別するための、APIリクエストごとの一意なIDを設定する必要があります。UUIDや、簡単な乱数のようなもので構いません。
+* `endpoint`には、あなたがリクエストしたいAPIのエンドポイントを指定します。
+* `data`には、エンドポイントのパラメータを含めます。
+
+<div class="info">ℹ️ APIのエンドポイントやパラメータについてはAPIリファレンスをご確認ください。</div>
+
+### レスポンスの受信
+
+APIへリクエストすると、レスポンスがストリームから次のような形式で流れてきます。
+
+```json
+{
+    type: 'api:xxxxxxxxxxxxxxxx',
+    body: {
+        ...
+    }
+}
+```
+
+ここで、
+* `xxxxxxxxxxxxxxxx`の部分には、リクエストの際に設定された`id`が含まれています。これにより、どのリクエストに対するレスポンスなのか判別することができます。
+* `body`には、レスポンスが含まれています。
+
+## 投稿のキャプチャ
+
+Misskeyは投稿のキャプチャと呼ばれる仕組みを提供しています。これは、指定した投稿のイベントをストリームで受け取る機能です。
+
+例えばタイムラインを取得してユーザーに表示したとします。ここで誰かがそのタイムラインに含まれるどれかの投稿に対してリアクションしたとします。
+
+しかし、クライアントからするとある投稿にリアクションが付いたことなどは知る由がないため、リアルタイムでリアクションをタイムライン上の投稿に反映して表示するといったことができません。
+
+この問題を解決するために、Misskeyは投稿のキャプチャ機構を用意しています。投稿をキャプチャすると、その投稿に関するイベントを受け取ることができるため、リアルタイムでリアクションを反映させたりすることが可能になります。
+
+### 投稿をキャプチャする
+
+投稿をキャプチャするには、ストリームに次のようなメッセージを送信します:
+
+```json
+{
+    type: 'subNote',
+    body: {
+        id: 'xxxxxxxxxxxxxxxx'
+    }
+}
+```
+
+ここで、
+* `id`にキャプチャしたい投稿の`id`を設定します。
+
+このメッセージを送信すると、Misskeyにキャプチャを要請したことになり、以後、その投稿に関するイベントが流れてくるようになります。
+
+例えば投稿にリアクションが付いたとすると、次のようなメッセージが流れてきます:
+
+```json
+{
+    type: 'noteUpdated',
+    body: {
+        id: 'xxxxxxxxxxxxxxxx',
+        type: 'reacted',
+        body: {
+            reaction: 'like',
+            userId: 'yyyyyyyyyyyyyyyy'
+        }
+    }
+}
+```
+
+ここで、
+* `body`内の`id`に、イベントを発生させた投稿のIDが設定されます。
+* `body`内の`type`に、イベントの種類が設定されます。
+* `body`内の`body`に、イベントの詳細が設定されます。
+
+#### イベントの種類
+
+##### `reacted`
+その投稿にリアクションがされた時に発生します。
+
+* `reaction`に、リアクションの種類が設定されます。
+* `userId`に、リアクションを行ったユーザーのIDが設定されます。
+
+例:
+```json
+{
+    type: 'noteUpdated',
+    body: {
+        id: 'xxxxxxxxxxxxxxxx',
+        type: 'reacted',
+        body: {
+            reaction: 'like',
+            userId: 'yyyyyyyyyyyyyyyy'
+        }
+    }
+}
+```
+
+##### `deleted`
+その投稿が削除された時に発生します。
+
+* `deletedAt`に、削除日時が設定されます。
+
+例:
+```json
+{
+    type: 'noteUpdated',
+    body: {
+        id: 'xxxxxxxxxxxxxxxx',
+        type: 'deleted',
+        body: {
+            deletedAt: '2018-10-22T02:17:09.703Z'
+        }
+    }
+}
+```
+
+##### `pollVoted`
+その投稿に添付されたアンケートに投票された時に発生します。
+
+* `choice`に、選択肢IDが設定されます。
+* `userId`に、投票を行ったユーザーのIDが設定されます。
+
+例:
+```json
+{
+    type: 'noteUpdated',
+    body: {
+        id: 'xxxxxxxxxxxxxxxx',
+        type: 'pollVoted',
+        body: {
+            choice: 2,
+            userId: 'yyyyyyyyyyyyyyyy'
+        }
+    }
+}
+```
+
+### 投稿のキャプチャを解除する
+
+その投稿がもう画面に表示されなくなったりして、その投稿に関するイベントをもう受け取る必要がなくなったときは、キャプチャの解除を申請してください。
+
+次のメッセージを送信します:
+
+```json
+{
+    type: 'unsubNote',
+    body: {
+        id: 'xxxxxxxxxxxxxxxx'
+    }
+}
+```
+
+ここで、
+* `id`にキャプチャを解除したい投稿の`id`を設定します。
+
+このメッセージを送信すると、以後、その投稿に関するイベントは流れてこないようになります。
+
+# チャンネル一覧
+## `main`
+アカウントに関する基本的な情報が流れてきます。このチャンネルにパラメータはありません。
+
+### 流れてくるイベント一覧
+
+#### `renote`
+自分の投稿がRenoteされた時に発生するイベントです。自分自身の投稿をRenoteしたときは発生しません。
+
+#### `mention`
+誰かからメンションされたときに発生するイベントです。
+
+#### `readAllNotifications`
+自分宛ての通知がすべて既読になったことを表すイベントです。このイベントを利用して、「通知があることを示すアイコン」のようなものをオフにしたりする等のケースが想定されます。
+
+#### `meUpdated`
+自分の情報が更新されたことを表すイベントです。
+
+#### `follow`
+自分が誰かをフォローしたときに発生するイベントです。
+
+#### `unfollow`
+自分が誰かのフォローを解除したときに発生するイベントです。
+
+#### `followed`
+自分が誰かにフォローされたときに発生するイベントです。
+
+## `homeTimeline`
+ホームタイムラインの投稿情報が流れてきます。このチャンネルにパラメータはありません。
+
+### 流れてくるイベント一覧
+
+#### `note`
+タイムラインに新しい投稿が流れてきたときに発生するイベントです。
+
+## `localTimeline`
+ローカルタイムラインの投稿情報が流れてきます。このチャンネルにパラメータはありません。
+
+### 流れてくるイベント一覧
+
+#### `note`
+ローカルタイムラインに新しい投稿が流れてきたときに発生するイベントです。
+
+## `hybridTimeline`
+ソーシャルタイムラインの投稿情報が流れてきます。このチャンネルにパラメータはありません。
+
+### 流れてくるイベント一覧
+
+#### `note`
+ソーシャルタイムラインに新しい投稿が流れてきたときに発生するイベントです。
+
+## `globalTimeline`
+グローバルタイムラインの投稿情報が流れてきます。このチャンネルにパラメータはありません。
+
+### 流れてくるイベント一覧
+
+#### `note`
+グローバルタイムラインに新しい投稿が流れてきたときに発生するイベントです。
diff --git a/src/docs/jbo-EN/features/antenna.md b/src/docs/jbo-EN/features/antenna.md
new file mode 100644
index 0000000000..94ad9e4aea
--- /dev/null
+++ b/src/docs/jbo-EN/features/antenna.md
@@ -0,0 +1,4 @@
+# アンテナ
+アンテナは、自由に条件を設定して、合致するノートを自動で収集することができる機能です。
+
+条件を設定したアンテナが作成された状態で、条件に合致するノートが投稿されると、リアルタイムでそのアンテナのタイムラインにノートが追加されます。
diff --git a/src/docs/jbo-EN/features/custom-emoji.md b/src/docs/jbo-EN/features/custom-emoji.md
new file mode 100644
index 0000000000..ed2e92be16
--- /dev/null
+++ b/src/docs/jbo-EN/features/custom-emoji.md
@@ -0,0 +1,2 @@
+# カスタム絵文字
+カスタム絵文字は、インスタンスで用意された画像を絵文字のように使える機能です。 ノート、リアクション、チャット、自己紹介、名前などの場所で使うことができます。 カスタム絵文字をそれらの場所で使うには、絵文字ピッカーボタン(ある場合)を押すか、`:`を入力して絵文字サジェストを表示します。 テキスト内に`:foo:`のような形式の文字列が見つかると、`foo`の部分がカスタム絵文字名と解釈され、表示時には対応したカスタム絵文字に置き換わります。
diff --git a/src/docs/jbo-EN/features/deck.md b/src/docs/jbo-EN/features/deck.md
new file mode 100644
index 0000000000..8057e262fd
--- /dev/null
+++ b/src/docs/jbo-EN/features/deck.md
@@ -0,0 +1,18 @@
+# デッキ
+
+デッキは利用可能なUIのひとつです。「カラム」と呼ばれるビューを複数並べて表示させることで、カスタマイズ性が高く、情報量の多いUIが構築できることが特徴です。
+
+## カラムの追加
+デッキの背景を右クリックし、「カラムを追加」して任意のカラムを追加できます。
+
+## カラムの移動
+カラムは、ドラッグアンドドロップで他のカラムと位置を入れ替えることが出来るほか、カラムメニュー(カラムのヘッダー右クリック)から位置を移動させることもできます。
+
+## カラムの水平分割
+カラムは左右だけでなく、上下に並べることもできます。 カラムメニューを開き、「左に重ねる」を選択すると、左のカラムの下に現在のカラムが移動します。 上下分割を解除するには、カラムメニューの「右に出す」を選択します。
+
+## カラムの設定
+カラムメニューの「編集」を選択するとカラムの設定を編集できます。カラムの名前を変えたり、幅を変えたりできます。
+
+## デッキの設定
+デッキに関する設定は、[settings/deck](/settings/deck)で行えます。
diff --git a/src/docs/jbo-EN/features/drive.md b/src/docs/jbo-EN/features/drive.md
new file mode 100644
index 0000000000..b82a41082a
--- /dev/null
+++ b/src/docs/jbo-EN/features/drive.md
@@ -0,0 +1,17 @@
+# ドライブ
+ドライブは、Misskey上でファイルを管理できる機能です。
+
+[ドライブのページ](/my/drive)から任意のファイルをアップロードできるほか、アバターに設定した画像や、ノートに添付したファイルなどもすべてドライブにアップロードされます。
+
+<div class="warn">⚠️ ドライブからファイルを削除すると、そのファイルが添付されたノートも消えます。</div>
+
+ドライブにアップロードされたファイルは、いつでもダウンロードすることができるほか、ノート作成時に「ドライブからファイルを添付」することでファイルを再利用することもできます。
+
+ドライブ内にフォルダを作り、複数のファイルをまとめて整理することもできます。
+
+## 閲覧注意 (NSFW)
+<div class="info">ℹ️ この項目が閲覧注意なわけではありません</div>
+
+閲覧注意またはNSFW (Not safe for work) は、ドライブのファイルに設定することができるフラグです。 閲覧注意フラグを設定されたファイルは、表示される際に閲覧者の操作なしには表示されなくなります。 このフラグは、例えば職場や公共の場で閲覧するのに適切でないと思われる画像などに設定し、そのような画像が突然表示されてしまうことを防ぐ目的で使われます。
+
+このフラグは手動でオンオフを切り替えられるほか、モデレーターの判断で設定される場合もあります。
diff --git a/src/docs/jbo-EN/features/favorite.md b/src/docs/jbo-EN/features/favorite.md
new file mode 100644
index 0000000000..a0e5f8bf78
--- /dev/null
+++ b/src/docs/jbo-EN/features/favorite.md
@@ -0,0 +1,4 @@
+# お気に入り
+[ノート](./node)をお気に入りとして登録できる機能です。 お気に入り登録したノートは、[お気に入りページ](./my/favorites)で一覧することができます。 お気に入りに登録したことは相手に通知されず、お気に入りは自分しか見ることができません。
+
+ノートをお気に入り登録するには、ノートメニューの「お気に入り」を押します。お気に入り解除するには、ノートメニューの「お気に入り解除」を押します。
diff --git a/src/docs/jbo-EN/features/follow.md b/src/docs/jbo-EN/features/follow.md
new file mode 100644
index 0000000000..3c1ea7bbe0
--- /dev/null
+++ b/src/docs/jbo-EN/features/follow.md
@@ -0,0 +1,2 @@
+# フォロー
+ユーザーをフォローすると、タイムラインにそのユーザーの投稿が表示されるようになります。ただし、他のユーザーに対する返信は含まれません。 ユーザーをフォローするには、ユーザーページの「フォロー」ボタンをクリックします。フォローを解除するには、もう一度クリックします。
diff --git a/src/docs/jbo-EN/features/keyboard-shortcut.md b/src/docs/jbo-EN/features/keyboard-shortcut.md
new file mode 100644
index 0000000000..8659ace982
--- /dev/null
+++ b/src/docs/jbo-EN/features/keyboard-shortcut.md
@@ -0,0 +1,66 @@
+# キーボードショートカット
+
+## グローバル
+これらのショートカットは基本的にどこでも使えます。
+<table>
+    <thead>
+        <tr><th>ショートカット</th><th>効果</th><th>由来</th></tr>
+    </thead>
+    <tbody>
+        <tr><td><kbd class="key">P</kbd>, <kbd class="key">N</kbd></td><td>新規投稿</td><td><b>P</b>ost, <b>N</b>ew, <b>N</b>ote</td></tr>
+        <tr><td><kbd class="key">T</kbd></td><td>タイムラインの最も新しい投稿にフォーカス</td><td><b>T</b>imeline, <b>T</b>op</td></tr>
+        <tr><td><kbd class="group"><kbd class="key">Shift</kbd> + <kbd class="key">N</kbd></kbd></td><td>通知を表示/隠す</td><td><b>N</b>otifications</td></tr>
+        <tr><td><kbd class="key">S</kbd></td><td>検索</td><td><b>S</b>earch</td></tr>
+        <tr><td><kbd class="key">H</kbd>, <kbd class="key">?</kbd></td><td>ヘルプを表示</td><td><b>H</b>elp</td></tr>
+    </tbody>
+</table>
+
+## 投稿にフォーカスされた状態
+<table>
+    <thead>
+        <tr><th>ショートカット</th><th>効果</th><th>由来</th></tr>
+    </thead>
+    <tbody>
+        <tr><td><kbd class="key">↑</kbd>, <kbd class="key">K</kbd>, <kbd class="group"><kbd class="key">Shift</kbd> + <kbd class="key">Tab</kbd></kbd></td><td>上の投稿にフォーカスを移動</td><td>-</td></tr>
+        <tr><td><kbd class="key">↓</kbd>, <kbd class="key">J</kbd>, <kbd class="key">Tab</kbd></td><td>下の投稿にフォーカスを移動</td><td>-</td></tr>
+        <tr><td><kbd class="key">R</kbd></td><td>返信フォームを開く</td><td><b>R</b>eply</td></tr>
+        <tr><td><kbd class="key">Q</kbd></td><td>Renoteフォームを開く</td><td><b>Q</b>uote</td></tr>
+        <tr><td><kbd class="group"><kbd class="key">Ctrl</kbd> + <kbd class="key">Q</kbd></kbd></td><td>即刻Renoteする(フォームを開かずに)</td><td>-</td></tr>
+        <tr><td><kbd class="key">E</kbd>, <kbd class="key">A</kbd>, <kbd class="key">+</kbd></td><td>リアクションフォームを開く</td><td><b>E</b>mote, re<b>A</b>ction</td></tr>
+        <tr><td><kbd class="key">0</kbd>~<kbd class="key">9</kbd></td><td>数字に対応したリアクションをする(対応については後述)</td><td>-</td></tr>
+        <tr><td><kbd class="key">F</kbd>, <kbd class="key">B</kbd></td><td>お気に入りに登録</td><td><b>F</b>avorite, <b>B</b>ookmark</td></tr>
+        <tr><td><kbd class="key">Del</kbd>, <kbd class="group"><kbd class="key">Ctrl</kbd> + <kbd class="key">D</kbd></kbd></td><td>投稿を削除</td><td><b>D</b>elete</tr>
+        <tr><td><kbd class="key">M</kbd>, <kbd class="key">O</kbd></td><td>投稿に対するメニューを開く</td><td><b>M</b>ore, <b>O</b>ther</td></tr>
+        <tr><td><kbd class="key">S</kbd></td><td>CWで隠された部分を表示 or 隠す</td><td><b>S</b>how, <b>S</b>ee</td></tr>
+        <tr><td><kbd class="key">Esc</kbd></td><td>フォーカスを外す</td><td>-</td></tr>
+    </tbody>
+</table>
+
+## Renoteフォーム
+<table>
+    <thead>
+        <tr><th>ショートカット</th><th>効果</th><th>由来</th></tr>
+    </thead>
+    <tbody>
+        <tr><td><kbd class="key">Enter</kbd></td><td>Renoteする</td><td>-</td></tr>
+        <tr><td><kbd class="key">Q</kbd></td><td>フォームを展開する</td><td><b>Q</b>uote</td></tr>
+        <tr><td><kbd class="key">Esc</kbd></td><td>フォームを閉じる</td><td>-</td></tr>
+    </tbody>
+</table>
+
+## リアクションフォーム
+デフォルトで「👍」にフォーカスが当たっている状態です。
+<table>
+    <thead>
+        <tr><th>ショートカット</th><th>効果</th><th>由来</th></tr>
+    </thead>
+    <tbody>
+        <tr><td><kbd class="key">↑</kbd>, <kbd class="key">K</kbd></td><td>上のリアクションにフォーカスを移動</td><td>-</td></tr>
+        <tr><td><kbd class="key">↓</kbd>, <kbd class="key">J</kbd></td><td>下のリアクションにフォーカスを移動</td><td>-</td></tr>
+        <tr><td><kbd class="key">←</kbd>, <kbd class="key">H</kbd>, <kbd class="group"><kbd class="key">Shift</kbd> + <kbd class="key">Tab</kbd></kbd></td><td>左のリアクションにフォーカスを移動</td><td>-</td></tr>
+        <tr><td><kbd class="key">→</kbd>, <kbd class="key">L</kbd>, <kbd class="key">Tab</kbd></td><td>右のリアクションにフォーカスを移動</td><td>-</td></tr>
+        <tr><td><kbd class="key">Enter</kbd>, <kbd class="key">Space</kbd>, <kbd class="key">+</kbd></td><td>リアクション確定</td><td>-</td></tr>
+        <tr><td><kbd class="key">0</kbd>~<kbd class="key">9</kbd></td><td>数字に対応したリアクションで確定</td><td>-</td></tr>
+        <tr><td><kbd class="key">Esc</kbd></td><td>リアクションするのをやめる</td><td>-</td></tr>
+    </tbody>
+</table>
diff --git a/src/docs/jbo-EN/features/mfm.md b/src/docs/jbo-EN/features/mfm.md
new file mode 100644
index 0000000000..5be2df4f30
--- /dev/null
+++ b/src/docs/jbo-EN/features/mfm.md
@@ -0,0 +1,12 @@
+# MFM
+MFMは、Misskey Flavored Markdownの略で、Misskeyの様々な場所で使用できる専用のマークアップ言語です。 MFMで使用可能な構文は[MFMチートシート](/mfm-cheat-sheet)で確認できます。
+
+## MFMが使用可能な場所の例
+- ノート本文
+- CW注釈
+- ユーザーの名前
+- ユーザーの自己紹介
+
+## 開発者向け情報
+MFMのパーサー実装はライブラリとして公開されており、簡単にクライアントにMFMを組み込むことが可能です。
+- [misskey-dev/mfm.js](https://github.com/misskey-dev/mfm.js) - JavaScriptパーサー実装
diff --git a/src/docs/jbo-EN/features/mute.md b/src/docs/jbo-EN/features/mute.md
new file mode 100644
index 0000000000..6a9608662a
--- /dev/null
+++ b/src/docs/jbo-EN/features/mute.md
@@ -0,0 +1,13 @@
+# ミュート
+
+ユーザーをミュートすると、そのユーザーに関する次のコンテンツがMisskeyに表示されなくなります:
+
+* タイムラインや投稿の検索結果内の、そのユーザーの投稿(およびそれらの投稿に対する返信やRenote)
+* そのユーザーからの通知
+* メッセージ履歴一覧内の、そのユーザーとのメッセージ履歴
+
+ユーザーをミュートするには、対象のユーザーのユーザーページに表示されている「ミュート」ボタンを押します。
+
+ミュートを行ったことは相手に通知されず、ミュートされていることを知ることもできません。
+
+設定>ミュート から、自分がミュートしているユーザー一覧を確認することができます。
diff --git a/src/docs/jbo-EN/features/note.md b/src/docs/jbo-EN/features/note.md
new file mode 100644
index 0000000000..62440b25f9
--- /dev/null
+++ b/src/docs/jbo-EN/features/note.md
@@ -0,0 +1,51 @@
+# ノート
+ノートは、Misskeyに投稿される、文章、ファイル、アンケートなどを含むコンテンツで、Misskeyの中心的概念です。また、そのノートを作成する行為自体もノートと呼ばれます。
+
+ノートが作成されると、[タイムライン](./timeline)に追加され、自分の[フォロワー](./follow)やサーバーのユーザーが見れるようになります。
+
+ノートには、[リアクション](./reaction)を行うことができます。また、返信や引用もできます。
+
+ノートを[お気に入り](./favorite)登録することで、後で簡単に見返すことができます。
+
+## ノートを作成する
+ノートを作成するには、画面上にある鉛筆マークのボタンを押して、作成フォームを開きます。作成フォームに内容を入力し、「ノート」ボタンを押すことでノートが作成されます。 ノートには、画像、動画など任意のファイルや、[アンケート](./poll)を添付することができます。また、本文中には[MFM](./mfm)が使用でき、[メンション](./mention)や[ハッシュタグ](./hashtag)を含めることもできます。 他にも、CWや公開範囲といった設定も行えます(詳細は後述)。
+<div class="info">ℹ️ コンピューターのクリップボードに画像データがある状態で、フォーム内のテキストボックスにペーストするとその画像を添付することができます。</div>
+<div class="info">ℹ️ テキストボックス内で<kbd class="key">Ctrl + Enter</kbd>を押すことでも投稿できます。</div>
+
+## Renote
+既にあるノートを引用、もしくはそのノートを新しいノートとして共有する行為、またそれによって作成されたノートをRenoteと呼びます。 自分がフォローしているユーザーの、気に入ったノートを自分のフォロワーに共有したい場合や、過去の自分のノートを再度共有したい場合に使います。 同じノートに対して無制限にRenoteを行うことができますが、あまり連続して使用すると迷惑になる場合もあるので、注意しましょう。
+<div class="warn">⚠️ 公開範囲がフォロワーやダイレクトのノートはRenoteできません</div>
+
+Renoteを削除するには、Renoteの時刻表示の隣にある「...」を押し、「Renote解除」を選択します。
+
+## CW
+Contents Warningの略で、ノートの内容を、閲覧者の操作なしには表示しないようにできる機能です。主に長大な内容を隠すためや、ネタバレ防止などに使うことができます。 設定するには、フォームの「内容を隠す」ボタン(目のアイコン)を押します。すると新しい入力エリアが表れるので、そこに内容の要約を記入します。
+
+## 公開範囲
+ノートごとに、そのノートが公開される範囲を設定することができます。フォームの「ノート」ボタンの左にあるアイコンを押すと公開範囲を以下から選択できます。
+
+### パブリック
+全ての人に対してノートが公開されるほか、サーバーの全てのタイムライン(ホームタイムライン、ローカルタイムライン、ソーシャルタイムライン、グローバルタイムライン)にノートが流れます。
+<div class="warn">⚠️ アカウントが<a href="./silence">サイレンス</a>状態の時は、この公開範囲は使用できません。</div>
+
+### ホーム
+全ての人に対してノートが公開されますが、フォロワー以外のローカルタイムライン、ソーシャルタイムライン、グローバルタイムラインにはノートは流れません。
+
+### フォロワー
+自分のフォロワーに対してのみノートを公開します。フォロワーの全てのタイムラインに流れます。
+
+### ダイレクト
+指定したユーザーに対してのみノートを公開します。指定したユーザーの全てのタイムラインに流れます。
+
+### 「ローカルのみ」オプション
+このオプションを有効にすると、リモートにノートを連合しなくなります。
+
+### 公開範囲の比較
+<table>
+    <tr><th></th><th>パブリック</th><th>ホーム</th><th>フォロワー</th><th>ダイレクト</th></tr>
+    <tr><th>フォロワーのLTL/STL/GTL</th><td>✔</td><td>✔</td><td>✔</td><td></td></tr>
+    <tr><th>非フォロワーのLTL/STL/GTL</th><td>✔</td><td></td><td></td><td></td></tr>
+</table>
+
+## ピン留め
+ノートをピン留めすると、ユーザーページに常にそのノートを表示しておくことができます。 ノートのメニューを開き、「ピン留め」を選択してピン留めできます。 複数のノートをピン留めできます。
diff --git a/src/docs/jbo-EN/features/pages.md b/src/docs/jbo-EN/features/pages.md
new file mode 100644
index 0000000000..a7311b95e6
--- /dev/null
+++ b/src/docs/jbo-EN/features/pages.md
@@ -0,0 +1,10 @@
+# Pages
+
+## 変数
+変数を使うことで動的なページを作成できます。テキスト内で <b>{ 変数名 }</b> と書くとそこに変数の値を埋め込めます。例えば <b>Hello { thing } world!</b> というテキストで、変数(thing)の値が <b>ai</b> だった場合、テキストは <b>Hello ai world!</b> になります。
+
+変数の評価(値を算出すること)は上から下に行われるので、ある変数の中で自分より下の変数を参照することはできません。例えば上から <b>A、B、C</b> と3つの変数を定義したとき、<b>C</b>の中で<b>A</b>や<b>B</b>を参照することはできますが、<b>A</b>の中で<b>B</b>や<b>C</b>を参照することはできません。
+
+ユーザーからの入力を受け取るには、ページに「ユーザー入力」ブロックを設置し、「変数名」に入力を格納したい変数名を設定します(変数は自動で作成されます)。その変数を使ってユーザー入力に応じた動作を行えます。
+
+関数を使うと、値の算出処理を再利用可能な形にまとめることができます。関数を作るには、「関数」タイプの変数を作成します。関数にはスロット(引数)を設定することができ、スロットの値は関数内で変数として利用可能です。また、関数を引数に取る関数(高階関数と呼ばれます)も存在します。関数は予め定義しておくほかに、このような高階関数のスロットに即席でセットすることもできます。
diff --git a/src/docs/jbo-EN/features/reaction.md b/src/docs/jbo-EN/features/reaction.md
new file mode 100644
index 0000000000..4d479fd416
--- /dev/null
+++ b/src/docs/jbo-EN/features/reaction.md
@@ -0,0 +1,11 @@
+# リアクション
+他の人のノートに、絵文字を付けて簡単にあなたの反応を伝えられる機能です。 リアクションするには、ノートの + アイコンをクリックしてピッカーを表示し、絵文字を選択します。 リアクションには[カスタム絵文字](./custom-emoji)も使用できます。
+
+## リアクションピッカーのカスタマイズ
+ピッカーに表示される絵文字を自分好みにカスタマイズすることができます。 設定の「リアクション」で設定します。
+
+## リモート投稿へのリアクションについて
+リアクションはMisskeyオリジナルの機能であるため、リモートインスタンスがMisskeyでない限りは、ほとんどの場合「Like」としてアクティビティが送信されます。一般的にはLikeは「お気に入り」として実装されているようです。
+
+## リモートからのリアクションについて
+リモートから「Like」アクティビティを受信したとき、Misskeyでは「👍」のリアクションとして解釈されます。
diff --git a/src/docs/jbo-EN/features/silence.md b/src/docs/jbo-EN/features/silence.md
new file mode 100644
index 0000000000..7e26feab0d
--- /dev/null
+++ b/src/docs/jbo-EN/features/silence.md
@@ -0,0 +1,6 @@
+# サイレンス
+サイレンスは、アカウントに設定される状態のひとつです。
+
+アカウントがサイレンス状態になると、ノートの公開範囲をパブリックにできなくなります。 ホーム、フォロワー、ダイレクトは選択可能なため、サイレンスを受けた場合でもフォロワーやあなたのユーザーページを直接訪れた場合は投稿を閲覧できますが、GTL(連合タイムライン)やLTL(ローカルタイムライン)には投稿が流れません。
+
+アカウントのサイレンス状態は、サーバーのモデレーターによって有効化/無効化されます。
diff --git a/src/docs/jbo-EN/features/theme.md b/src/docs/jbo-EN/features/theme.md
new file mode 100644
index 0000000000..a406f3433c
--- /dev/null
+++ b/src/docs/jbo-EN/features/theme.md
@@ -0,0 +1,68 @@
+# テーマ
+
+テーマを設定して、Misskeyクライアントの見た目を変更できます。
+
+## テーマの設定
+設定 > テーマ
+
+## テーマを作成する
+テーマコードはJSON5で記述されたテーマオブジェクトです。 テーマは以下のようなオブジェクトです。
+``` js
+{
+    id: '17587283-dd92-4a2c-a22c-be0637c9e22a',
+
+    name: 'Danboard',
+    author: 'syuilo',
+
+    base: 'light',
+
+    props: {
+        accent: 'rgb(218, 141, 49)',
+        bg: 'rgb(218, 212, 190)',
+        fg: 'rgb(115, 108, 92)',
+        panel: 'rgb(236, 232, 220)',
+        renote: 'rgb(100, 152, 106)',
+        link: 'rgb(100, 152, 106)',
+        mention: '@accent',
+        hashtag: 'rgb(100, 152, 106)',
+        header: 'rgba(239, 227, 213, 0.75)',
+        navBg: 'rgb(216, 206, 182)',
+        inputBorder: 'rgba(0, 0, 0, 0.1)',
+    },
+}
+
+```
+
+* `id` ... テーマの一意なID。UUIDをおすすめします。
+* `name` ... テーマ名
+* `author` ... テーマの作者
+* `desc` ... テーマの説明(オプション)
+* `base` ... 明るいテーマか、暗いテーマか
+    * `light`にすると明るいテーマになり、`dark`にすると暗いテーマになります。
+    * テーマはここで設定されたベーステーマを継承します。
+* `props` ... テーマのスタイル定義。これから説明します。
+
+### テーマのスタイル定義
+`props`下にはテーマのスタイルを定義します。 キーがCSSの変数名になり、バリューで中身を指定します。 なお、この`props`オブジェクトはベーステーマから継承されます。 ベーステーマは、このテーマの`base`が`light`なら[_light.json5](https://github.com/misskey-dev/misskey/blob/develop/src/client/themes/_light.json5)で、`dark`なら[_dark.json5](https://github.com/misskey-dev/misskey/blob/develop/src/client/themes/_dark.json5)です。 つまり、このテーマ内の`props`に`panel`というキーが無くても、そこにはベーステーマの`panel`があると見なされます。
+
+#### バリューで使える構文
+* 16進数で表された色
+    * 例: `#00ff00`
+* `rgb(r, g, b)`形式で表された色
+    * 例: `rgb(0, 255, 0)`
+* `rgb(r, g, b, a)`形式で表された透明度を含む色
+    * 例: `rgba(0, 255, 0, 0.5)`
+* 他のキーの値の参照
+    * `@{キー名}`と書くと他のキーの値の参照になります。`{キー名}`は参照したいキーの名前に置き換えます。
+    * 例: `@panel`
+* 定数(後述)の参照
+    * `${定数名}`と書くと定数の参照になります。`{定数名}`は参照したい定数の名前に置き換えます。
+    * 例: `$main`
+* 関数(後述)
+    * `:{関数名}<{引数}<{色}`
+
+#### 定数
+「CSS変数として出力はしたくないが、他のCSS変数の値として使いまわしたい」値があるときは、定数を使うと便利です。 キー名を`$`で始めると、そのキーはCSS変数として出力されません。
+
+#### 関数
+wip
diff --git a/src/docs/jbo-EN/features/timeline.md b/src/docs/jbo-EN/features/timeline.md
new file mode 100644
index 0000000000..f431014f84
--- /dev/null
+++ b/src/docs/jbo-EN/features/timeline.md
@@ -0,0 +1,31 @@
+# タイムライン
+タイムラインは、[ノート](./note)が時系列で表示される機能です。 タイムラインには以下で示す種類があり、種類によって表示されるノートも異なります。 なお、タイムラインの種類によってはサーバーにより無効になっている場合があります。
+
+## ホーム
+自分のフォローしているユーザーの投稿が流れます。HTLと略されます。
+
+## ローカル
+全てのローカルユーザーの「ホーム」指定されていない投稿が流れます。LTLと略されます。
+
+## ソーシャル
+自分のフォローしているユーザーの投稿と、全てのローカルユーザーの「ホーム」指定されていない投稿が流れます。STLと略されます。
+
+## グローバル
+全てのローカルユーザーの「ホーム」指定されていない投稿と、サーバーに届いた全てのリモートユーザーの「ホーム」指定されていない投稿が流れます。GTLと略されます。
+
+## 比較
+| ソース          |       |     | タイムライン |       |       |
+| ------------ | ----- | --- | ------ | ----- | ----- |
+| ユーザー         | 公開範囲  | ホーム | ローカル   | ソーシャル | グローバル |
+| ローカル (フォロー)  | 公開    | ✔   | ✔      | ✔     | ✔     |
+|              | ホーム   | ✔   |        | ✔     |       |
+|              | フォロワー | ✔   | ✔      | ✔     | ✔     |
+| リモート (フォロー)  | 公開    | ✔   |        | ✔     | ✔     |
+|              | ホーム   | ✔   |        | ✔     |       |
+|              | フォロワー | ✔   |        | ✔     | ✔     |
+| ローカル (未フォロー) | 公開    |     | ✔      | ✔     | ✔     |
+|              | ホーム   |     |        |       |       |
+|              | フォロワー |     |        |       |       |
+| リモート (未フォロー) | 公開    |     |        |       | ✔     |
+|              | ホーム   |     |        |       |       |
+|              | フォロワー |     |        |       |       |
diff --git a/src/docs/jbo-EN/features/widgets.md b/src/docs/jbo-EN/features/widgets.md
new file mode 100644
index 0000000000..a7c2c1d1d6
--- /dev/null
+++ b/src/docs/jbo-EN/features/widgets.md
@@ -0,0 +1,7 @@
+# ウィジェット
+ウィジェットは、MisskeyのUI上に設置できる小型の情報表示、操作が行えるパーツです。
+
+ウィジェットを編集するには、ウィジェット編集モードに切り替えます。切り替え方法はUIによって異なります。 ウィジェット編集モードでは、ウィジェットの追加、削除、並び替え、およびそれぞれのウィジェットの設定を行えます。
+
+## 利用可能なウィジェット一覧
+todo
diff --git a/src/docs/jbo-EN/general/apps.md b/src/docs/jbo-EN/general/apps.md
new file mode 100644
index 0000000000..1f4c85fe8f
--- /dev/null
+++ b/src/docs/jbo-EN/general/apps.md
@@ -0,0 +1,6 @@
+# サードパーティアプリのリスト
+## クライアント
+todo
+
+## 連携サービス
+todo
diff --git a/src/docs/jbo-EN/general/faq.md b/src/docs/jbo-EN/general/faq.md
new file mode 100644
index 0000000000..ecb664e32e
--- /dev/null
+++ b/src/docs/jbo-EN/general/faq.md
@@ -0,0 +1,22 @@
+# よくある質問
+ここでは利用上のよくある質問について掲載しています。 Misskeyのプロジェクト自体についてのよくある質問は[こちら](./misskey)に掲載されています。
+
+### iOS/Androidのアプリはありますか?
+公式にはそういったOSのネイティブアプリを開発していませんが、サードパーティ製のアプリがいくつかあります。 詳しくは[こちら](./apps)をご覧ください。
+
+ただ、サードパーティ製アプリはどうしても機能への対応が遅れてしまうため、とくに拘りがなければ公式のWebクライアントの利用をおすすめします。 なお、MisskeyのWebクライアントはPWAに対応しているので、ネイティブアプリのように動作させることも可能です。 詳しくは[こちら](todo)をご覧ください。
+
+## 他のサーバーのユーザーをフォローするときは?
+メニューから検索を選び、ユーザー名をホスト込みで入力します。例: `@syuilo@misskey.io`
+
+## Renoteを削除するには?
+Renoteの時刻表示の隣にある「...」を押し、「Renote解除」を選択します。 Renoteについては[こちら](../features/note)をご確認ください。
+
+## URLのプレビューを表示させたくない
+MFMには、そのURLのプレビューを無効にする構文があります。詳細は[MFMチートシート](/mfm-cheat-sheet)をご確認ください。
+
+## カスタム絵文字を追加したい
+運営者のみがカスタム絵文字を追加、編集、削除できます。それらを希望する場合は運営者に依頼してください。
+
+## Botを開発したい
+Misskey APIを利用してBotの開発が可能です。[こちら](../advanced/develop-bot)をご確認ください。
diff --git a/src/docs/jbo-EN/general/glossary.md b/src/docs/jbo-EN/general/glossary.md
new file mode 100644
index 0000000000..1f403a06d2
--- /dev/null
+++ b/src/docs/jbo-EN/general/glossary.md
@@ -0,0 +1,83 @@
+# 用語集
+Misskeyに関する用語集です。
+
+## AcitivityPub
+(読み: あくてぃびてぃぱぶ) 分散型を実現するために用いられるプロトコル(仕様)。このプロトコルに則ってサーバー同士通信を行うことで、連合が行われ、Fediverseを形成しています。
+
+## AiScript
+(読み: あいすくりぷと) Misskey上で使用できるプログラミング言語です。詳細は[こちら。](../advanced/aiscript)
+
+## API
+(読み: えーぴーあい) Misskeyのサーバーが公開している、プログラムからMisskeyを扱うためのインターフェース。詳細は[こちら。](../advanced/api)
+
+## Bot
+(読み: ぼっと) プログラムによって動作しているアカウント。
+
+## CW
+(読み: こんてんつわーにんぐ) Contents Warningの略。ノートの内容を、操作なしには表示しないようにできる機能。主に長大な内容を隠すためや、ネタバレ防止などに使われます。
+
+## Fediverse
+(読み: ふぇでぃばーす) Misskeyを含む様々な分散型ソフトウェアのサーバーで構成されたネットワーク。
+
+## GTL
+グローバルタイムライン(Global TimeLine)の略。タイムラインの詳細は[こちら。](../features/timeline)
+
+## HTL
+ホームタイムライン(Home TimeLine)の略。タイムラインの詳細は[こちら。](../features/timeline)
+
+## LTL
+ローカルタイムライン(Local TimeLine)の略。タイムラインの詳細は[こちら。](../features/timeline)
+
+## MFM
+(読み: えむえふえむ) Misskey Flavored Markdownの略で、Misskey上で使用できるマークアップ言語です。詳細は[こちら。](../features/mfm)
+
+## NSFW
+(読み: のっとせーふふぉーわーく) Not Safe For Workの略。画像を「閲覧注意」扱いにし、操作なしには表示しないようにすることができる機能。
+
+## Renote
+(読み: りのーと) 既にあるノートを引用、もしくはそのノートを新しいノートとして共有する行為、またそれによって作成されたノート。詳細は[こちら。](../features/note)
+
+## STL
+ソーシャルタイムライン(Social TimeLine)の略。タイムラインの詳細は[こちら。](../features/timeline)
+
+## 藍
+(読み: あい) Misskeyの看板娘(公式キャラクター)です。
+
+## アクティブユーザー
+インスタンスにアカウントを作っているユーザーのうち、現在も実際にサービスを利用しているユーザーのこと。
+
+## インスタンス
+todo
+
+## コントロールパネル
+インスタンスの設定画面のこと。
+
+## サーバー
+todo
+
+## サイレンス
+ノートをパブリックな公開範囲で投稿できなくされている状態。モデレーターの判断でユーザーごとに設定されます。詳細は[こちら。](../features/silence)
+
+## 凍結
+アカウントが使用不可に設定されている状態。
+
+## ドライブ
+Misskeyにアップロードしたファイルを管理する機能。詳細は[こちら。](../features/drive)
+
+## ノート
+Misskeyに投稿される、文章、ファイル、アンケートなどを含めることができるコンテンツ。詳細は[こちら。](../features/note)
+
+## ミスキスト
+Misskeyを使う人のこと。
+
+## モデレーター
+スパムの凍結およびサイレンスや不適切な投稿の削除など、コミュニティ運営に関する権限を持つユーザー。
+
+## リモート
+他サーバーのことを指します。リモートユーザーといったように接頭辞としても使われます。ローカルの逆です。
+
+## 連合
+サーバー上で作成された情報が他のサーバーに伝わること。
+
+## ローカル
+自サーバーのことを指します。ローカルユーザー、ローカルタイムラインといったように接頭辞としても使われます。リモートの逆です。
diff --git a/src/docs/jbo-EN/general/links.md b/src/docs/jbo-EN/general/links.md
new file mode 100644
index 0000000000..d6b16856fb
--- /dev/null
+++ b/src/docs/jbo-EN/general/links.md
@@ -0,0 +1,5 @@
+# リンク集
+
+## ライブラリ
+- [misskey-dev/misskey.js](https://github.com/misskey-dev/misskey.js) - JavaScriptのMisskey SDK
+- [misskey-dev/mfm.js](https://github.com/misskey-dev/mfm.js) - JavaScriptのMFMパーサー実装
diff --git a/src/docs/jbo-EN/general/misskey.md b/src/docs/jbo-EN/general/misskey.md
new file mode 100644
index 0000000000..1e64a10e28
--- /dev/null
+++ b/src/docs/jbo-EN/general/misskey.md
@@ -0,0 +1,87 @@
+# Misskeyについて
+
+Misskeyはオープンソースの分散型マイクロブログプラットフォームプロジェクトです。 開発は日本でsyuiloによって2014年から開始されました。 ドライブ、リアクションなどの豊富な機能や、高いカスタマイズ性を備えたUIを持つことが特徴です。
+
+## 歴史
+開発当初は掲示板がメインのサービスでしたが、ユーザーが短文を投稿し、それを時系列で流れるタイムライン機能を追加したところ人気が高まり、徐々にそれがメインとして開発が進むようになりました。 当初は分散型ではありませんでしたが、2018年にAcitivityPubを実装し分散型になったことで、より多くの方に認知され利用されるサービスになり、現在に至ります。
+<div class="info">ℹ️ Misskeyという名前は、syuiloが当時聴いていたMay'nというアーティストの楽曲、Brain Diverの歌詞に由来します。</div>
+
+誰でも開発に参加することができ、現在でも活発に開発が続いています。
+
+## 分散型とは何か?
+
+<b>分散(distributed)型</b>とは、<b>非中央集権(decentralized)</b>とも呼ばれ、コミュニティが多数のサーバーに分散して存在し、それらが相互に<b>通信(連合、federation)</b>することでコンテンツ共有<b>ネットワーク(Fediverse)</b>を形成していることが特徴のサービスです。 単一のサーバーしか存在しない、もしくは複数存在しても互いに独立している場合は中央集権なサービスと言われ、例えばTwitterやFacebookなどほとんどのサービスがそれに該当します。 分散型のメリットは、自分に合った運営者やテーマのサーバーを選択できることです。自分でサーバーを作成することもできます。連合するおかげで、どのサーバーを選んでも、同じコミュニティにアクセスできます。
+
+## 常にオープンソース
+Misskeyはこれまでもこれからも、オープンソースであり続けます。オープンソースとは、簡単に言うと<b>ソフトウェアのソースコード(プログラム)が公開されている</b>ことです。ソースコードの修正や再配布が可能であることを定義に含めることもあります。 Misskeyのすべてのソースコードは[AGPL](https://github.com/misskey-dev/misskey/blob/develop/LICENSE)というオープンソースライセンスの下に[公開](https://github.com/misskey-dev)されていて、誰でも自由に閲覧、使用、修正、改変、再配布をすることができます。 オープンソースは、自分で好きなように変えたり、有害な処理が含まれていないことを確認することができたり、誰でも開発に参加できるなどの、様々なメリットがあります。 上述の分散型を実現するためにも、オープンソースであるということは必要不可欠な要素です。 再び引き合いに出しますが、TwitterやFacebookなどの利益を得ているほとんどのサービスはオープンソースではありません。
+
+<div class="info">ℹ️ 技術的に言うと、MisskeyのソースコードはGitで管理されていて、リポジトリは<a href="https://github.com/misskey-dev" target="_blank">GitHub上でホスティングされています。</a></div>
+
+## 開発に参加する、プロジェクトを支援する
+Misskeyを気に入っていただけたら、ぜひプロジェクトを支援してください。プロジェクトに貢献するには、以下で紹介するようにいろいろな方法があります。方法によっては開発のスキルは不要なので、誰でも気軽に参加し貢献することができます。いつでもお待ちしています。
+
+### 機能を追加したり、バグを修正する
+ソフトウェアエンジニアのスキルをお持ちの方であれば、ソースコードを編集する形でプロジェクトに貢献することができます。 貢献についてのガイドは[こちら](https://github.com/misskey-dev/misskey/blob/develop/CONTRIBUTING.md)です。
+
+### 議論に参加する
+新しい機能、または既存の機能について意見を述べたり、不具合を報告したりすることでも貢献できます。 そのようなディスカッションは[GitHub](https://github.com/misskey-dev)上か、[フォーラム](https://forum.misskey.io/)等で行われます。
+
+### テキストを翻訳する
+Misskeyは様々な言語に対応しています(i18n -internationalizationの略- と呼ばれます)。元の言語は基本的に日本語ですが、有志によって他の言語へと翻訳されています。 その翻訳作業に加わっていただくことでもMisskeyに貢献できます。 Misskeyは[Crowdinというサービスを使用して翻訳の管理を行っています。](https://crowdin.com/project/misskey)
+
+### 感想を投稿する
+不具合報告等だけではなく、Misskeyの良い点、楽しい点といったポジティブな意見もぜひ共有してください。開発の励みになり、それは間接的ですがプロジェクトへの貢献です。
+
+### ミスキストを増やす
+ミスキストとは、Misskeyを使用する人のことです。 知り合いに紹介するなどしてMisskeyを広めていただければ、ミスキストが増え開発のモチベーションが上がります。
+
+### 寄付をする
+Misskeyはビジネスではなく、利用は無料であるため、収益は皆様からの寄付のみです。(インスタンスによっては広告収入を得ているような場合もありますが、それは運営者の収入であり直接開発者への収入にはなりません) 寄付をしていただければ、今後も開発を続けることが可能になり、プロジェクトへの貢献になります。 寄付は基本的には[Patreon](https://www.patreon.com/syuilo)で受け付けています。 一定額寄付していただけると、Misskeyの[情報ページ](/about-misskey)に名前を記載することができます。
+
+また、サーバーの運営者も、基本的には収益を得ていません。サーバーの運営にはコストがかかるので、運営者の支援をすることもご検討ください。 開発には直接関係しませんが、サーバーがあってこそのプロジェクトなので、運営が維持されるというのは開発と同じくらい重要なことです。
+
+## クレジット
+Misskeyの開発者や、Misskeyに寄付をしてくださった方の一覧は[こちら](/about-misskey)で見ることができます。
+
+## よくある質問
+### プロジェクトは何を目指していますか?
+強いて言うと、漠然的になりますが広く使われる汎用的なプラットフォームになることを目指しています。 Misskeyは他のプロジェクトとは違い、何らかの思想(例えば、反中央集権)やビジョンに基づいて開発が行われているわけではなく、その点ではフラットです。 それが逆に、特定の方向性に縛られないフレキシブルさを生み出すことに繋がっていると感じています。
+<!-- TODO: ここにロードマップへのリンク -->
+
+### 企業によって開発されていますか?
+いいえ。Misskeyの開発は個人で行われており、商業的でもないため、特定の企業の関りはありません。 開発メンバーも基本的にはボランティアです。 また、開発に対し企業のスポンサーがつくこともありますが、その場合でもやはり開発は個人のコミュニティが主体です。
+
+### 誰が運営していますか?
+Misskeyは分散型なため、各サーバーにそれぞれ異なった運営者がいます。従って、特定の個人や企業によって、Misskeyの全てが運営されているわけではありません。 また、開発チームが運営を行うわけでもないため、運営に関する連絡は、お使いのサーバーの運営者に行ってください。 サーバーの運営者は、[このページ](/about)で確認することができます。 あなたがサーバーを作成すれば、あなたが運営者になります。
+
+### どのサーバーを選べばいいですか?
+[サーバー一覧が公開されています。](https://join.misskey.page/ja-JP/instances) サーバーによってコミュニティのテーマ(特定のこと、ものが好き 等)が決められている場合があるので、自分に合ったテーマのサーバーがあれば、そこを選ぶと良いかもしれません。 他にも、サーバーの規模、ユーザー層、国および言語、運営者が信頼できるかどうか、などの観点があります。 なお、Misskey公式のサーバーというものはありません。自身で新しくサーバーを作成するという選択肢もあります。
+
+基本的にどのサーバーを選んだとしても、他の全てのサーバーのユーザーと繋がることができます。
+
+### サーバーを建てるにはどうしたらいいですか?
+Misskeyサーバーの作成に興味を持っていただきありがとうございます。 2021年現在、Misskeyのホスティングサービスは存在しないため、サーバーの作成にはある程度の知識が必要です。 サーバーの作成方法については[こちら](todo)をご覧ください。
+
+### どのような技術を使用していますか?
+Misskeyは開発が進むにつれ使用する技術も大きく変わってきました。開発当初はMySQL + PHP + jQueryといった構成でしたが、現在は以下のようになっています。
+- サーバーサイド: Node.js
+- データベース: PostgreSQL、Redis
+- UIフレームワーク: Vue.js
+- プログラミング言語: TypeScript
+
+また、MFMやAiScriptなどの、Misskeyから派生して独自の技術も開発しています。
+
+### Mastodonのフォークですか?
+いいえ。MisskeyはMastodonやその他のプロジェクトとは全く別のプロジェクトです。 開発に関しても、Misskeyの方が昔から開発されています。ただし、分散型になったのはMastodonの登場より後です。 同じAcitivityPubという分散のためのプロトコルを実装しているという点以外、両者に特に関りがあるわけでもありません。
+
+### iOS/Androidのアプリはありますか?
+公式にはそういったOSのネイティブアプリを開発していませんが、サードパーティ製のアプリがいくつかあります。 詳しくは[こちら](./apps)をご覧ください。
+
+ただ、サードパーティ製アプリはどうしても機能への対応が遅れてしまうため、とくに拘りがなければ公式のWebクライアントの利用をおすすめします。 なお、MisskeyのWebクライアントはPWAに対応しているので、ネイティブアプリのように動作させることも可能です。 詳しくは[こちら](todo)をご覧ください。
+
+### Misskeyのロゴ、アイコンはどこで入手できますか?
+(準備中)
+
+### 時折目にする猫耳の可愛い女の子は?
+Misskeyの守り神、藍ちゃんです。アイチャンカワイイヤッター!
+<div class="info">ℹ️ 藍ちゃんについては<a href="https://xn--931a.moe/" target="_blank">こちら</a>です。</div>
diff --git a/src/docs/jbo-EN/general/report-issue.md b/src/docs/jbo-EN/general/report-issue.md
new file mode 100644
index 0000000000..63527e32af
--- /dev/null
+++ b/src/docs/jbo-EN/general/report-issue.md
@@ -0,0 +1,8 @@
+# 不具合の報告
+不具合と思われる状況に遭遇したときは、まず[トラブルシューティング](./troubleshooting)をご一読ください。 それでも問題が解決しないときは、以下の情報を含めて[フォーラム](https://forum.misskey.io/)に投稿してください。 投稿することで、解決策が見つかったり、不具合と判断されれば開発チームによって修正が行われます。
+
+## 含める情報
+- Misskeyのバージョン([情報ページ](/about)で確認できます)
+- お使いのブラウザの種類とバージョン
+- お使いのOSの種類とバージョン
+- 問題の再現手順
diff --git a/src/docs/jbo-EN/general/troubleshooting.md b/src/docs/jbo-EN/general/troubleshooting.md
new file mode 100644
index 0000000000..4a35091299
--- /dev/null
+++ b/src/docs/jbo-EN/general/troubleshooting.md
@@ -0,0 +1,36 @@
+# トラブルシューティング
+<div class="info">ℹ️ <a href="./faq">よくある質問</a>も合わせてお役立てください。</div>
+
+問題が発生したときは、まずこちらをご確認ください。 該当する項目が無い、もしくは手順を試しても効果がない場合は、サーバーの管理者に連絡するか[不具合を報告](./report-issue)してください。
+
+## クライアントが起動しない
+ほとんどの場合、お使いのブラウザまたはOSのバージョンが古いことが原因です。 ブラウザおよびOSのバージョンを最新のものに更新してから、再度試してみてください。
+
+これは稀ですが、それでも起動しない場合は、キャッシュが原因の場合があります。ブラウザのキャッシュをクリアして、再度試してみてください。
+
+## ページが読み込めない
+クライアントが起動するもののページが読み込めないというエラーが出る場合は、ネットワークに問題がないか確認してください。また、サーバーがダウンしていないか確認してください。
+
+これは稀ですが、キャッシュが原因の場合があります。ブラウザのキャッシュをクリアして、再度試してみてください。
+
+まだ問題がある場合は、サーバーの問題と思われるのでサーバーの管理者に連絡してください。
+
+## クライアントの動作が遅い
+以下を試してみてください:
+
+- クライアント設定で「UIのアニメーションを減らす」を有効にする
+- クライアント設定で「モーダルにぼかし効果を使用」を無効にする
+- お使いのブラウザの設定でハードウェアアクセラレーションを有効にする
+- お使いのデバイスのスペックを上げる
+
+## 通知やアンテナ等の点滅が消えない
+点滅は、未読のコンテンツがあることを示しています。通常点滅が消えない場合は、コンテンツを遡ると未読なコンテンツが残っています。 すべて既読にしたと思われるのに、それでもなお点滅が続く場合(おそらく不具合と思われます)は設定から強制的にすべて既読扱いにすることができます。
+
+## Renoteができない
+フォロワー限定のノートはRenoteすることはできません。
+
+## UI上で特定の要素が表示されない
+広告ブロッカーを使用しているとそのような不具合が発生することがあります。Misskeyではオフにしてご利用ください。
+
+## UI上で未翻訳の部分がある
+ほとんどの場合、単に翻訳が間に合っていないだけで、不具合ではありません。翻訳が終わるまでお待ちください。 [翻訳に参加](./misskey)していただくことも可能です。
diff --git a/src/docs/kab-KAB/admin/disable-timelines.md b/src/docs/kab-KAB/admin/disable-timelines.md
new file mode 100644
index 0000000000..b081e35ab0
--- /dev/null
+++ b/src/docs/kab-KAB/admin/disable-timelines.md
@@ -0,0 +1,8 @@
+# LTL/STL/GTLの無効化
+Misskeyでは、LTL/STL/GTLをそれぞれ無効化することができます。有効/無効を切り替えるには、インスタンスコントロールパネルで設定します。
+
+LTLやSTLは、そのインスタンス全員の投稿が見れるため、新規のユーザーにとってはユーザーを探す必要がなくなり、興味のあるユーザーを見つけやすいという利点があります。 しかし同時に、フォロー機能が活用されなくなったり、不適切な投稿が目につきやすくなったり、チャットのようになることで内輪感が生じて逆に新規ユーザーが参加しにくくなるといったデメリットも持ち合わせています。 サーバーによってメリット/デメリットどちらが優勢かは異なるので、オプションとして無効にできるようになっています。 もしデメリットの方が上回っていると感じたら、それらのタイムラインを無効化することも検討してください。
+
+<div class="warn">⚠️ 無効化を行うと、ユーザーが困惑し、短期的に見て利用者が減る可能性があります。そのため、無効化の際は影響を慎重に検討し、事前に説明してフォローを整える期間を一定程度設けることを推奨します。</div>
+
+なお、管理者/モデレーターは、これらのタイムラインの無効化状態は適用されず、引き続き利用することが可能です。
diff --git a/src/docs/kab-KAB/admin/faq.md b/src/docs/kab-KAB/admin/faq.md
new file mode 100644
index 0000000000..317b4e0655
--- /dev/null
+++ b/src/docs/kab-KAB/admin/faq.md
@@ -0,0 +1,5 @@
+# よくある質問
+ここでは、サーバー管理者向けのよくある質問を掲載しています。
+
+## デフォルトテーマを設定したい
+現在、デフォルトテーマ設定機能は実装されていません。
diff --git a/src/docs/kab-KAB/advanced/aiscript.md b/src/docs/kab-KAB/advanced/aiscript.md
new file mode 100644
index 0000000000..604d17daa8
--- /dev/null
+++ b/src/docs/kab-KAB/advanced/aiscript.md
@@ -0,0 +1,7 @@
+# AiScript
+AiScriptは、Misskeyで使用できるスクリプト言語です。
+
+<div class="info">ℹ️ AiScript実装はMisskeyとは別リポジトリで、<a href="https://github.com/syuilo/aiscript" target="_blank">オープンソースで公開されています。</a></div>
+
+## 使い方
+AiScriptの構文や組み込み関数などのドキュメントは、[こちら](https://github.com/syuilo/aiscript/tree/master/docs)で公開されています。
diff --git a/src/docs/kab-KAB/advanced/api.md b/src/docs/kab-KAB/advanced/api.md
new file mode 100644
index 0000000000..76019b6145
--- /dev/null
+++ b/src/docs/kab-KAB/advanced/api.md
@@ -0,0 +1,58 @@
+# Misskey API
+
+MisskeyAPIを使ってMisskeyクライアント、Misskey連携Webサービス、Bot等(以下「アプリケーション」と呼びます)を開発できます。 ストリーミングAPIもあるので、リアルタイム性のあるアプリケーションを作ることも可能です。
+
+APIを使い始めるには、まずアクセストークンを取得する必要があります。 このドキュメントでは、アクセストークンを取得する手順を説明した後、基本的なAPIの使い方を説明します。
+
+## アクセストークンの取得
+基本的に、APIはリクエストにはアクセストークンが必要となります。 APIにリクエストするのが自分自身なのか、不特定の利用者に使ってもらうアプリケーションなのかによって取得手順は異なります。
+
+* 前者の場合: [「自分自身のアクセストークンを手動発行する」](#自分自身のアクセストークンを手動発行する)に進む
+* 後者の場合: [「アプリケーション利用者にアクセストークンの発行をリクエストする」](#アプリケーション利用者にアクセストークンの発行をリクエストする)に進む
+
+### 自分自身のアクセストークンを手動発行する
+「設定 > API」で、自分のアクセストークンを発行できます。
+
+[「APIの使い方」へ進む](#APIの使い方)
+
+### アプリケーション利用者にアクセストークンの発行をリクエストする
+アプリケーション利用者のアクセストークンを取得するには、以下の手順で発行をリクエストします。
+
+#### Step 1
+
+UUIDを生成する。以後これをセッションIDと呼びます。
+
+> このセッションIDは毎回生成し、使いまわさないようにしてください。
+
+#### Step 2
+
+`{_URL_}/miauth/{session}`をユーザーのブラウザで表示させる。`{session}`の部分は、セッションIDに置き換えてください。
+> 例: `{_URL_}/miauth/c1f6d42b-468b-4fd2-8274-e58abdedef6f`
+
+表示する際、URLにクエリパラメータとしていくつかのオプションを設定できます:
+* `name` ... アプリケーション名
+    * > 例: `MissDeck`
+* `icon` ... アプリケーションのアイコン画像URL
+    * > 例: `https://missdeck.example.com/icon.png`
+* `callback` ... 認証が終わった後にリダイレクトするURL
+    * > 例: `https://missdeck.example.com/callback`
+    * リダイレクト時には、`session`というクエリパラメータでセッションIDが付きます
+* `permission` ... アプリケーションが要求する権限
+    * > 例: `write:notes,write:following,read:drive`
+    * 要求する権限を`,`で区切って列挙します
+    * どのような権限があるかは[APIリファレンス](/api-doc)で確認できます
+
+#### Step 3
+ユーザーが発行を許可した後、`{_URL_}/api/miauth/{session}/check`にPOSTリクエストすると、レスポンスとしてアクセストークンを含むJSONが返ります。
+
+レスポンスに含まれるプロパティ:
+* `token` ... ユーザーのアクセストークン
+* `user` ... ユーザーの情報
+
+[「APIの使い方」へ進む](#APIの使い方)
+
+## APIの使い方
+**APIはすべてPOSTで、リクエスト/レスポンスともにJSON形式です。RESTではありません。** アクセストークンは、`i`というパラメータ名でリクエストに含めます。
+
+* [APIリファレンス](/api-doc)
+* [ストリーミングAPI](./stream)
diff --git a/src/docs/kab-KAB/advanced/create-plugin.md b/src/docs/kab-KAB/advanced/create-plugin.md
new file mode 100644
index 0000000000..0d2fa19178
--- /dev/null
+++ b/src/docs/kab-KAB/advanced/create-plugin.md
@@ -0,0 +1,74 @@
+# プラグインの作成
+Misskey Webクライアントのプラグイン機能を使うと、クライアントを拡張し、様々な機能を追加できます。 ここではプラグインの作成にあたってのメタデータ定義や、AiScript APIリファレンスを掲載します。
+
+## メタデータ
+プラグインは、AiScriptのメタデータ埋め込み機能を使って、デフォルトとしてプラグインのメタデータを定義する必要があります。 メタデータは次のプロパティを含むオブジェクトです。
+
+### name
+プラグイン名
+
+### author
+プラグイン作者
+
+### version
+プラグインバージョン。数値を指定してください。
+
+### description
+プラグインの説明
+
+### permissions
+プラグインが要求する権限。MisskeyAPIにリクエストする際に用いられます。
+
+### config
+プラグインの設定情報を表すオブジェクト。 キーに設定名、値に以下のプロパティを含めます。
+
+#### type
+設定値の種類を表す文字列。以下から選択します。 string number boolean
+
+#### label
+ユーザーに表示する設定名
+
+#### description
+設定の説明
+
+#### default
+設定のデフォルト値
+
+## APIリファレンス
+AiScript標準で組み込まれているAPIは掲載しません。
+
+### Mk:dialog(title text type)
+ダイアログを表示します。typeには以下の値が設定できます。 info success warn error question 省略すると info になります。
+
+### Mk:confirm(title text type)
+確認ダイアログを表示します。typeには以下の値が設定できます。 info success warn error question 省略すると question になります。 ユーザーが"OK"を選択した場合は true を、"キャンセル"を選択した場合は false が返ります。
+
+### Mk:api(endpoint params)
+Misskey APIにリクエストします。第一引数にエンドポイント名、第二引数にパラメータオブジェクトを渡します。
+
+### Mk:save(key value)
+任意の値に任意の名前を付けて永続化します。永続化した値は、AiScriptコンテキストが終了しても残り、Mk:loadで読み取ることができます。
+
+### Mk:load(key)
+Mk:saveで永続化した指定の名前の値を読み取ります。
+
+### Plugin:register_post_form_action(title fn)
+投稿フォームにアクションを追加します。第一引数にアクション名、第二引数にアクションが選択された際のコールバック関数を渡します。 コールバック関数には、第一引数に投稿フォームオブジェクトが渡されます。
+
+### Plugin:register_note_action(title fn)
+ノートメニューに項目を追加します。第一引数に項目名、第二引数に項目が選択された際のコールバック関数を渡します。 コールバック関数には、第一引数に対象のノートオブジェクトが渡されます。
+
+### Plugin:register_user_action(title fn)
+ユーザーメニューに項目を追加します。第一引数に項目名、第二引数に項目が選択された際のコールバック関数を渡します。 コールバック関数には、第一引数に対象のユーザーオブジェクトが渡されます。
+
+### Plugin:register_note_view_interruptor(fn)
+UIに表示されるノート情報を書き換えます。 コールバック関数には、第一引数に対象のノートオブジェクトが渡されます。 コールバック関数の返り値でノートが書き換えられます。
+
+### Plugin:register_note_post_interruptor(fn)
+ノート投稿時にノート情報を書き換えます。 コールバック関数には、第一引数に対象のノートオブジェクトが渡されます。 コールバック関数の返り値でノートが書き換えられます。
+
+### Plugin:open_url(url)
+第一引数に渡されたURLをブラウザの新しいタブで開きます。
+
+### Plugin:config
+プラグインの設定が格納されるオブジェクト。プラグイン定義のconfigで設定したキーで値が入ります。
diff --git a/src/docs/kab-KAB/advanced/develop-bot.md b/src/docs/kab-KAB/advanced/develop-bot.md
new file mode 100644
index 0000000000..7f825e9bc4
--- /dev/null
+++ b/src/docs/kab-KAB/advanced/develop-bot.md
@@ -0,0 +1,6 @@
+# Botの作成
+[Misskey API](./api)を利用してBotの開発が可能です。 また、いくつかのBot実装が公開されているため、ぜひ参考にしてください。
+
+- [syuilo/ai](https://github.com/syuilo/ai) ... Node.js上で動く、TypeScript製Bot実装
+
+Botを作成したときは、プロフィール設定からBotフラグをオンにしておくことを強くおすすめします。
diff --git a/src/docs/kab-KAB/advanced/reversi-bot.md b/src/docs/kab-KAB/advanced/reversi-bot.md
new file mode 100644
index 0000000000..7ab2a7212e
--- /dev/null
+++ b/src/docs/kab-KAB/advanced/reversi-bot.md
@@ -0,0 +1,160 @@
+# MisskeyリバーシBotの開発
+Misskeyのリバーシ機能に対応したBotの開発方法をここに記します。
+
+1. `games/reversi`ストリームに以下のパラメータを付けて接続する:
+    * `i`: botアカウントのAPIキー
+
+2. 対局への招待が来たら、ストリームから`invited`イベントが流れてくる
+    * イベントの中身に、`parent`という名前で対局へ誘ってきたユーザーの情報が含まれている
+
+3. `games/reversi/match`へ、`user_id`として`parent`の`id`が含まれたリクエストを送信する
+
+4. 上手くいくとゲーム情報が返ってくるので、`games/reversi-game`ストリームへ、以下のパラメータを付けて接続する:
+    * `i`: botアカウントのAPIキー
+    * `game`: `game`の`id`
+
+5. この間、相手がゲームの設定を変更するとその都度`update-settings`イベントが流れてくるので、必要であれば何かしらの処理を行う
+
+6. 設定に満足したら、`{ type: 'accept' }`メッセージをストリームに送信する
+
+7. ゲームが開始すると、`started`イベントが流れてくる
+    * イベントの中身にはゲーム情報が含まれている
+
+8. 石を打つには、ストリームに`{ type: 'set', pos: <位置> }`を送信する(位置の計算方法は後述)
+
+9. 相手または自分が石を打つと、ストリームから`set`イベントが流れてくる
+    * `color`として石の色が含まれている
+    * `pos`として位置情報が含まれている
+
+## 位置の計算法
+8x8のマップを考える場合、各マスの位置(インデックスと呼びます)は次のようになっています:
+```
++--+--+--+--+--+--+--+--+
+| 0| 1| 2| 3| 4| 5| 6| 7|
++--+--+--+--+--+--+--+--+
+| 8| 9|10|11|12|13|14|15|
++--+--+--+--+--+--+--+--+
+|16|17|18|19|20|21|22|23|
+...
+```
+
+### X,Y座標 から インデックス に変換する
+```
+pos = x + (y * mapWidth)
+```
+`mapWidth`は、ゲーム情報の`map`から、次のようにして計算できます:
+```
+mapWidth = map[0].length
+```
+
+### インデックス から X,Y座標 に変換する
+```
+x = pos % mapWidth
+y = Math.floor(pos / mapWidth)
+```
+
+## マップ情報
+マップ情報は、ゲーム情報の`map`に入っています。 文字列の配列になっており、ひとつひとつの文字がマス情報を表しています。 それをもとにマップのデザインを知る事が出来ます:
+* `(スペース)` ... マス無し
+* `-` ... マス
+* `b` ... 初期配置される黒石
+* `w` ... 初期配置される白石
+
+例えば、4*4の次のような単純なマップがあるとします:
+```text
++---+---+---+---+
+|   |   |   |   |
++---+---+---+---+
+|   | ○ | ● |   |
++---+---+---+---+
+|   | ● | ○ |   |
++---+---+---+---+
+|   |   |   |   |
++---+---+---+---+
+```
+
+この場合、マップデータはこのようになります:
+```javascript
+['----', '-wb-', '-bw-', '----']
+```
+
+## ユーザーにフォームを提示して対話可能Botを作成する
+ユーザーとのコミュニケーションを行うため、ゲームの設定画面でユーザーにフォームを提示することができます。 例えば、Botの強さをユーザーが設定できるようにする、といったシナリオが考えられます。
+
+フォームを提示するには、`reversi-game`ストリームに次のメッセージを送信します:
+```javascript
+{
+  type: 'init-form',
+  body: [フォームコントロールの配列]
+}
+```
+
+フォームコントロールの配列については今から説明します。 フォームコントロールは、次のようなオブジェクトです:
+```javascript
+{
+  id: 'switch1',
+  type: 'switch',
+  label: 'Enable hoge',
+  value: false
+}
+```
+`id` ... コントロールのID。 `type` ... コントロールの種類。後述します。 `label` ... コントロールと一緒に表記するテキスト。 `value` ... コントロールのデフォルト値。
+
+### フォームの操作を受け取る
+ユーザーがフォームを操作すると、ストリームから`update-form`イベントが流れてきます。 イベントの中身には、コントロールのIDと、ユーザーが設定した値が含まれています。 例えば、上で示したスイッチをユーザーがオンにしたとすると、次のイベントが流れてきます:
+```javascript
+{
+  id: 'switch1',
+  value: true
+}
+```
+
+### フォームコントロールの種類
+#### スイッチ
+type: `switch` スイッチを表示します。何かの機能をオン/オフさせたい場合に有用です。
+
+##### プロパティ
+`label` ... スイッチに表記するテキスト。
+
+#### ラジオボタン
+type: `radio` ラジオボタンを表示します。選択肢を提示するのに有用です。例えば、Botの強さを設定させるなどです。
+
+##### プロパティ
+`items` ... ラジオボタンの選択肢。例:
+```javascript
+items: [{
+  label: 'å¼±',
+  value: 1
+}, {
+  label: '中',
+  value: 2
+}, {
+  label: 'å¼·',
+  value: 3
+}]
+```
+
+#### スライダー
+type: `slider` スライダーを表示します。
+
+##### プロパティ
+`min` ... スライダーの下限。 `max` ... スライダーの上限。 `step` ... 入力欄で刻むステップ値。
+
+#### テキストボックス
+type: `textbox` テキストボックスを表示します。ユーザーになにか入力させる一般的な用途に利用できます。
+
+## ユーザーにメッセージを表示する
+設定画面でユーザーと対話する、フォーム以外のもうひとつの方法がこれです。ユーザーになにかメッセージを表示することができます。 例えば、ユーザーがBotの対応していないモードやマップを選択したとき、警告を表示するなどです。 メッセージを表示するには、次のメッセージをストリームに送信します:
+```javascript
+{
+  type: 'message',
+  body: {
+    text: 'メッセージ内容',
+    type: 'メッセージの種類'
+  }
+}
+```
+メッセージの種類: `success`, `info`, `warning`, `error`。
+
+## 投了する
+投了をするには、<a href="./api/endpoints/games/reversi/games/surrender">このエンドポイント</a>にリクエストします。
diff --git a/src/docs/kab-KAB/advanced/stream.md b/src/docs/kab-KAB/advanced/stream.md
new file mode 100644
index 0000000000..0e5edd2b0c
--- /dev/null
+++ b/src/docs/kab-KAB/advanced/stream.md
@@ -0,0 +1,350 @@
+# ストリーミングAPI
+
+ストリーミングAPIを使うと、リアルタイムで様々な情報(例えばタイムラインに新しい投稿が流れてきた、メッセージが届いた、フォローされた、など)を受け取ったり、様々な操作を行ったりすることができます。
+
+## ストリームに接続する
+
+ストリーミングAPIを利用するには、まずMisskeyサーバーに**websocket**接続する必要があります。
+
+以下のURLに、`i`というパラメータ名で認証情報を含めて、websocket接続してください。例:
+```
+%WS_URL%/streaming?i=xxxxxxxxxxxxxxx
+```
+
+認証情報は、自分のAPIキーや、アプリケーションからストリームに接続する際はユーザーのアクセストークンのことを指します。
+
+<div class="info">ℹ️ 認証情報の取得については、<a href="./api">こちらのドキュメント</a>をご確認ください。</div>
+
+---
+
+認証情報は省略することもできますが、その場合非ログインでの利用ということになり、受信できる情報や可能な操作は限られます。例:
+
+```
+%WS_URL%/streaming
+```
+
+---
+
+ストリームに接続すると、後述するAPI操作や、投稿の購読を行ったりすることができます。 しかしまだこの段階では、例えばタイムラインへの新しい投稿を受信したりすることはできません。 それを行うには、ストリーム上で、後述する**チャンネル**に接続する必要があります。
+
+**ストリームでのやり取りはすべてJSONです。**
+
+## チャンネル
+MisskeyのストリーミングAPIにはチャンネルという概念があります。これは、送受信する情報を分離するための仕組みです。 Misskeyのストリームに接続しただけでは、まだリアルタイムでタイムラインの投稿を受信したりはできません。 ストリーム上でチャンネルに接続することで、様々な情報を受け取ったり情報を送信したりすることができるようになります。
+
+ひとつのストリーム上で、同時に複数のチャンネルに接続することができます。
+
+### チャンネルに接続する
+チャンネルに接続するには、次のようなデータをJSONでストリームに送信します:
+
+```json
+{
+    type: 'connect',
+    body: {
+        channel: 'xxxxxxxx',
+        id: 'foobar',
+        params: {
+            ...
+        }
+    }
+}
+```
+
+ここで、
+* `channel`には接続したいチャンネル名を設定します。チャンネルの種類については後述します。
+* `id`にはそのチャンネルとやり取りするための任意のIDを設定します。ストリームでは様々なメッセージが流れるので、そのメッセージがどのチャンネルからのものなのか識別する必要があるからです。このIDは、UUIDや、乱数のようなもので構いません。
+* `params`はチャンネルに接続する際のパラメータです。チャンネルによって接続時に必要とされるパラメータは異なります。パラメータ不要のチャンネルに接続する際は、このプロパティは省略可能です。
+
+<div class="info">ℹ️ IDはチャンネルごとではなく「チャンネルの接続ごと」です。なぜなら、同じチャンネルに異なるパラメータで複数接続するケースもあるからです。</div>
+
+### チャンネルからのメッセージを受け取る
+例えばタイムラインのチャンネルなら、新しい投稿があった時にメッセージを発します。そのメッセージを受け取ることで、タイムラインに新しい投稿がされたことをリアルタイムで知ることができます。
+
+チャンネルがメッセージを発すると、次のようなデータがJSONでストリームに流れてきます:
+```json
+{
+    type: 'channel',
+    body: {
+        id: 'foobar',
+        type: 'something',
+        body: {
+            some: 'thing'
+        }
+    }
+}
+```
+
+ここで、
+* `id`には前述したそのチャンネルに接続する際に設定したIDが設定されています。これで、このメッセージがどのチャンネルからのものなのか知ることができます。
+* `type`にはメッセージの種類が設定されます。チャンネルによって、どのような種類のメッセージが流れてくるかは異なります。
+* `body`にはメッセージの内容が設定されます。チャンネルによって、どのような内容のメッセージが流れてくるかは異なります。
+
+### チャンネルに向けてメッセージを送信する
+チャンネルによっては、メッセージを受け取るだけでなく、こちらから何かメッセージを送信し、何らかの操作を行える場合があります。
+
+チャンネルにメッセージを送信するには、次のようなデータをJSONでストリームに送信します:
+```json
+{
+    type: 'channel',
+    body: {
+        id: 'foobar',
+        type: 'something',
+        body: {
+            some: 'thing'
+        }
+    }
+}
+```
+
+ここで、
+* `id`には前述したそのチャンネルに接続する際に設定したIDを設定します。これで、このメッセージがどのチャンネルに向けたものなのか識別させることができます。
+* `type`にはメッセージの種類を設定します。チャンネルによって、どのような種類のメッセージを受け付けるかは異なります。
+* `body`にはメッセージの内容を設定します。チャンネルによって、どのような内容のメッセージを受け付けるかは異なります。
+
+### チャンネルから切断する
+チャンネルから切断するには、次のようなデータをJSONでストリームに送信します:
+
+```json
+{
+    type: 'disconnect',
+    body: {
+        id: 'foobar'
+    }
+}
+```
+
+ここで、
+* `id`には前述したそのチャンネルに接続する際に設定したIDを設定します。
+
+## ストリームを経由してAPIリクエストする
+
+ストリームを経由してAPIリクエストすると、HTTPリクエストを発生させずにAPIを利用できます。そのため、コードを簡潔にできたり、パフォーマンスの向上を見込めるかもしれません。
+
+ストリームを経由してAPIリクエストするには、次のようなデータをJSONでストリームに送信します:
+```json
+{
+    type: 'api',
+    body: {
+        id: 'xxxxxxxxxxxxxxxx',
+        endpoint: 'notes/create',
+        data: {
+            text: 'yee haw!'
+        }
+    }
+}
+```
+
+ここで、
+* `id`には、APIのレスポンスを識別するための、APIリクエストごとの一意なIDを設定する必要があります。UUIDや、簡単な乱数のようなもので構いません。
+* `endpoint`には、あなたがリクエストしたいAPIのエンドポイントを指定します。
+* `data`には、エンドポイントのパラメータを含めます。
+
+<div class="info">ℹ️ APIのエンドポイントやパラメータについてはAPIリファレンスをご確認ください。</div>
+
+### レスポンスの受信
+
+APIへリクエストすると、レスポンスがストリームから次のような形式で流れてきます。
+
+```json
+{
+    type: 'api:xxxxxxxxxxxxxxxx',
+    body: {
+        ...
+    }
+}
+```
+
+ここで、
+* `xxxxxxxxxxxxxxxx`の部分には、リクエストの際に設定された`id`が含まれています。これにより、どのリクエストに対するレスポンスなのか判別することができます。
+* `body`には、レスポンスが含まれています。
+
+## 投稿のキャプチャ
+
+Misskeyは投稿のキャプチャと呼ばれる仕組みを提供しています。これは、指定した投稿のイベントをストリームで受け取る機能です。
+
+例えばタイムラインを取得してユーザーに表示したとします。ここで誰かがそのタイムラインに含まれるどれかの投稿に対してリアクションしたとします。
+
+しかし、クライアントからするとある投稿にリアクションが付いたことなどは知る由がないため、リアルタイムでリアクションをタイムライン上の投稿に反映して表示するといったことができません。
+
+この問題を解決するために、Misskeyは投稿のキャプチャ機構を用意しています。投稿をキャプチャすると、その投稿に関するイベントを受け取ることができるため、リアルタイムでリアクションを反映させたりすることが可能になります。
+
+### 投稿をキャプチャする
+
+投稿をキャプチャするには、ストリームに次のようなメッセージを送信します:
+
+```json
+{
+    type: 'subNote',
+    body: {
+        id: 'xxxxxxxxxxxxxxxx'
+    }
+}
+```
+
+ここで、
+* `id`にキャプチャしたい投稿の`id`を設定します。
+
+このメッセージを送信すると、Misskeyにキャプチャを要請したことになり、以後、その投稿に関するイベントが流れてくるようになります。
+
+例えば投稿にリアクションが付いたとすると、次のようなメッセージが流れてきます:
+
+```json
+{
+    type: 'noteUpdated',
+    body: {
+        id: 'xxxxxxxxxxxxxxxx',
+        type: 'reacted',
+        body: {
+            reaction: 'like',
+            userId: 'yyyyyyyyyyyyyyyy'
+        }
+    }
+}
+```
+
+ここで、
+* `body`内の`id`に、イベントを発生させた投稿のIDが設定されます。
+* `body`内の`type`に、イベントの種類が設定されます。
+* `body`内の`body`に、イベントの詳細が設定されます。
+
+#### イベントの種類
+
+##### `reacted`
+その投稿にリアクションがされた時に発生します。
+
+* `reaction`に、リアクションの種類が設定されます。
+* `userId`に、リアクションを行ったユーザーのIDが設定されます。
+
+例:
+```json
+{
+    type: 'noteUpdated',
+    body: {
+        id: 'xxxxxxxxxxxxxxxx',
+        type: 'reacted',
+        body: {
+            reaction: 'like',
+            userId: 'yyyyyyyyyyyyyyyy'
+        }
+    }
+}
+```
+
+##### `deleted`
+その投稿が削除された時に発生します。
+
+* `deletedAt`に、削除日時が設定されます。
+
+例:
+```json
+{
+    type: 'noteUpdated',
+    body: {
+        id: 'xxxxxxxxxxxxxxxx',
+        type: 'deleted',
+        body: {
+            deletedAt: '2018-10-22T02:17:09.703Z'
+        }
+    }
+}
+```
+
+##### `pollVoted`
+その投稿に添付されたアンケートに投票された時に発生します。
+
+* `choice`に、選択肢IDが設定されます。
+* `userId`に、投票を行ったユーザーのIDが設定されます。
+
+例:
+```json
+{
+    type: 'noteUpdated',
+    body: {
+        id: 'xxxxxxxxxxxxxxxx',
+        type: 'pollVoted',
+        body: {
+            choice: 2,
+            userId: 'yyyyyyyyyyyyyyyy'
+        }
+    }
+}
+```
+
+### 投稿のキャプチャを解除する
+
+その投稿がもう画面に表示されなくなったりして、その投稿に関するイベントをもう受け取る必要がなくなったときは、キャプチャの解除を申請してください。
+
+次のメッセージを送信します:
+
+```json
+{
+    type: 'unsubNote',
+    body: {
+        id: 'xxxxxxxxxxxxxxxx'
+    }
+}
+```
+
+ここで、
+* `id`にキャプチャを解除したい投稿の`id`を設定します。
+
+このメッセージを送信すると、以後、その投稿に関するイベントは流れてこないようになります。
+
+# チャンネル一覧
+## `main`
+アカウントに関する基本的な情報が流れてきます。このチャンネルにパラメータはありません。
+
+### 流れてくるイベント一覧
+
+#### `renote`
+自分の投稿がRenoteされた時に発生するイベントです。自分自身の投稿をRenoteしたときは発生しません。
+
+#### `mention`
+誰かからメンションされたときに発生するイベントです。
+
+#### `readAllNotifications`
+自分宛ての通知がすべて既読になったことを表すイベントです。このイベントを利用して、「通知があることを示すアイコン」のようなものをオフにしたりする等のケースが想定されます。
+
+#### `meUpdated`
+自分の情報が更新されたことを表すイベントです。
+
+#### `follow`
+自分が誰かをフォローしたときに発生するイベントです。
+
+#### `unfollow`
+自分が誰かのフォローを解除したときに発生するイベントです。
+
+#### `followed`
+自分が誰かにフォローされたときに発生するイベントです。
+
+## `homeTimeline`
+ホームタイムラインの投稿情報が流れてきます。このチャンネルにパラメータはありません。
+
+### 流れてくるイベント一覧
+
+#### `note`
+タイムラインに新しい投稿が流れてきたときに発生するイベントです。
+
+## `localTimeline`
+ローカルタイムラインの投稿情報が流れてきます。このチャンネルにパラメータはありません。
+
+### 流れてくるイベント一覧
+
+#### `note`
+ローカルタイムラインに新しい投稿が流れてきたときに発生するイベントです。
+
+## `hybridTimeline`
+ソーシャルタイムラインの投稿情報が流れてきます。このチャンネルにパラメータはありません。
+
+### 流れてくるイベント一覧
+
+#### `note`
+ソーシャルタイムラインに新しい投稿が流れてきたときに発生するイベントです。
+
+## `globalTimeline`
+グローバルタイムラインの投稿情報が流れてきます。このチャンネルにパラメータはありません。
+
+### 流れてくるイベント一覧
+
+#### `note`
+グローバルタイムラインに新しい投稿が流れてきたときに発生するイベントです。
diff --git a/src/docs/kab-KAB/features/antenna.md b/src/docs/kab-KAB/features/antenna.md
new file mode 100644
index 0000000000..94ad9e4aea
--- /dev/null
+++ b/src/docs/kab-KAB/features/antenna.md
@@ -0,0 +1,4 @@
+# アンテナ
+アンテナは、自由に条件を設定して、合致するノートを自動で収集することができる機能です。
+
+条件を設定したアンテナが作成された状態で、条件に合致するノートが投稿されると、リアルタイムでそのアンテナのタイムラインにノートが追加されます。
diff --git a/src/docs/kab-KAB/features/custom-emoji.md b/src/docs/kab-KAB/features/custom-emoji.md
new file mode 100644
index 0000000000..ed2e92be16
--- /dev/null
+++ b/src/docs/kab-KAB/features/custom-emoji.md
@@ -0,0 +1,2 @@
+# カスタム絵文字
+カスタム絵文字は、インスタンスで用意された画像を絵文字のように使える機能です。 ノート、リアクション、チャット、自己紹介、名前などの場所で使うことができます。 カスタム絵文字をそれらの場所で使うには、絵文字ピッカーボタン(ある場合)を押すか、`:`を入力して絵文字サジェストを表示します。 テキスト内に`:foo:`のような形式の文字列が見つかると、`foo`の部分がカスタム絵文字名と解釈され、表示時には対応したカスタム絵文字に置き換わります。
diff --git a/src/docs/kab-KAB/features/deck.md b/src/docs/kab-KAB/features/deck.md
new file mode 100644
index 0000000000..8057e262fd
--- /dev/null
+++ b/src/docs/kab-KAB/features/deck.md
@@ -0,0 +1,18 @@
+# デッキ
+
+デッキは利用可能なUIのひとつです。「カラム」と呼ばれるビューを複数並べて表示させることで、カスタマイズ性が高く、情報量の多いUIが構築できることが特徴です。
+
+## カラムの追加
+デッキの背景を右クリックし、「カラムを追加」して任意のカラムを追加できます。
+
+## カラムの移動
+カラムは、ドラッグアンドドロップで他のカラムと位置を入れ替えることが出来るほか、カラムメニュー(カラムのヘッダー右クリック)から位置を移動させることもできます。
+
+## カラムの水平分割
+カラムは左右だけでなく、上下に並べることもできます。 カラムメニューを開き、「左に重ねる」を選択すると、左のカラムの下に現在のカラムが移動します。 上下分割を解除するには、カラムメニューの「右に出す」を選択します。
+
+## カラムの設定
+カラムメニューの「編集」を選択するとカラムの設定を編集できます。カラムの名前を変えたり、幅を変えたりできます。
+
+## デッキの設定
+デッキに関する設定は、[settings/deck](/settings/deck)で行えます。
diff --git a/src/docs/kab-KAB/features/drive.md b/src/docs/kab-KAB/features/drive.md
new file mode 100644
index 0000000000..b82a41082a
--- /dev/null
+++ b/src/docs/kab-KAB/features/drive.md
@@ -0,0 +1,17 @@
+# ドライブ
+ドライブは、Misskey上でファイルを管理できる機能です。
+
+[ドライブのページ](/my/drive)から任意のファイルをアップロードできるほか、アバターに設定した画像や、ノートに添付したファイルなどもすべてドライブにアップロードされます。
+
+<div class="warn">⚠️ ドライブからファイルを削除すると、そのファイルが添付されたノートも消えます。</div>
+
+ドライブにアップロードされたファイルは、いつでもダウンロードすることができるほか、ノート作成時に「ドライブからファイルを添付」することでファイルを再利用することもできます。
+
+ドライブ内にフォルダを作り、複数のファイルをまとめて整理することもできます。
+
+## 閲覧注意 (NSFW)
+<div class="info">ℹ️ この項目が閲覧注意なわけではありません</div>
+
+閲覧注意またはNSFW (Not safe for work) は、ドライブのファイルに設定することができるフラグです。 閲覧注意フラグを設定されたファイルは、表示される際に閲覧者の操作なしには表示されなくなります。 このフラグは、例えば職場や公共の場で閲覧するのに適切でないと思われる画像などに設定し、そのような画像が突然表示されてしまうことを防ぐ目的で使われます。
+
+このフラグは手動でオンオフを切り替えられるほか、モデレーターの判断で設定される場合もあります。
diff --git a/src/docs/kab-KAB/features/favorite.md b/src/docs/kab-KAB/features/favorite.md
new file mode 100644
index 0000000000..a0e5f8bf78
--- /dev/null
+++ b/src/docs/kab-KAB/features/favorite.md
@@ -0,0 +1,4 @@
+# お気に入り
+[ノート](./node)をお気に入りとして登録できる機能です。 お気に入り登録したノートは、[お気に入りページ](./my/favorites)で一覧することができます。 お気に入りに登録したことは相手に通知されず、お気に入りは自分しか見ることができません。
+
+ノートをお気に入り登録するには、ノートメニューの「お気に入り」を押します。お気に入り解除するには、ノートメニューの「お気に入り解除」を押します。
diff --git a/src/docs/kab-KAB/features/follow.md b/src/docs/kab-KAB/features/follow.md
new file mode 100644
index 0000000000..500073a4b5
--- /dev/null
+++ b/src/docs/kab-KAB/features/follow.md
@@ -0,0 +1,2 @@
+# Ig á¹­á¹­afaá¹›
+ユーザーをフォローすると、タイムラインにそのユーザーの投稿が表示されるようになります。ただし、他のユーザーに対する返信は含まれません。 ユーザーをフォローするには、ユーザーページの「フォロー」ボタンをクリックします。フォローを解除するには、もう一度クリックします。
diff --git a/src/docs/kab-KAB/features/keyboard-shortcut.md b/src/docs/kab-KAB/features/keyboard-shortcut.md
new file mode 100644
index 0000000000..82cae4e1b7
--- /dev/null
+++ b/src/docs/kab-KAB/features/keyboard-shortcut.md
@@ -0,0 +1,66 @@
+# キーボードショートカット
+
+## グローバル
+これらのショートカットは基本的にどこでも使えます。
+<table>
+    <thead>
+        <tr><th>ショートカット</th><th>効果</th><th>由来</th></tr>
+    </thead>
+    <tbody>
+        <tr><td><kbd class="key">P</kbd>, <kbd class="key">N</kbd></td><td>新規投稿</td><td><b>P</b>ost, <b>N</b>ew, <b>N</b>ote</td></tr>
+        <tr><td><kbd class="key">T</kbd></td><td>タイムラインの最も新しい投稿にフォーカス</td><td><b>T</b>imeline, <b>T</b>op</td></tr>
+        <tr><td><kbd class="group"><kbd class="key">Shift</kbd> + <kbd class="key">N</kbd></kbd></td><td>通知を表示/隠す</td><td><b>N</b>otifications</td></tr>
+        <tr><td><kbd class="key">S</kbd></td><td>Nadi</td><td><b>S</b>earch</td></tr>
+        <tr><td><kbd class="key">H</kbd>, <kbd class="key">?</kbd></td><td>ヘルプを表示</td><td><b>H</b>elp</td></tr>
+    </tbody>
+</table>
+
+## 投稿にフォーカスされた状態
+<table>
+    <thead>
+        <tr><th>ショートカット</th><th>効果</th><th>由来</th></tr>
+    </thead>
+    <tbody>
+        <tr><td><kbd class="key">↑</kbd>, <kbd class="key">K</kbd>, <kbd class="group"><kbd class="key">Shift</kbd> + <kbd class="key">Tab</kbd></kbd></td><td>上の投稿にフォーカスを移動</td><td>-</td></tr>
+        <tr><td><kbd class="key">↓</kbd>, <kbd class="key">J</kbd>, <kbd class="key">Tab</kbd></td><td>下の投稿にフォーカスを移動</td><td>-</td></tr>
+        <tr><td><kbd class="key">R</kbd></td><td>返信フォームを開く</td><td><b>R</b>eply</td></tr>
+        <tr><td><kbd class="key">Q</kbd></td><td>Renoteフォームを開く</td><td><b>Q</b>uote</td></tr>
+        <tr><td><kbd class="group"><kbd class="key">Ctrl</kbd> + <kbd class="key">Q</kbd></kbd></td><td>即刻Renoteする(フォームを開かずに)</td><td>-</td></tr>
+        <tr><td><kbd class="key">E</kbd>, <kbd class="key">A</kbd>, <kbd class="key">+</kbd></td><td>リアクションフォームを開く</td><td><b>E</b>mote, re<b>A</b>ction</td></tr>
+        <tr><td><kbd class="key">0</kbd>~<kbd class="key">9</kbd></td><td>数字に対応したリアクションをする(対応については後述)</td><td>-</td></tr>
+        <tr><td><kbd class="key">F</kbd>, <kbd class="key">B</kbd></td><td>お気に入りに登録</td><td><b>F</b>avorite, <b>B</b>ookmark</td></tr>
+        <tr><td><kbd class="key">Del</kbd>, <kbd class="group"><kbd class="key">Ctrl</kbd> + <kbd class="key">D</kbd></kbd></td><td>投稿を削除</td><td><b>D</b>elete</tr>
+        <tr><td><kbd class="key">M</kbd>, <kbd class="key">O</kbd></td><td>投稿に対するメニューを開く</td><td><b>M</b>ore, <b>O</b>ther</td></tr>
+        <tr><td><kbd class="key">S</kbd></td><td>CWで隠された部分を表示 or 隠す</td><td><b>S</b>how, <b>S</b>ee</td></tr>
+        <tr><td><kbd class="key">Esc</kbd></td><td>フォーカスを外す</td><td>-</td></tr>
+    </tbody>
+</table>
+
+## Renoteフォーム
+<table>
+    <thead>
+        <tr><th>ショートカット</th><th>効果</th><th>由来</th></tr>
+    </thead>
+    <tbody>
+        <tr><td><kbd class="key">Enter</kbd></td><td>Renoteする</td><td>-</td></tr>
+        <tr><td><kbd class="key">Q</kbd></td><td>フォームを展開する</td><td><b>Q</b>uote</td></tr>
+        <tr><td><kbd class="key">Esc</kbd></td><td>フォームを閉じる</td><td>-</td></tr>
+    </tbody>
+</table>
+
+## リアクションフォーム
+デフォルトで「👍」にフォーカスが当たっている状態です。
+<table>
+    <thead>
+        <tr><th>ショートカット</th><th>効果</th><th>由来</th></tr>
+    </thead>
+    <tbody>
+        <tr><td><kbd class="key">↑</kbd>, <kbd class="key">K</kbd></td><td>上のリアクションにフォーカスを移動</td><td>-</td></tr>
+        <tr><td><kbd class="key">↓</kbd>, <kbd class="key">J</kbd></td><td>下のリアクションにフォーカスを移動</td><td>-</td></tr>
+        <tr><td><kbd class="key">←</kbd>, <kbd class="key">H</kbd>, <kbd class="group"><kbd class="key">Shift</kbd> + <kbd class="key">Tab</kbd></kbd></td><td>左のリアクションにフォーカスを移動</td><td>-</td></tr>
+        <tr><td><kbd class="key">→</kbd>, <kbd class="key">L</kbd>, <kbd class="key">Tab</kbd></td><td>右のリアクションにフォーカスを移動</td><td>-</td></tr>
+        <tr><td><kbd class="key">Enter</kbd>, <kbd class="key">Space</kbd>, <kbd class="key">+</kbd></td><td>リアクション確定</td><td>-</td></tr>
+        <tr><td><kbd class="key">0</kbd>~<kbd class="key">9</kbd></td><td>数字に対応したリアクションで確定</td><td>-</td></tr>
+        <tr><td><kbd class="key">Esc</kbd></td><td>リアクションするのをやめる</td><td>-</td></tr>
+    </tbody>
+</table>
diff --git a/src/docs/kab-KAB/features/mfm.md b/src/docs/kab-KAB/features/mfm.md
new file mode 100644
index 0000000000..5be2df4f30
--- /dev/null
+++ b/src/docs/kab-KAB/features/mfm.md
@@ -0,0 +1,12 @@
+# MFM
+MFMは、Misskey Flavored Markdownの略で、Misskeyの様々な場所で使用できる専用のマークアップ言語です。 MFMで使用可能な構文は[MFMチートシート](/mfm-cheat-sheet)で確認できます。
+
+## MFMが使用可能な場所の例
+- ノート本文
+- CW注釈
+- ユーザーの名前
+- ユーザーの自己紹介
+
+## 開発者向け情報
+MFMのパーサー実装はライブラリとして公開されており、簡単にクライアントにMFMを組み込むことが可能です。
+- [misskey-dev/mfm.js](https://github.com/misskey-dev/mfm.js) - JavaScriptパーサー実装
diff --git a/src/docs/kab-KAB/features/mute.md b/src/docs/kab-KAB/features/mute.md
new file mode 100644
index 0000000000..6a9608662a
--- /dev/null
+++ b/src/docs/kab-KAB/features/mute.md
@@ -0,0 +1,13 @@
+# ミュート
+
+ユーザーをミュートすると、そのユーザーに関する次のコンテンツがMisskeyに表示されなくなります:
+
+* タイムラインや投稿の検索結果内の、そのユーザーの投稿(およびそれらの投稿に対する返信やRenote)
+* そのユーザーからの通知
+* メッセージ履歴一覧内の、そのユーザーとのメッセージ履歴
+
+ユーザーをミュートするには、対象のユーザーのユーザーページに表示されている「ミュート」ボタンを押します。
+
+ミュートを行ったことは相手に通知されず、ミュートされていることを知ることもできません。
+
+設定>ミュート から、自分がミュートしているユーザー一覧を確認することができます。
diff --git a/src/docs/kab-KAB/features/note.md b/src/docs/kab-KAB/features/note.md
new file mode 100644
index 0000000000..70c1e2e214
--- /dev/null
+++ b/src/docs/kab-KAB/features/note.md
@@ -0,0 +1,51 @@
+# ノート
+ノートは、Misskeyに投稿される、文章、ファイル、アンケートなどを含むコンテンツで、Misskeyの中心的概念です。また、そのノートを作成する行為自体もノートと呼ばれます。
+
+ノートが作成されると、[タイムライン](./timeline)に追加され、自分の[フォロワー](./follow)やサーバーのユーザーが見れるようになります。
+
+ノートには、[リアクション](./reaction)を行うことができます。また、返信や引用もできます。
+
+ノートを[お気に入り](./favorite)登録することで、後で簡単に見返すことができます。
+
+## ノートを作成する
+ノートを作成するには、画面上にある鉛筆マークのボタンを押して、作成フォームを開きます。作成フォームに内容を入力し、「ノート」ボタンを押すことでノートが作成されます。 ノートには、画像、動画など任意のファイルや、[アンケート](./poll)を添付することができます。また、本文中には[MFM](./mfm)が使用でき、[メンション](./mention)や[ハッシュタグ](./hashtag)を含めることもできます。 他にも、CWや公開範囲といった設定も行えます(詳細は後述)。
+<div class="info">ℹ️ コンピューターのクリップボードに画像データがある状態で、フォーム内のテキストボックスにペーストするとその画像を添付することができます。</div>
+<div class="info">ℹ️ テキストボックス内で<kbd class="key">Ctrl + Enter</kbd>を押すことでも投稿できます。</div>
+
+## Renote
+既にあるノートを引用、もしくはそのノートを新しいノートとして共有する行為、またそれによって作成されたノートをRenoteと呼びます。 自分がフォローしているユーザーの、気に入ったノートを自分のフォロワーに共有したい場合や、過去の自分のノートを再度共有したい場合に使います。 同じノートに対して無制限にRenoteを行うことができますが、あまり連続して使用すると迷惑になる場合もあるので、注意しましょう。
+<div class="warn">⚠️ 公開範囲がフォロワーやダイレクトのノートはRenoteできません</div>
+
+Renoteを削除するには、Renoteの時刻表示の隣にある「...」を押し、「Renote解除」を選択します。
+
+## CW
+Contents Warningの略で、ノートの内容を、閲覧者の操作なしには表示しないようにできる機能です。主に長大な内容を隠すためや、ネタバレ防止などに使うことができます。 設定するには、フォームの「内容を隠す」ボタン(目のアイコン)を押します。すると新しい入力エリアが表れるので、そこに内容の要約を記入します。
+
+## 公開範囲
+ノートごとに、そのノートが公開される範囲を設定することができます。フォームの「ノート」ボタンの左にあるアイコンを押すと公開範囲を以下から選択できます。
+
+### パブリック
+全ての人に対してノートが公開されるほか、サーバーの全てのタイムライン(ホームタイムライン、ローカルタイムライン、ソーシャルタイムライン、グローバルタイムライン)にノートが流れます。
+<div class="warn">⚠️ アカウントが<a href="./silence">サイレンス</a>状態の時は、この公開範囲は使用できません。</div>
+
+### ホーム
+全ての人に対してノートが公開されますが、フォロワー以外のローカルタイムライン、ソーシャルタイムライン、グローバルタイムラインにはノートは流れません。
+
+### Imeḍfaṛen
+自分のフォロワーに対してのみノートを公開します。フォロワーの全てのタイムラインに流れます。
+
+### ダイレクト
+指定したユーザーに対してのみノートを公開します。指定したユーザーの全てのタイムラインに流れます。
+
+### 「ローカルのみ」オプション
+このオプションを有効にすると、リモートにノートを連合しなくなります。
+
+### 公開範囲の比較
+<table>
+    <tr><th></th><th>パブリック</th><th>ホーム</th><th>Imeḍfaṛen</th><th>ダイレクト</th></tr>
+    <tr><th>フォロワーのLTL/STL/GTL</th><td>✔</td><td>✔</td><td>✔</td><td></td></tr>
+    <tr><th>非フォロワーのLTL/STL/GTL</th><td>✔</td><td></td><td></td><td></td></tr>
+</table>
+
+## ピン留め
+ノートをピン留めすると、ユーザーページに常にそのノートを表示しておくことができます。 ノートのメニューを開き、「ピン留め」を選択してピン留めできます。 複数のノートをピン留めできます。
diff --git a/src/docs/kab-KAB/features/pages.md b/src/docs/kab-KAB/features/pages.md
new file mode 100644
index 0000000000..a7311b95e6
--- /dev/null
+++ b/src/docs/kab-KAB/features/pages.md
@@ -0,0 +1,10 @@
+# Pages
+
+## 変数
+変数を使うことで動的なページを作成できます。テキスト内で <b>{ 変数名 }</b> と書くとそこに変数の値を埋め込めます。例えば <b>Hello { thing } world!</b> というテキストで、変数(thing)の値が <b>ai</b> だった場合、テキストは <b>Hello ai world!</b> になります。
+
+変数の評価(値を算出すること)は上から下に行われるので、ある変数の中で自分より下の変数を参照することはできません。例えば上から <b>A、B、C</b> と3つの変数を定義したとき、<b>C</b>の中で<b>A</b>や<b>B</b>を参照することはできますが、<b>A</b>の中で<b>B</b>や<b>C</b>を参照することはできません。
+
+ユーザーからの入力を受け取るには、ページに「ユーザー入力」ブロックを設置し、「変数名」に入力を格納したい変数名を設定します(変数は自動で作成されます)。その変数を使ってユーザー入力に応じた動作を行えます。
+
+関数を使うと、値の算出処理を再利用可能な形にまとめることができます。関数を作るには、「関数」タイプの変数を作成します。関数にはスロット(引数)を設定することができ、スロットの値は関数内で変数として利用可能です。また、関数を引数に取る関数(高階関数と呼ばれます)も存在します。関数は予め定義しておくほかに、このような高階関数のスロットに即席でセットすることもできます。
diff --git a/src/docs/kab-KAB/features/reaction.md b/src/docs/kab-KAB/features/reaction.md
new file mode 100644
index 0000000000..4d479fd416
--- /dev/null
+++ b/src/docs/kab-KAB/features/reaction.md
@@ -0,0 +1,11 @@
+# リアクション
+他の人のノートに、絵文字を付けて簡単にあなたの反応を伝えられる機能です。 リアクションするには、ノートの + アイコンをクリックしてピッカーを表示し、絵文字を選択します。 リアクションには[カスタム絵文字](./custom-emoji)も使用できます。
+
+## リアクションピッカーのカスタマイズ
+ピッカーに表示される絵文字を自分好みにカスタマイズすることができます。 設定の「リアクション」で設定します。
+
+## リモート投稿へのリアクションについて
+リアクションはMisskeyオリジナルの機能であるため、リモートインスタンスがMisskeyでない限りは、ほとんどの場合「Like」としてアクティビティが送信されます。一般的にはLikeは「お気に入り」として実装されているようです。
+
+## リモートからのリアクションについて
+リモートから「Like」アクティビティを受信したとき、Misskeyでは「👍」のリアクションとして解釈されます。
diff --git a/src/docs/kab-KAB/features/silence.md b/src/docs/kab-KAB/features/silence.md
new file mode 100644
index 0000000000..7e26feab0d
--- /dev/null
+++ b/src/docs/kab-KAB/features/silence.md
@@ -0,0 +1,6 @@
+# サイレンス
+サイレンスは、アカウントに設定される状態のひとつです。
+
+アカウントがサイレンス状態になると、ノートの公開範囲をパブリックにできなくなります。 ホーム、フォロワー、ダイレクトは選択可能なため、サイレンスを受けた場合でもフォロワーやあなたのユーザーページを直接訪れた場合は投稿を閲覧できますが、GTL(連合タイムライン)やLTL(ローカルタイムライン)には投稿が流れません。
+
+アカウントのサイレンス状態は、サーバーのモデレーターによって有効化/無効化されます。
diff --git a/src/docs/kab-KAB/features/theme.md b/src/docs/kab-KAB/features/theme.md
new file mode 100644
index 0000000000..a406f3433c
--- /dev/null
+++ b/src/docs/kab-KAB/features/theme.md
@@ -0,0 +1,68 @@
+# テーマ
+
+テーマを設定して、Misskeyクライアントの見た目を変更できます。
+
+## テーマの設定
+設定 > テーマ
+
+## テーマを作成する
+テーマコードはJSON5で記述されたテーマオブジェクトです。 テーマは以下のようなオブジェクトです。
+``` js
+{
+    id: '17587283-dd92-4a2c-a22c-be0637c9e22a',
+
+    name: 'Danboard',
+    author: 'syuilo',
+
+    base: 'light',
+
+    props: {
+        accent: 'rgb(218, 141, 49)',
+        bg: 'rgb(218, 212, 190)',
+        fg: 'rgb(115, 108, 92)',
+        panel: 'rgb(236, 232, 220)',
+        renote: 'rgb(100, 152, 106)',
+        link: 'rgb(100, 152, 106)',
+        mention: '@accent',
+        hashtag: 'rgb(100, 152, 106)',
+        header: 'rgba(239, 227, 213, 0.75)',
+        navBg: 'rgb(216, 206, 182)',
+        inputBorder: 'rgba(0, 0, 0, 0.1)',
+    },
+}
+
+```
+
+* `id` ... テーマの一意なID。UUIDをおすすめします。
+* `name` ... テーマ名
+* `author` ... テーマの作者
+* `desc` ... テーマの説明(オプション)
+* `base` ... 明るいテーマか、暗いテーマか
+    * `light`にすると明るいテーマになり、`dark`にすると暗いテーマになります。
+    * テーマはここで設定されたベーステーマを継承します。
+* `props` ... テーマのスタイル定義。これから説明します。
+
+### テーマのスタイル定義
+`props`下にはテーマのスタイルを定義します。 キーがCSSの変数名になり、バリューで中身を指定します。 なお、この`props`オブジェクトはベーステーマから継承されます。 ベーステーマは、このテーマの`base`が`light`なら[_light.json5](https://github.com/misskey-dev/misskey/blob/develop/src/client/themes/_light.json5)で、`dark`なら[_dark.json5](https://github.com/misskey-dev/misskey/blob/develop/src/client/themes/_dark.json5)です。 つまり、このテーマ内の`props`に`panel`というキーが無くても、そこにはベーステーマの`panel`があると見なされます。
+
+#### バリューで使える構文
+* 16進数で表された色
+    * 例: `#00ff00`
+* `rgb(r, g, b)`形式で表された色
+    * 例: `rgb(0, 255, 0)`
+* `rgb(r, g, b, a)`形式で表された透明度を含む色
+    * 例: `rgba(0, 255, 0, 0.5)`
+* 他のキーの値の参照
+    * `@{キー名}`と書くと他のキーの値の参照になります。`{キー名}`は参照したいキーの名前に置き換えます。
+    * 例: `@panel`
+* 定数(後述)の参照
+    * `${定数名}`と書くと定数の参照になります。`{定数名}`は参照したい定数の名前に置き換えます。
+    * 例: `$main`
+* 関数(後述)
+    * `:{関数名}<{引数}<{色}`
+
+#### 定数
+「CSS変数として出力はしたくないが、他のCSS変数の値として使いまわしたい」値があるときは、定数を使うと便利です。 キー名を`$`で始めると、そのキーはCSS変数として出力されません。
+
+#### 関数
+wip
diff --git a/src/docs/kab-KAB/features/timeline.md b/src/docs/kab-KAB/features/timeline.md
new file mode 100644
index 0000000000..8ba0b76e4d
--- /dev/null
+++ b/src/docs/kab-KAB/features/timeline.md
@@ -0,0 +1,31 @@
+# タイムライン
+タイムラインは、[ノート](./note)が時系列で表示される機能です。 タイムラインには以下で示す種類があり、種類によって表示されるノートも異なります。 なお、タイムラインの種類によってはサーバーにより無効になっている場合があります。
+
+## ホーム
+自分のフォローしているユーザーの投稿が流れます。HTLと略されます。
+
+## ローカル
+全てのローカルユーザーの「ホーム」指定されていない投稿が流れます。LTLと略されます。
+
+## ソーシャル
+自分のフォローしているユーザーの投稿と、全てのローカルユーザーの「ホーム」指定されていない投稿が流れます。STLと略されます。
+
+## グローバル
+全てのローカルユーザーの「ホーム」指定されていない投稿と、サーバーに届いた全てのリモートユーザーの「ホーム」指定されていない投稿が流れます。GTLと略されます。
+
+## 比較
+| ソース          |           |     | タイムライン |       |       |
+| ------------ | --------- | --- | ------ | ----- | ----- |
+| ユーザー         | 公開範囲      | ホーム | ローカル   | ソーシャル | グローバル |
+| ローカル (フォロー)  | 公開        | ✔   | ✔      | ✔     | ✔     |
+|              | ホーム       | ✔   |        | ✔     |       |
+|              | Imeḍfaṛen | ✔   | ✔      | ✔     | ✔     |
+| リモート (フォロー)  | 公開        | ✔   |        | ✔     | ✔     |
+|              | ホーム       | ✔   |        | ✔     |       |
+|              | Imeḍfaṛen | ✔   |        | ✔     | ✔     |
+| ローカル (未フォロー) | 公開        |     | ✔      | ✔     | ✔     |
+|              | ホーム       |     |        |       |       |
+|              | Imeḍfaṛen |     |        |       |       |
+| リモート (未フォロー) | 公開        |     |        |       | ✔     |
+|              | ホーム       |     |        |       |       |
+|              | Imeḍfaṛen |     |        |       |       |
diff --git a/src/docs/kab-KAB/features/widgets.md b/src/docs/kab-KAB/features/widgets.md
new file mode 100644
index 0000000000..a7c2c1d1d6
--- /dev/null
+++ b/src/docs/kab-KAB/features/widgets.md
@@ -0,0 +1,7 @@
+# ウィジェット
+ウィジェットは、MisskeyのUI上に設置できる小型の情報表示、操作が行えるパーツです。
+
+ウィジェットを編集するには、ウィジェット編集モードに切り替えます。切り替え方法はUIによって異なります。 ウィジェット編集モードでは、ウィジェットの追加、削除、並び替え、およびそれぞれのウィジェットの設定を行えます。
+
+## 利用可能なウィジェット一覧
+todo
diff --git a/src/docs/kab-KAB/general/apps.md b/src/docs/kab-KAB/general/apps.md
new file mode 100644
index 0000000000..1f4c85fe8f
--- /dev/null
+++ b/src/docs/kab-KAB/general/apps.md
@@ -0,0 +1,6 @@
+# サードパーティアプリのリスト
+## クライアント
+todo
+
+## 連携サービス
+todo
diff --git a/src/docs/kab-KAB/general/faq.md b/src/docs/kab-KAB/general/faq.md
new file mode 100644
index 0000000000..ecb664e32e
--- /dev/null
+++ b/src/docs/kab-KAB/general/faq.md
@@ -0,0 +1,22 @@
+# よくある質問
+ここでは利用上のよくある質問について掲載しています。 Misskeyのプロジェクト自体についてのよくある質問は[こちら](./misskey)に掲載されています。
+
+### iOS/Androidのアプリはありますか?
+公式にはそういったOSのネイティブアプリを開発していませんが、サードパーティ製のアプリがいくつかあります。 詳しくは[こちら](./apps)をご覧ください。
+
+ただ、サードパーティ製アプリはどうしても機能への対応が遅れてしまうため、とくに拘りがなければ公式のWebクライアントの利用をおすすめします。 なお、MisskeyのWebクライアントはPWAに対応しているので、ネイティブアプリのように動作させることも可能です。 詳しくは[こちら](todo)をご覧ください。
+
+## 他のサーバーのユーザーをフォローするときは?
+メニューから検索を選び、ユーザー名をホスト込みで入力します。例: `@syuilo@misskey.io`
+
+## Renoteを削除するには?
+Renoteの時刻表示の隣にある「...」を押し、「Renote解除」を選択します。 Renoteについては[こちら](../features/note)をご確認ください。
+
+## URLのプレビューを表示させたくない
+MFMには、そのURLのプレビューを無効にする構文があります。詳細は[MFMチートシート](/mfm-cheat-sheet)をご確認ください。
+
+## カスタム絵文字を追加したい
+運営者のみがカスタム絵文字を追加、編集、削除できます。それらを希望する場合は運営者に依頼してください。
+
+## Botを開発したい
+Misskey APIを利用してBotの開発が可能です。[こちら](../advanced/develop-bot)をご確認ください。
diff --git a/src/docs/kab-KAB/general/glossary.md b/src/docs/kab-KAB/general/glossary.md
new file mode 100644
index 0000000000..1f403a06d2
--- /dev/null
+++ b/src/docs/kab-KAB/general/glossary.md
@@ -0,0 +1,83 @@
+# 用語集
+Misskeyに関する用語集です。
+
+## AcitivityPub
+(読み: あくてぃびてぃぱぶ) 分散型を実現するために用いられるプロトコル(仕様)。このプロトコルに則ってサーバー同士通信を行うことで、連合が行われ、Fediverseを形成しています。
+
+## AiScript
+(読み: あいすくりぷと) Misskey上で使用できるプログラミング言語です。詳細は[こちら。](../advanced/aiscript)
+
+## API
+(読み: えーぴーあい) Misskeyのサーバーが公開している、プログラムからMisskeyを扱うためのインターフェース。詳細は[こちら。](../advanced/api)
+
+## Bot
+(読み: ぼっと) プログラムによって動作しているアカウント。
+
+## CW
+(読み: こんてんつわーにんぐ) Contents Warningの略。ノートの内容を、操作なしには表示しないようにできる機能。主に長大な内容を隠すためや、ネタバレ防止などに使われます。
+
+## Fediverse
+(読み: ふぇでぃばーす) Misskeyを含む様々な分散型ソフトウェアのサーバーで構成されたネットワーク。
+
+## GTL
+グローバルタイムライン(Global TimeLine)の略。タイムラインの詳細は[こちら。](../features/timeline)
+
+## HTL
+ホームタイムライン(Home TimeLine)の略。タイムラインの詳細は[こちら。](../features/timeline)
+
+## LTL
+ローカルタイムライン(Local TimeLine)の略。タイムラインの詳細は[こちら。](../features/timeline)
+
+## MFM
+(読み: えむえふえむ) Misskey Flavored Markdownの略で、Misskey上で使用できるマークアップ言語です。詳細は[こちら。](../features/mfm)
+
+## NSFW
+(読み: のっとせーふふぉーわーく) Not Safe For Workの略。画像を「閲覧注意」扱いにし、操作なしには表示しないようにすることができる機能。
+
+## Renote
+(読み: りのーと) 既にあるノートを引用、もしくはそのノートを新しいノートとして共有する行為、またそれによって作成されたノート。詳細は[こちら。](../features/note)
+
+## STL
+ソーシャルタイムライン(Social TimeLine)の略。タイムラインの詳細は[こちら。](../features/timeline)
+
+## 藍
+(読み: あい) Misskeyの看板娘(公式キャラクター)です。
+
+## アクティブユーザー
+インスタンスにアカウントを作っているユーザーのうち、現在も実際にサービスを利用しているユーザーのこと。
+
+## インスタンス
+todo
+
+## コントロールパネル
+インスタンスの設定画面のこと。
+
+## サーバー
+todo
+
+## サイレンス
+ノートをパブリックな公開範囲で投稿できなくされている状態。モデレーターの判断でユーザーごとに設定されます。詳細は[こちら。](../features/silence)
+
+## 凍結
+アカウントが使用不可に設定されている状態。
+
+## ドライブ
+Misskeyにアップロードしたファイルを管理する機能。詳細は[こちら。](../features/drive)
+
+## ノート
+Misskeyに投稿される、文章、ファイル、アンケートなどを含めることができるコンテンツ。詳細は[こちら。](../features/note)
+
+## ミスキスト
+Misskeyを使う人のこと。
+
+## モデレーター
+スパムの凍結およびサイレンスや不適切な投稿の削除など、コミュニティ運営に関する権限を持つユーザー。
+
+## リモート
+他サーバーのことを指します。リモートユーザーといったように接頭辞としても使われます。ローカルの逆です。
+
+## 連合
+サーバー上で作成された情報が他のサーバーに伝わること。
+
+## ローカル
+自サーバーのことを指します。ローカルユーザー、ローカルタイムラインといったように接頭辞としても使われます。リモートの逆です。
diff --git a/src/docs/kab-KAB/general/links.md b/src/docs/kab-KAB/general/links.md
new file mode 100644
index 0000000000..d6b16856fb
--- /dev/null
+++ b/src/docs/kab-KAB/general/links.md
@@ -0,0 +1,5 @@
+# リンク集
+
+## ライブラリ
+- [misskey-dev/misskey.js](https://github.com/misskey-dev/misskey.js) - JavaScriptのMisskey SDK
+- [misskey-dev/mfm.js](https://github.com/misskey-dev/mfm.js) - JavaScriptのMFMパーサー実装
diff --git a/src/docs/kab-KAB/general/misskey.md b/src/docs/kab-KAB/general/misskey.md
new file mode 100644
index 0000000000..1e64a10e28
--- /dev/null
+++ b/src/docs/kab-KAB/general/misskey.md
@@ -0,0 +1,87 @@
+# Misskeyについて
+
+Misskeyはオープンソースの分散型マイクロブログプラットフォームプロジェクトです。 開発は日本でsyuiloによって2014年から開始されました。 ドライブ、リアクションなどの豊富な機能や、高いカスタマイズ性を備えたUIを持つことが特徴です。
+
+## 歴史
+開発当初は掲示板がメインのサービスでしたが、ユーザーが短文を投稿し、それを時系列で流れるタイムライン機能を追加したところ人気が高まり、徐々にそれがメインとして開発が進むようになりました。 当初は分散型ではありませんでしたが、2018年にAcitivityPubを実装し分散型になったことで、より多くの方に認知され利用されるサービスになり、現在に至ります。
+<div class="info">ℹ️ Misskeyという名前は、syuiloが当時聴いていたMay'nというアーティストの楽曲、Brain Diverの歌詞に由来します。</div>
+
+誰でも開発に参加することができ、現在でも活発に開発が続いています。
+
+## 分散型とは何か?
+
+<b>分散(distributed)型</b>とは、<b>非中央集権(decentralized)</b>とも呼ばれ、コミュニティが多数のサーバーに分散して存在し、それらが相互に<b>通信(連合、federation)</b>することでコンテンツ共有<b>ネットワーク(Fediverse)</b>を形成していることが特徴のサービスです。 単一のサーバーしか存在しない、もしくは複数存在しても互いに独立している場合は中央集権なサービスと言われ、例えばTwitterやFacebookなどほとんどのサービスがそれに該当します。 分散型のメリットは、自分に合った運営者やテーマのサーバーを選択できることです。自分でサーバーを作成することもできます。連合するおかげで、どのサーバーを選んでも、同じコミュニティにアクセスできます。
+
+## 常にオープンソース
+Misskeyはこれまでもこれからも、オープンソースであり続けます。オープンソースとは、簡単に言うと<b>ソフトウェアのソースコード(プログラム)が公開されている</b>ことです。ソースコードの修正や再配布が可能であることを定義に含めることもあります。 Misskeyのすべてのソースコードは[AGPL](https://github.com/misskey-dev/misskey/blob/develop/LICENSE)というオープンソースライセンスの下に[公開](https://github.com/misskey-dev)されていて、誰でも自由に閲覧、使用、修正、改変、再配布をすることができます。 オープンソースは、自分で好きなように変えたり、有害な処理が含まれていないことを確認することができたり、誰でも開発に参加できるなどの、様々なメリットがあります。 上述の分散型を実現するためにも、オープンソースであるということは必要不可欠な要素です。 再び引き合いに出しますが、TwitterやFacebookなどの利益を得ているほとんどのサービスはオープンソースではありません。
+
+<div class="info">ℹ️ 技術的に言うと、MisskeyのソースコードはGitで管理されていて、リポジトリは<a href="https://github.com/misskey-dev" target="_blank">GitHub上でホスティングされています。</a></div>
+
+## 開発に参加する、プロジェクトを支援する
+Misskeyを気に入っていただけたら、ぜひプロジェクトを支援してください。プロジェクトに貢献するには、以下で紹介するようにいろいろな方法があります。方法によっては開発のスキルは不要なので、誰でも気軽に参加し貢献することができます。いつでもお待ちしています。
+
+### 機能を追加したり、バグを修正する
+ソフトウェアエンジニアのスキルをお持ちの方であれば、ソースコードを編集する形でプロジェクトに貢献することができます。 貢献についてのガイドは[こちら](https://github.com/misskey-dev/misskey/blob/develop/CONTRIBUTING.md)です。
+
+### 議論に参加する
+新しい機能、または既存の機能について意見を述べたり、不具合を報告したりすることでも貢献できます。 そのようなディスカッションは[GitHub](https://github.com/misskey-dev)上か、[フォーラム](https://forum.misskey.io/)等で行われます。
+
+### テキストを翻訳する
+Misskeyは様々な言語に対応しています(i18n -internationalizationの略- と呼ばれます)。元の言語は基本的に日本語ですが、有志によって他の言語へと翻訳されています。 その翻訳作業に加わっていただくことでもMisskeyに貢献できます。 Misskeyは[Crowdinというサービスを使用して翻訳の管理を行っています。](https://crowdin.com/project/misskey)
+
+### 感想を投稿する
+不具合報告等だけではなく、Misskeyの良い点、楽しい点といったポジティブな意見もぜひ共有してください。開発の励みになり、それは間接的ですがプロジェクトへの貢献です。
+
+### ミスキストを増やす
+ミスキストとは、Misskeyを使用する人のことです。 知り合いに紹介するなどしてMisskeyを広めていただければ、ミスキストが増え開発のモチベーションが上がります。
+
+### 寄付をする
+Misskeyはビジネスではなく、利用は無料であるため、収益は皆様からの寄付のみです。(インスタンスによっては広告収入を得ているような場合もありますが、それは運営者の収入であり直接開発者への収入にはなりません) 寄付をしていただければ、今後も開発を続けることが可能になり、プロジェクトへの貢献になります。 寄付は基本的には[Patreon](https://www.patreon.com/syuilo)で受け付けています。 一定額寄付していただけると、Misskeyの[情報ページ](/about-misskey)に名前を記載することができます。
+
+また、サーバーの運営者も、基本的には収益を得ていません。サーバーの運営にはコストがかかるので、運営者の支援をすることもご検討ください。 開発には直接関係しませんが、サーバーがあってこそのプロジェクトなので、運営が維持されるというのは開発と同じくらい重要なことです。
+
+## クレジット
+Misskeyの開発者や、Misskeyに寄付をしてくださった方の一覧は[こちら](/about-misskey)で見ることができます。
+
+## よくある質問
+### プロジェクトは何を目指していますか?
+強いて言うと、漠然的になりますが広く使われる汎用的なプラットフォームになることを目指しています。 Misskeyは他のプロジェクトとは違い、何らかの思想(例えば、反中央集権)やビジョンに基づいて開発が行われているわけではなく、その点ではフラットです。 それが逆に、特定の方向性に縛られないフレキシブルさを生み出すことに繋がっていると感じています。
+<!-- TODO: ここにロードマップへのリンク -->
+
+### 企業によって開発されていますか?
+いいえ。Misskeyの開発は個人で行われており、商業的でもないため、特定の企業の関りはありません。 開発メンバーも基本的にはボランティアです。 また、開発に対し企業のスポンサーがつくこともありますが、その場合でもやはり開発は個人のコミュニティが主体です。
+
+### 誰が運営していますか?
+Misskeyは分散型なため、各サーバーにそれぞれ異なった運営者がいます。従って、特定の個人や企業によって、Misskeyの全てが運営されているわけではありません。 また、開発チームが運営を行うわけでもないため、運営に関する連絡は、お使いのサーバーの運営者に行ってください。 サーバーの運営者は、[このページ](/about)で確認することができます。 あなたがサーバーを作成すれば、あなたが運営者になります。
+
+### どのサーバーを選べばいいですか?
+[サーバー一覧が公開されています。](https://join.misskey.page/ja-JP/instances) サーバーによってコミュニティのテーマ(特定のこと、ものが好き 等)が決められている場合があるので、自分に合ったテーマのサーバーがあれば、そこを選ぶと良いかもしれません。 他にも、サーバーの規模、ユーザー層、国および言語、運営者が信頼できるかどうか、などの観点があります。 なお、Misskey公式のサーバーというものはありません。自身で新しくサーバーを作成するという選択肢もあります。
+
+基本的にどのサーバーを選んだとしても、他の全てのサーバーのユーザーと繋がることができます。
+
+### サーバーを建てるにはどうしたらいいですか?
+Misskeyサーバーの作成に興味を持っていただきありがとうございます。 2021年現在、Misskeyのホスティングサービスは存在しないため、サーバーの作成にはある程度の知識が必要です。 サーバーの作成方法については[こちら](todo)をご覧ください。
+
+### どのような技術を使用していますか?
+Misskeyは開発が進むにつれ使用する技術も大きく変わってきました。開発当初はMySQL + PHP + jQueryといった構成でしたが、現在は以下のようになっています。
+- サーバーサイド: Node.js
+- データベース: PostgreSQL、Redis
+- UIフレームワーク: Vue.js
+- プログラミング言語: TypeScript
+
+また、MFMやAiScriptなどの、Misskeyから派生して独自の技術も開発しています。
+
+### Mastodonのフォークですか?
+いいえ。MisskeyはMastodonやその他のプロジェクトとは全く別のプロジェクトです。 開発に関しても、Misskeyの方が昔から開発されています。ただし、分散型になったのはMastodonの登場より後です。 同じAcitivityPubという分散のためのプロトコルを実装しているという点以外、両者に特に関りがあるわけでもありません。
+
+### iOS/Androidのアプリはありますか?
+公式にはそういったOSのネイティブアプリを開発していませんが、サードパーティ製のアプリがいくつかあります。 詳しくは[こちら](./apps)をご覧ください。
+
+ただ、サードパーティ製アプリはどうしても機能への対応が遅れてしまうため、とくに拘りがなければ公式のWebクライアントの利用をおすすめします。 なお、MisskeyのWebクライアントはPWAに対応しているので、ネイティブアプリのように動作させることも可能です。 詳しくは[こちら](todo)をご覧ください。
+
+### Misskeyのロゴ、アイコンはどこで入手できますか?
+(準備中)
+
+### 時折目にする猫耳の可愛い女の子は?
+Misskeyの守り神、藍ちゃんです。アイチャンカワイイヤッター!
+<div class="info">ℹ️ 藍ちゃんについては<a href="https://xn--931a.moe/" target="_blank">こちら</a>です。</div>
diff --git a/src/docs/kab-KAB/general/report-issue.md b/src/docs/kab-KAB/general/report-issue.md
new file mode 100644
index 0000000000..63527e32af
--- /dev/null
+++ b/src/docs/kab-KAB/general/report-issue.md
@@ -0,0 +1,8 @@
+# 不具合の報告
+不具合と思われる状況に遭遇したときは、まず[トラブルシューティング](./troubleshooting)をご一読ください。 それでも問題が解決しないときは、以下の情報を含めて[フォーラム](https://forum.misskey.io/)に投稿してください。 投稿することで、解決策が見つかったり、不具合と判断されれば開発チームによって修正が行われます。
+
+## 含める情報
+- Misskeyのバージョン([情報ページ](/about)で確認できます)
+- お使いのブラウザの種類とバージョン
+- お使いのOSの種類とバージョン
+- 問題の再現手順
diff --git a/src/docs/kab-KAB/general/troubleshooting.md b/src/docs/kab-KAB/general/troubleshooting.md
new file mode 100644
index 0000000000..4a35091299
--- /dev/null
+++ b/src/docs/kab-KAB/general/troubleshooting.md
@@ -0,0 +1,36 @@
+# トラブルシューティング
+<div class="info">ℹ️ <a href="./faq">よくある質問</a>も合わせてお役立てください。</div>
+
+問題が発生したときは、まずこちらをご確認ください。 該当する項目が無い、もしくは手順を試しても効果がない場合は、サーバーの管理者に連絡するか[不具合を報告](./report-issue)してください。
+
+## クライアントが起動しない
+ほとんどの場合、お使いのブラウザまたはOSのバージョンが古いことが原因です。 ブラウザおよびOSのバージョンを最新のものに更新してから、再度試してみてください。
+
+これは稀ですが、それでも起動しない場合は、キャッシュが原因の場合があります。ブラウザのキャッシュをクリアして、再度試してみてください。
+
+## ページが読み込めない
+クライアントが起動するもののページが読み込めないというエラーが出る場合は、ネットワークに問題がないか確認してください。また、サーバーがダウンしていないか確認してください。
+
+これは稀ですが、キャッシュが原因の場合があります。ブラウザのキャッシュをクリアして、再度試してみてください。
+
+まだ問題がある場合は、サーバーの問題と思われるのでサーバーの管理者に連絡してください。
+
+## クライアントの動作が遅い
+以下を試してみてください:
+
+- クライアント設定で「UIのアニメーションを減らす」を有効にする
+- クライアント設定で「モーダルにぼかし効果を使用」を無効にする
+- お使いのブラウザの設定でハードウェアアクセラレーションを有効にする
+- お使いのデバイスのスペックを上げる
+
+## 通知やアンテナ等の点滅が消えない
+点滅は、未読のコンテンツがあることを示しています。通常点滅が消えない場合は、コンテンツを遡ると未読なコンテンツが残っています。 すべて既読にしたと思われるのに、それでもなお点滅が続く場合(おそらく不具合と思われます)は設定から強制的にすべて既読扱いにすることができます。
+
+## Renoteができない
+フォロワー限定のノートはRenoteすることはできません。
+
+## UI上で特定の要素が表示されない
+広告ブロッカーを使用しているとそのような不具合が発生することがあります。Misskeyではオフにしてご利用ください。
+
+## UI上で未翻訳の部分がある
+ほとんどの場合、単に翻訳が間に合っていないだけで、不具合ではありません。翻訳が終わるまでお待ちください。 [翻訳に参加](./misskey)していただくことも可能です。
diff --git a/src/docs/kn-IN/admin/disable-timelines.md b/src/docs/kn-IN/admin/disable-timelines.md
new file mode 100644
index 0000000000..b081e35ab0
--- /dev/null
+++ b/src/docs/kn-IN/admin/disable-timelines.md
@@ -0,0 +1,8 @@
+# LTL/STL/GTLの無効化
+Misskeyでは、LTL/STL/GTLをそれぞれ無効化することができます。有効/無効を切り替えるには、インスタンスコントロールパネルで設定します。
+
+LTLやSTLは、そのインスタンス全員の投稿が見れるため、新規のユーザーにとってはユーザーを探す必要がなくなり、興味のあるユーザーを見つけやすいという利点があります。 しかし同時に、フォロー機能が活用されなくなったり、不適切な投稿が目につきやすくなったり、チャットのようになることで内輪感が生じて逆に新規ユーザーが参加しにくくなるといったデメリットも持ち合わせています。 サーバーによってメリット/デメリットどちらが優勢かは異なるので、オプションとして無効にできるようになっています。 もしデメリットの方が上回っていると感じたら、それらのタイムラインを無効化することも検討してください。
+
+<div class="warn">⚠️ 無効化を行うと、ユーザーが困惑し、短期的に見て利用者が減る可能性があります。そのため、無効化の際は影響を慎重に検討し、事前に説明してフォローを整える期間を一定程度設けることを推奨します。</div>
+
+なお、管理者/モデレーターは、これらのタイムラインの無効化状態は適用されず、引き続き利用することが可能です。
diff --git a/src/docs/kn-IN/admin/faq.md b/src/docs/kn-IN/admin/faq.md
new file mode 100644
index 0000000000..317b4e0655
--- /dev/null
+++ b/src/docs/kn-IN/admin/faq.md
@@ -0,0 +1,5 @@
+# よくある質問
+ここでは、サーバー管理者向けのよくある質問を掲載しています。
+
+## デフォルトテーマを設定したい
+現在、デフォルトテーマ設定機能は実装されていません。
diff --git a/src/docs/kn-IN/advanced/aiscript.md b/src/docs/kn-IN/advanced/aiscript.md
new file mode 100644
index 0000000000..604d17daa8
--- /dev/null
+++ b/src/docs/kn-IN/advanced/aiscript.md
@@ -0,0 +1,7 @@
+# AiScript
+AiScriptは、Misskeyで使用できるスクリプト言語です。
+
+<div class="info">ℹ️ AiScript実装はMisskeyとは別リポジトリで、<a href="https://github.com/syuilo/aiscript" target="_blank">オープンソースで公開されています。</a></div>
+
+## 使い方
+AiScriptの構文や組み込み関数などのドキュメントは、[こちら](https://github.com/syuilo/aiscript/tree/master/docs)で公開されています。
diff --git a/src/docs/kn-IN/advanced/api.md b/src/docs/kn-IN/advanced/api.md
new file mode 100644
index 0000000000..76019b6145
--- /dev/null
+++ b/src/docs/kn-IN/advanced/api.md
@@ -0,0 +1,58 @@
+# Misskey API
+
+MisskeyAPIを使ってMisskeyクライアント、Misskey連携Webサービス、Bot等(以下「アプリケーション」と呼びます)を開発できます。 ストリーミングAPIもあるので、リアルタイム性のあるアプリケーションを作ることも可能です。
+
+APIを使い始めるには、まずアクセストークンを取得する必要があります。 このドキュメントでは、アクセストークンを取得する手順を説明した後、基本的なAPIの使い方を説明します。
+
+## アクセストークンの取得
+基本的に、APIはリクエストにはアクセストークンが必要となります。 APIにリクエストするのが自分自身なのか、不特定の利用者に使ってもらうアプリケーションなのかによって取得手順は異なります。
+
+* 前者の場合: [「自分自身のアクセストークンを手動発行する」](#自分自身のアクセストークンを手動発行する)に進む
+* 後者の場合: [「アプリケーション利用者にアクセストークンの発行をリクエストする」](#アプリケーション利用者にアクセストークンの発行をリクエストする)に進む
+
+### 自分自身のアクセストークンを手動発行する
+「設定 > API」で、自分のアクセストークンを発行できます。
+
+[「APIの使い方」へ進む](#APIの使い方)
+
+### アプリケーション利用者にアクセストークンの発行をリクエストする
+アプリケーション利用者のアクセストークンを取得するには、以下の手順で発行をリクエストします。
+
+#### Step 1
+
+UUIDを生成する。以後これをセッションIDと呼びます。
+
+> このセッションIDは毎回生成し、使いまわさないようにしてください。
+
+#### Step 2
+
+`{_URL_}/miauth/{session}`をユーザーのブラウザで表示させる。`{session}`の部分は、セッションIDに置き換えてください。
+> 例: `{_URL_}/miauth/c1f6d42b-468b-4fd2-8274-e58abdedef6f`
+
+表示する際、URLにクエリパラメータとしていくつかのオプションを設定できます:
+* `name` ... アプリケーション名
+    * > 例: `MissDeck`
+* `icon` ... アプリケーションのアイコン画像URL
+    * > 例: `https://missdeck.example.com/icon.png`
+* `callback` ... 認証が終わった後にリダイレクトするURL
+    * > 例: `https://missdeck.example.com/callback`
+    * リダイレクト時には、`session`というクエリパラメータでセッションIDが付きます
+* `permission` ... アプリケーションが要求する権限
+    * > 例: `write:notes,write:following,read:drive`
+    * 要求する権限を`,`で区切って列挙します
+    * どのような権限があるかは[APIリファレンス](/api-doc)で確認できます
+
+#### Step 3
+ユーザーが発行を許可した後、`{_URL_}/api/miauth/{session}/check`にPOSTリクエストすると、レスポンスとしてアクセストークンを含むJSONが返ります。
+
+レスポンスに含まれるプロパティ:
+* `token` ... ユーザーのアクセストークン
+* `user` ... ユーザーの情報
+
+[「APIの使い方」へ進む](#APIの使い方)
+
+## APIの使い方
+**APIはすべてPOSTで、リクエスト/レスポンスともにJSON形式です。RESTではありません。** アクセストークンは、`i`というパラメータ名でリクエストに含めます。
+
+* [APIリファレンス](/api-doc)
+* [ストリーミングAPI](./stream)
diff --git a/src/docs/kn-IN/advanced/create-plugin.md b/src/docs/kn-IN/advanced/create-plugin.md
new file mode 100644
index 0000000000..0d2fa19178
--- /dev/null
+++ b/src/docs/kn-IN/advanced/create-plugin.md
@@ -0,0 +1,74 @@
+# プラグインの作成
+Misskey Webクライアントのプラグイン機能を使うと、クライアントを拡張し、様々な機能を追加できます。 ここではプラグインの作成にあたってのメタデータ定義や、AiScript APIリファレンスを掲載します。
+
+## メタデータ
+プラグインは、AiScriptのメタデータ埋め込み機能を使って、デフォルトとしてプラグインのメタデータを定義する必要があります。 メタデータは次のプロパティを含むオブジェクトです。
+
+### name
+プラグイン名
+
+### author
+プラグイン作者
+
+### version
+プラグインバージョン。数値を指定してください。
+
+### description
+プラグインの説明
+
+### permissions
+プラグインが要求する権限。MisskeyAPIにリクエストする際に用いられます。
+
+### config
+プラグインの設定情報を表すオブジェクト。 キーに設定名、値に以下のプロパティを含めます。
+
+#### type
+設定値の種類を表す文字列。以下から選択します。 string number boolean
+
+#### label
+ユーザーに表示する設定名
+
+#### description
+設定の説明
+
+#### default
+設定のデフォルト値
+
+## APIリファレンス
+AiScript標準で組み込まれているAPIは掲載しません。
+
+### Mk:dialog(title text type)
+ダイアログを表示します。typeには以下の値が設定できます。 info success warn error question 省略すると info になります。
+
+### Mk:confirm(title text type)
+確認ダイアログを表示します。typeには以下の値が設定できます。 info success warn error question 省略すると question になります。 ユーザーが"OK"を選択した場合は true を、"キャンセル"を選択した場合は false が返ります。
+
+### Mk:api(endpoint params)
+Misskey APIにリクエストします。第一引数にエンドポイント名、第二引数にパラメータオブジェクトを渡します。
+
+### Mk:save(key value)
+任意の値に任意の名前を付けて永続化します。永続化した値は、AiScriptコンテキストが終了しても残り、Mk:loadで読み取ることができます。
+
+### Mk:load(key)
+Mk:saveで永続化した指定の名前の値を読み取ります。
+
+### Plugin:register_post_form_action(title fn)
+投稿フォームにアクションを追加します。第一引数にアクション名、第二引数にアクションが選択された際のコールバック関数を渡します。 コールバック関数には、第一引数に投稿フォームオブジェクトが渡されます。
+
+### Plugin:register_note_action(title fn)
+ノートメニューに項目を追加します。第一引数に項目名、第二引数に項目が選択された際のコールバック関数を渡します。 コールバック関数には、第一引数に対象のノートオブジェクトが渡されます。
+
+### Plugin:register_user_action(title fn)
+ユーザーメニューに項目を追加します。第一引数に項目名、第二引数に項目が選択された際のコールバック関数を渡します。 コールバック関数には、第一引数に対象のユーザーオブジェクトが渡されます。
+
+### Plugin:register_note_view_interruptor(fn)
+UIに表示されるノート情報を書き換えます。 コールバック関数には、第一引数に対象のノートオブジェクトが渡されます。 コールバック関数の返り値でノートが書き換えられます。
+
+### Plugin:register_note_post_interruptor(fn)
+ノート投稿時にノート情報を書き換えます。 コールバック関数には、第一引数に対象のノートオブジェクトが渡されます。 コールバック関数の返り値でノートが書き換えられます。
+
+### Plugin:open_url(url)
+第一引数に渡されたURLをブラウザの新しいタブで開きます。
+
+### Plugin:config
+プラグインの設定が格納されるオブジェクト。プラグイン定義のconfigで設定したキーで値が入ります。
diff --git a/src/docs/kn-IN/advanced/develop-bot.md b/src/docs/kn-IN/advanced/develop-bot.md
new file mode 100644
index 0000000000..7f825e9bc4
--- /dev/null
+++ b/src/docs/kn-IN/advanced/develop-bot.md
@@ -0,0 +1,6 @@
+# Botの作成
+[Misskey API](./api)を利用してBotの開発が可能です。 また、いくつかのBot実装が公開されているため、ぜひ参考にしてください。
+
+- [syuilo/ai](https://github.com/syuilo/ai) ... Node.js上で動く、TypeScript製Bot実装
+
+Botを作成したときは、プロフィール設定からBotフラグをオンにしておくことを強くおすすめします。
diff --git a/src/docs/kn-IN/advanced/reversi-bot.md b/src/docs/kn-IN/advanced/reversi-bot.md
new file mode 100644
index 0000000000..7ab2a7212e
--- /dev/null
+++ b/src/docs/kn-IN/advanced/reversi-bot.md
@@ -0,0 +1,160 @@
+# MisskeyリバーシBotの開発
+Misskeyのリバーシ機能に対応したBotの開発方法をここに記します。
+
+1. `games/reversi`ストリームに以下のパラメータを付けて接続する:
+    * `i`: botアカウントのAPIキー
+
+2. 対局への招待が来たら、ストリームから`invited`イベントが流れてくる
+    * イベントの中身に、`parent`という名前で対局へ誘ってきたユーザーの情報が含まれている
+
+3. `games/reversi/match`へ、`user_id`として`parent`の`id`が含まれたリクエストを送信する
+
+4. 上手くいくとゲーム情報が返ってくるので、`games/reversi-game`ストリームへ、以下のパラメータを付けて接続する:
+    * `i`: botアカウントのAPIキー
+    * `game`: `game`の`id`
+
+5. この間、相手がゲームの設定を変更するとその都度`update-settings`イベントが流れてくるので、必要であれば何かしらの処理を行う
+
+6. 設定に満足したら、`{ type: 'accept' }`メッセージをストリームに送信する
+
+7. ゲームが開始すると、`started`イベントが流れてくる
+    * イベントの中身にはゲーム情報が含まれている
+
+8. 石を打つには、ストリームに`{ type: 'set', pos: <位置> }`を送信する(位置の計算方法は後述)
+
+9. 相手または自分が石を打つと、ストリームから`set`イベントが流れてくる
+    * `color`として石の色が含まれている
+    * `pos`として位置情報が含まれている
+
+## 位置の計算法
+8x8のマップを考える場合、各マスの位置(インデックスと呼びます)は次のようになっています:
+```
++--+--+--+--+--+--+--+--+
+| 0| 1| 2| 3| 4| 5| 6| 7|
++--+--+--+--+--+--+--+--+
+| 8| 9|10|11|12|13|14|15|
++--+--+--+--+--+--+--+--+
+|16|17|18|19|20|21|22|23|
+...
+```
+
+### X,Y座標 から インデックス に変換する
+```
+pos = x + (y * mapWidth)
+```
+`mapWidth`は、ゲーム情報の`map`から、次のようにして計算できます:
+```
+mapWidth = map[0].length
+```
+
+### インデックス から X,Y座標 に変換する
+```
+x = pos % mapWidth
+y = Math.floor(pos / mapWidth)
+```
+
+## マップ情報
+マップ情報は、ゲーム情報の`map`に入っています。 文字列の配列になっており、ひとつひとつの文字がマス情報を表しています。 それをもとにマップのデザインを知る事が出来ます:
+* `(スペース)` ... マス無し
+* `-` ... マス
+* `b` ... 初期配置される黒石
+* `w` ... 初期配置される白石
+
+例えば、4*4の次のような単純なマップがあるとします:
+```text
++---+---+---+---+
+|   |   |   |   |
++---+---+---+---+
+|   | ○ | ● |   |
++---+---+---+---+
+|   | ● | ○ |   |
++---+---+---+---+
+|   |   |   |   |
++---+---+---+---+
+```
+
+この場合、マップデータはこのようになります:
+```javascript
+['----', '-wb-', '-bw-', '----']
+```
+
+## ユーザーにフォームを提示して対話可能Botを作成する
+ユーザーとのコミュニケーションを行うため、ゲームの設定画面でユーザーにフォームを提示することができます。 例えば、Botの強さをユーザーが設定できるようにする、といったシナリオが考えられます。
+
+フォームを提示するには、`reversi-game`ストリームに次のメッセージを送信します:
+```javascript
+{
+  type: 'init-form',
+  body: [フォームコントロールの配列]
+}
+```
+
+フォームコントロールの配列については今から説明します。 フォームコントロールは、次のようなオブジェクトです:
+```javascript
+{
+  id: 'switch1',
+  type: 'switch',
+  label: 'Enable hoge',
+  value: false
+}
+```
+`id` ... コントロールのID。 `type` ... コントロールの種類。後述します。 `label` ... コントロールと一緒に表記するテキスト。 `value` ... コントロールのデフォルト値。
+
+### フォームの操作を受け取る
+ユーザーがフォームを操作すると、ストリームから`update-form`イベントが流れてきます。 イベントの中身には、コントロールのIDと、ユーザーが設定した値が含まれています。 例えば、上で示したスイッチをユーザーがオンにしたとすると、次のイベントが流れてきます:
+```javascript
+{
+  id: 'switch1',
+  value: true
+}
+```
+
+### フォームコントロールの種類
+#### スイッチ
+type: `switch` スイッチを表示します。何かの機能をオン/オフさせたい場合に有用です。
+
+##### プロパティ
+`label` ... スイッチに表記するテキスト。
+
+#### ラジオボタン
+type: `radio` ラジオボタンを表示します。選択肢を提示するのに有用です。例えば、Botの強さを設定させるなどです。
+
+##### プロパティ
+`items` ... ラジオボタンの選択肢。例:
+```javascript
+items: [{
+  label: 'å¼±',
+  value: 1
+}, {
+  label: '中',
+  value: 2
+}, {
+  label: 'å¼·',
+  value: 3
+}]
+```
+
+#### スライダー
+type: `slider` スライダーを表示します。
+
+##### プロパティ
+`min` ... スライダーの下限。 `max` ... スライダーの上限。 `step` ... 入力欄で刻むステップ値。
+
+#### テキストボックス
+type: `textbox` テキストボックスを表示します。ユーザーになにか入力させる一般的な用途に利用できます。
+
+## ユーザーにメッセージを表示する
+設定画面でユーザーと対話する、フォーム以外のもうひとつの方法がこれです。ユーザーになにかメッセージを表示することができます。 例えば、ユーザーがBotの対応していないモードやマップを選択したとき、警告を表示するなどです。 メッセージを表示するには、次のメッセージをストリームに送信します:
+```javascript
+{
+  type: 'message',
+  body: {
+    text: 'メッセージ内容',
+    type: 'メッセージの種類'
+  }
+}
+```
+メッセージの種類: `success`, `info`, `warning`, `error`。
+
+## 投了する
+投了をするには、<a href="./api/endpoints/games/reversi/games/surrender">このエンドポイント</a>にリクエストします。
diff --git a/src/docs/kn-IN/advanced/stream.md b/src/docs/kn-IN/advanced/stream.md
new file mode 100644
index 0000000000..0e5edd2b0c
--- /dev/null
+++ b/src/docs/kn-IN/advanced/stream.md
@@ -0,0 +1,350 @@
+# ストリーミングAPI
+
+ストリーミングAPIを使うと、リアルタイムで様々な情報(例えばタイムラインに新しい投稿が流れてきた、メッセージが届いた、フォローされた、など)を受け取ったり、様々な操作を行ったりすることができます。
+
+## ストリームに接続する
+
+ストリーミングAPIを利用するには、まずMisskeyサーバーに**websocket**接続する必要があります。
+
+以下のURLに、`i`というパラメータ名で認証情報を含めて、websocket接続してください。例:
+```
+%WS_URL%/streaming?i=xxxxxxxxxxxxxxx
+```
+
+認証情報は、自分のAPIキーや、アプリケーションからストリームに接続する際はユーザーのアクセストークンのことを指します。
+
+<div class="info">ℹ️ 認証情報の取得については、<a href="./api">こちらのドキュメント</a>をご確認ください。</div>
+
+---
+
+認証情報は省略することもできますが、その場合非ログインでの利用ということになり、受信できる情報や可能な操作は限られます。例:
+
+```
+%WS_URL%/streaming
+```
+
+---
+
+ストリームに接続すると、後述するAPI操作や、投稿の購読を行ったりすることができます。 しかしまだこの段階では、例えばタイムラインへの新しい投稿を受信したりすることはできません。 それを行うには、ストリーム上で、後述する**チャンネル**に接続する必要があります。
+
+**ストリームでのやり取りはすべてJSONです。**
+
+## チャンネル
+MisskeyのストリーミングAPIにはチャンネルという概念があります。これは、送受信する情報を分離するための仕組みです。 Misskeyのストリームに接続しただけでは、まだリアルタイムでタイムラインの投稿を受信したりはできません。 ストリーム上でチャンネルに接続することで、様々な情報を受け取ったり情報を送信したりすることができるようになります。
+
+ひとつのストリーム上で、同時に複数のチャンネルに接続することができます。
+
+### チャンネルに接続する
+チャンネルに接続するには、次のようなデータをJSONでストリームに送信します:
+
+```json
+{
+    type: 'connect',
+    body: {
+        channel: 'xxxxxxxx',
+        id: 'foobar',
+        params: {
+            ...
+        }
+    }
+}
+```
+
+ここで、
+* `channel`には接続したいチャンネル名を設定します。チャンネルの種類については後述します。
+* `id`にはそのチャンネルとやり取りするための任意のIDを設定します。ストリームでは様々なメッセージが流れるので、そのメッセージがどのチャンネルからのものなのか識別する必要があるからです。このIDは、UUIDや、乱数のようなもので構いません。
+* `params`はチャンネルに接続する際のパラメータです。チャンネルによって接続時に必要とされるパラメータは異なります。パラメータ不要のチャンネルに接続する際は、このプロパティは省略可能です。
+
+<div class="info">ℹ️ IDはチャンネルごとではなく「チャンネルの接続ごと」です。なぜなら、同じチャンネルに異なるパラメータで複数接続するケースもあるからです。</div>
+
+### チャンネルからのメッセージを受け取る
+例えばタイムラインのチャンネルなら、新しい投稿があった時にメッセージを発します。そのメッセージを受け取ることで、タイムラインに新しい投稿がされたことをリアルタイムで知ることができます。
+
+チャンネルがメッセージを発すると、次のようなデータがJSONでストリームに流れてきます:
+```json
+{
+    type: 'channel',
+    body: {
+        id: 'foobar',
+        type: 'something',
+        body: {
+            some: 'thing'
+        }
+    }
+}
+```
+
+ここで、
+* `id`には前述したそのチャンネルに接続する際に設定したIDが設定されています。これで、このメッセージがどのチャンネルからのものなのか知ることができます。
+* `type`にはメッセージの種類が設定されます。チャンネルによって、どのような種類のメッセージが流れてくるかは異なります。
+* `body`にはメッセージの内容が設定されます。チャンネルによって、どのような内容のメッセージが流れてくるかは異なります。
+
+### チャンネルに向けてメッセージを送信する
+チャンネルによっては、メッセージを受け取るだけでなく、こちらから何かメッセージを送信し、何らかの操作を行える場合があります。
+
+チャンネルにメッセージを送信するには、次のようなデータをJSONでストリームに送信します:
+```json
+{
+    type: 'channel',
+    body: {
+        id: 'foobar',
+        type: 'something',
+        body: {
+            some: 'thing'
+        }
+    }
+}
+```
+
+ここで、
+* `id`には前述したそのチャンネルに接続する際に設定したIDを設定します。これで、このメッセージがどのチャンネルに向けたものなのか識別させることができます。
+* `type`にはメッセージの種類を設定します。チャンネルによって、どのような種類のメッセージを受け付けるかは異なります。
+* `body`にはメッセージの内容を設定します。チャンネルによって、どのような内容のメッセージを受け付けるかは異なります。
+
+### チャンネルから切断する
+チャンネルから切断するには、次のようなデータをJSONでストリームに送信します:
+
+```json
+{
+    type: 'disconnect',
+    body: {
+        id: 'foobar'
+    }
+}
+```
+
+ここで、
+* `id`には前述したそのチャンネルに接続する際に設定したIDを設定します。
+
+## ストリームを経由してAPIリクエストする
+
+ストリームを経由してAPIリクエストすると、HTTPリクエストを発生させずにAPIを利用できます。そのため、コードを簡潔にできたり、パフォーマンスの向上を見込めるかもしれません。
+
+ストリームを経由してAPIリクエストするには、次のようなデータをJSONでストリームに送信します:
+```json
+{
+    type: 'api',
+    body: {
+        id: 'xxxxxxxxxxxxxxxx',
+        endpoint: 'notes/create',
+        data: {
+            text: 'yee haw!'
+        }
+    }
+}
+```
+
+ここで、
+* `id`には、APIのレスポンスを識別するための、APIリクエストごとの一意なIDを設定する必要があります。UUIDや、簡単な乱数のようなもので構いません。
+* `endpoint`には、あなたがリクエストしたいAPIのエンドポイントを指定します。
+* `data`には、エンドポイントのパラメータを含めます。
+
+<div class="info">ℹ️ APIのエンドポイントやパラメータについてはAPIリファレンスをご確認ください。</div>
+
+### レスポンスの受信
+
+APIへリクエストすると、レスポンスがストリームから次のような形式で流れてきます。
+
+```json
+{
+    type: 'api:xxxxxxxxxxxxxxxx',
+    body: {
+        ...
+    }
+}
+```
+
+ここで、
+* `xxxxxxxxxxxxxxxx`の部分には、リクエストの際に設定された`id`が含まれています。これにより、どのリクエストに対するレスポンスなのか判別することができます。
+* `body`には、レスポンスが含まれています。
+
+## 投稿のキャプチャ
+
+Misskeyは投稿のキャプチャと呼ばれる仕組みを提供しています。これは、指定した投稿のイベントをストリームで受け取る機能です。
+
+例えばタイムラインを取得してユーザーに表示したとします。ここで誰かがそのタイムラインに含まれるどれかの投稿に対してリアクションしたとします。
+
+しかし、クライアントからするとある投稿にリアクションが付いたことなどは知る由がないため、リアルタイムでリアクションをタイムライン上の投稿に反映して表示するといったことができません。
+
+この問題を解決するために、Misskeyは投稿のキャプチャ機構を用意しています。投稿をキャプチャすると、その投稿に関するイベントを受け取ることができるため、リアルタイムでリアクションを反映させたりすることが可能になります。
+
+### 投稿をキャプチャする
+
+投稿をキャプチャするには、ストリームに次のようなメッセージを送信します:
+
+```json
+{
+    type: 'subNote',
+    body: {
+        id: 'xxxxxxxxxxxxxxxx'
+    }
+}
+```
+
+ここで、
+* `id`にキャプチャしたい投稿の`id`を設定します。
+
+このメッセージを送信すると、Misskeyにキャプチャを要請したことになり、以後、その投稿に関するイベントが流れてくるようになります。
+
+例えば投稿にリアクションが付いたとすると、次のようなメッセージが流れてきます:
+
+```json
+{
+    type: 'noteUpdated',
+    body: {
+        id: 'xxxxxxxxxxxxxxxx',
+        type: 'reacted',
+        body: {
+            reaction: 'like',
+            userId: 'yyyyyyyyyyyyyyyy'
+        }
+    }
+}
+```
+
+ここで、
+* `body`内の`id`に、イベントを発生させた投稿のIDが設定されます。
+* `body`内の`type`に、イベントの種類が設定されます。
+* `body`内の`body`に、イベントの詳細が設定されます。
+
+#### イベントの種類
+
+##### `reacted`
+その投稿にリアクションがされた時に発生します。
+
+* `reaction`に、リアクションの種類が設定されます。
+* `userId`に、リアクションを行ったユーザーのIDが設定されます。
+
+例:
+```json
+{
+    type: 'noteUpdated',
+    body: {
+        id: 'xxxxxxxxxxxxxxxx',
+        type: 'reacted',
+        body: {
+            reaction: 'like',
+            userId: 'yyyyyyyyyyyyyyyy'
+        }
+    }
+}
+```
+
+##### `deleted`
+その投稿が削除された時に発生します。
+
+* `deletedAt`に、削除日時が設定されます。
+
+例:
+```json
+{
+    type: 'noteUpdated',
+    body: {
+        id: 'xxxxxxxxxxxxxxxx',
+        type: 'deleted',
+        body: {
+            deletedAt: '2018-10-22T02:17:09.703Z'
+        }
+    }
+}
+```
+
+##### `pollVoted`
+その投稿に添付されたアンケートに投票された時に発生します。
+
+* `choice`に、選択肢IDが設定されます。
+* `userId`に、投票を行ったユーザーのIDが設定されます。
+
+例:
+```json
+{
+    type: 'noteUpdated',
+    body: {
+        id: 'xxxxxxxxxxxxxxxx',
+        type: 'pollVoted',
+        body: {
+            choice: 2,
+            userId: 'yyyyyyyyyyyyyyyy'
+        }
+    }
+}
+```
+
+### 投稿のキャプチャを解除する
+
+その投稿がもう画面に表示されなくなったりして、その投稿に関するイベントをもう受け取る必要がなくなったときは、キャプチャの解除を申請してください。
+
+次のメッセージを送信します:
+
+```json
+{
+    type: 'unsubNote',
+    body: {
+        id: 'xxxxxxxxxxxxxxxx'
+    }
+}
+```
+
+ここで、
+* `id`にキャプチャを解除したい投稿の`id`を設定します。
+
+このメッセージを送信すると、以後、その投稿に関するイベントは流れてこないようになります。
+
+# チャンネル一覧
+## `main`
+アカウントに関する基本的な情報が流れてきます。このチャンネルにパラメータはありません。
+
+### 流れてくるイベント一覧
+
+#### `renote`
+自分の投稿がRenoteされた時に発生するイベントです。自分自身の投稿をRenoteしたときは発生しません。
+
+#### `mention`
+誰かからメンションされたときに発生するイベントです。
+
+#### `readAllNotifications`
+自分宛ての通知がすべて既読になったことを表すイベントです。このイベントを利用して、「通知があることを示すアイコン」のようなものをオフにしたりする等のケースが想定されます。
+
+#### `meUpdated`
+自分の情報が更新されたことを表すイベントです。
+
+#### `follow`
+自分が誰かをフォローしたときに発生するイベントです。
+
+#### `unfollow`
+自分が誰かのフォローを解除したときに発生するイベントです。
+
+#### `followed`
+自分が誰かにフォローされたときに発生するイベントです。
+
+## `homeTimeline`
+ホームタイムラインの投稿情報が流れてきます。このチャンネルにパラメータはありません。
+
+### 流れてくるイベント一覧
+
+#### `note`
+タイムラインに新しい投稿が流れてきたときに発生するイベントです。
+
+## `localTimeline`
+ローカルタイムラインの投稿情報が流れてきます。このチャンネルにパラメータはありません。
+
+### 流れてくるイベント一覧
+
+#### `note`
+ローカルタイムラインに新しい投稿が流れてきたときに発生するイベントです。
+
+## `hybridTimeline`
+ソーシャルタイムラインの投稿情報が流れてきます。このチャンネルにパラメータはありません。
+
+### 流れてくるイベント一覧
+
+#### `note`
+ソーシャルタイムラインに新しい投稿が流れてきたときに発生するイベントです。
+
+## `globalTimeline`
+グローバルタイムラインの投稿情報が流れてきます。このチャンネルにパラメータはありません。
+
+### 流れてくるイベント一覧
+
+#### `note`
+グローバルタイムラインに新しい投稿が流れてきたときに発生するイベントです。
diff --git a/src/docs/kn-IN/features/antenna.md b/src/docs/kn-IN/features/antenna.md
new file mode 100644
index 0000000000..94ad9e4aea
--- /dev/null
+++ b/src/docs/kn-IN/features/antenna.md
@@ -0,0 +1,4 @@
+# アンテナ
+アンテナは、自由に条件を設定して、合致するノートを自動で収集することができる機能です。
+
+条件を設定したアンテナが作成された状態で、条件に合致するノートが投稿されると、リアルタイムでそのアンテナのタイムラインにノートが追加されます。
diff --git a/src/docs/kn-IN/features/custom-emoji.md b/src/docs/kn-IN/features/custom-emoji.md
new file mode 100644
index 0000000000..ed2e92be16
--- /dev/null
+++ b/src/docs/kn-IN/features/custom-emoji.md
@@ -0,0 +1,2 @@
+# カスタム絵文字
+カスタム絵文字は、インスタンスで用意された画像を絵文字のように使える機能です。 ノート、リアクション、チャット、自己紹介、名前などの場所で使うことができます。 カスタム絵文字をそれらの場所で使うには、絵文字ピッカーボタン(ある場合)を押すか、`:`を入力して絵文字サジェストを表示します。 テキスト内に`:foo:`のような形式の文字列が見つかると、`foo`の部分がカスタム絵文字名と解釈され、表示時には対応したカスタム絵文字に置き換わります。
diff --git a/src/docs/kn-IN/features/deck.md b/src/docs/kn-IN/features/deck.md
new file mode 100644
index 0000000000..8057e262fd
--- /dev/null
+++ b/src/docs/kn-IN/features/deck.md
@@ -0,0 +1,18 @@
+# デッキ
+
+デッキは利用可能なUIのひとつです。「カラム」と呼ばれるビューを複数並べて表示させることで、カスタマイズ性が高く、情報量の多いUIが構築できることが特徴です。
+
+## カラムの追加
+デッキの背景を右クリックし、「カラムを追加」して任意のカラムを追加できます。
+
+## カラムの移動
+カラムは、ドラッグアンドドロップで他のカラムと位置を入れ替えることが出来るほか、カラムメニュー(カラムのヘッダー右クリック)から位置を移動させることもできます。
+
+## カラムの水平分割
+カラムは左右だけでなく、上下に並べることもできます。 カラムメニューを開き、「左に重ねる」を選択すると、左のカラムの下に現在のカラムが移動します。 上下分割を解除するには、カラムメニューの「右に出す」を選択します。
+
+## カラムの設定
+カラムメニューの「編集」を選択するとカラムの設定を編集できます。カラムの名前を変えたり、幅を変えたりできます。
+
+## デッキの設定
+デッキに関する設定は、[settings/deck](/settings/deck)で行えます。
diff --git a/src/docs/kn-IN/features/drive.md b/src/docs/kn-IN/features/drive.md
new file mode 100644
index 0000000000..b82a41082a
--- /dev/null
+++ b/src/docs/kn-IN/features/drive.md
@@ -0,0 +1,17 @@
+# ドライブ
+ドライブは、Misskey上でファイルを管理できる機能です。
+
+[ドライブのページ](/my/drive)から任意のファイルをアップロードできるほか、アバターに設定した画像や、ノートに添付したファイルなどもすべてドライブにアップロードされます。
+
+<div class="warn">⚠️ ドライブからファイルを削除すると、そのファイルが添付されたノートも消えます。</div>
+
+ドライブにアップロードされたファイルは、いつでもダウンロードすることができるほか、ノート作成時に「ドライブからファイルを添付」することでファイルを再利用することもできます。
+
+ドライブ内にフォルダを作り、複数のファイルをまとめて整理することもできます。
+
+## 閲覧注意 (NSFW)
+<div class="info">ℹ️ この項目が閲覧注意なわけではありません</div>
+
+閲覧注意またはNSFW (Not safe for work) は、ドライブのファイルに設定することができるフラグです。 閲覧注意フラグを設定されたファイルは、表示される際に閲覧者の操作なしには表示されなくなります。 このフラグは、例えば職場や公共の場で閲覧するのに適切でないと思われる画像などに設定し、そのような画像が突然表示されてしまうことを防ぐ目的で使われます。
+
+このフラグは手動でオンオフを切り替えられるほか、モデレーターの判断で設定される場合もあります。
diff --git a/src/docs/kn-IN/features/favorite.md b/src/docs/kn-IN/features/favorite.md
new file mode 100644
index 0000000000..8549bab4b7
--- /dev/null
+++ b/src/docs/kn-IN/features/favorite.md
@@ -0,0 +1,4 @@
+# ಮೆಚ್ಚಿನ
+[ノート](./node)をお気に入りとして登録できる機能です。 お気に入り登録したノートは、[お気に入りページ](./my/favorites)で一覧することができます。 お気に入りに登録したことは相手に通知されず、お気に入りは自分しか見ることができません。
+
+ノートをお気に入り登録するには、ノートメニューの「お気に入り」を押します。お気に入り解除するには、ノートメニューの「お気に入り解除」を押します。
diff --git a/src/docs/kn-IN/features/follow.md b/src/docs/kn-IN/features/follow.md
new file mode 100644
index 0000000000..3c1ea7bbe0
--- /dev/null
+++ b/src/docs/kn-IN/features/follow.md
@@ -0,0 +1,2 @@
+# フォロー
+ユーザーをフォローすると、タイムラインにそのユーザーの投稿が表示されるようになります。ただし、他のユーザーに対する返信は含まれません。 ユーザーをフォローするには、ユーザーページの「フォロー」ボタンをクリックします。フォローを解除するには、もう一度クリックします。
diff --git a/src/docs/kn-IN/features/keyboard-shortcut.md b/src/docs/kn-IN/features/keyboard-shortcut.md
new file mode 100644
index 0000000000..7430ad7fe6
--- /dev/null
+++ b/src/docs/kn-IN/features/keyboard-shortcut.md
@@ -0,0 +1,66 @@
+# キーボードショートカット
+
+## グローバル
+これらのショートカットは基本的にどこでも使えます。
+<table>
+    <thead>
+        <tr><th>ショートカット</th><th>効果</th><th>由来</th></tr>
+    </thead>
+    <tbody>
+        <tr><td><kbd class="key">P</kbd>, <kbd class="key">N</kbd></td><td>新規投稿</td><td><b>P</b>ost, <b>N</b>ew, <b>N</b>ote</td></tr>
+        <tr><td><kbd class="key">T</kbd></td><td>タイムラインの最も新しい投稿にフォーカス</td><td><b>T</b>imeline, <b>T</b>op</td></tr>
+        <tr><td><kbd class="group"><kbd class="key">Shift</kbd> + <kbd class="key">N</kbd></kbd></td><td>通知を表示/隠す</td><td><b>N</b>otifications</td></tr>
+        <tr><td><kbd class="key">S</kbd></td><td>ಹುಡುಕು</td><td><b>S</b>earch</td></tr>
+        <tr><td><kbd class="key">H</kbd>, <kbd class="key">?</kbd></td><td>ヘルプを表示</td><td><b>H</b>elp</td></tr>
+    </tbody>
+</table>
+
+## 投稿にフォーカスされた状態
+<table>
+    <thead>
+        <tr><th>ショートカット</th><th>効果</th><th>由来</th></tr>
+    </thead>
+    <tbody>
+        <tr><td><kbd class="key">↑</kbd>, <kbd class="key">K</kbd>, <kbd class="group"><kbd class="key">Shift</kbd> + <kbd class="key">Tab</kbd></kbd></td><td>上の投稿にフォーカスを移動</td><td>-</td></tr>
+        <tr><td><kbd class="key">↓</kbd>, <kbd class="key">J</kbd>, <kbd class="key">Tab</kbd></td><td>下の投稿にフォーカスを移動</td><td>-</td></tr>
+        <tr><td><kbd class="key">R</kbd></td><td>返信フォームを開く</td><td><b>R</b>eply</td></tr>
+        <tr><td><kbd class="key">Q</kbd></td><td>Renoteフォームを開く</td><td><b>Q</b>uote</td></tr>
+        <tr><td><kbd class="group"><kbd class="key">Ctrl</kbd> + <kbd class="key">Q</kbd></kbd></td><td>即刻Renoteする(フォームを開かずに)</td><td>-</td></tr>
+        <tr><td><kbd class="key">E</kbd>, <kbd class="key">A</kbd>, <kbd class="key">+</kbd></td><td>リアクションフォームを開く</td><td><b>E</b>mote, re<b>A</b>ction</td></tr>
+        <tr><td><kbd class="key">0</kbd>~<kbd class="key">9</kbd></td><td>数字に対応したリアクションをする(対応については後述)</td><td>-</td></tr>
+        <tr><td><kbd class="key">F</kbd>, <kbd class="key">B</kbd></td><td>お気に入りに登録</td><td><b>F</b>avorite, <b>B</b>ookmark</td></tr>
+        <tr><td><kbd class="key">Del</kbd>, <kbd class="group"><kbd class="key">Ctrl</kbd> + <kbd class="key">D</kbd></kbd></td><td>投稿を削除</td><td><b>D</b>elete</tr>
+        <tr><td><kbd class="key">M</kbd>, <kbd class="key">O</kbd></td><td>投稿に対するメニューを開く</td><td><b>M</b>ore, <b>O</b>ther</td></tr>
+        <tr><td><kbd class="key">S</kbd></td><td>CWで隠された部分を表示 or 隠す</td><td><b>S</b>how, <b>S</b>ee</td></tr>
+        <tr><td><kbd class="key">Esc</kbd></td><td>フォーカスを外す</td><td>-</td></tr>
+    </tbody>
+</table>
+
+## Renoteフォーム
+<table>
+    <thead>
+        <tr><th>ショートカット</th><th>効果</th><th>由来</th></tr>
+    </thead>
+    <tbody>
+        <tr><td><kbd class="key">Enter</kbd></td><td>Renoteする</td><td>-</td></tr>
+        <tr><td><kbd class="key">Q</kbd></td><td>フォームを展開する</td><td><b>Q</b>uote</td></tr>
+        <tr><td><kbd class="key">Esc</kbd></td><td>フォームを閉じる</td><td>-</td></tr>
+    </tbody>
+</table>
+
+## リアクションフォーム
+デフォルトで「👍」にフォーカスが当たっている状態です。
+<table>
+    <thead>
+        <tr><th>ショートカット</th><th>効果</th><th>由来</th></tr>
+    </thead>
+    <tbody>
+        <tr><td><kbd class="key">↑</kbd>, <kbd class="key">K</kbd></td><td>上のリアクションにフォーカスを移動</td><td>-</td></tr>
+        <tr><td><kbd class="key">↓</kbd>, <kbd class="key">J</kbd></td><td>下のリアクションにフォーカスを移動</td><td>-</td></tr>
+        <tr><td><kbd class="key">←</kbd>, <kbd class="key">H</kbd>, <kbd class="group"><kbd class="key">Shift</kbd> + <kbd class="key">Tab</kbd></kbd></td><td>左のリアクションにフォーカスを移動</td><td>-</td></tr>
+        <tr><td><kbd class="key">→</kbd>, <kbd class="key">L</kbd>, <kbd class="key">Tab</kbd></td><td>右のリアクションにフォーカスを移動</td><td>-</td></tr>
+        <tr><td><kbd class="key">Enter</kbd>, <kbd class="key">Space</kbd>, <kbd class="key">+</kbd></td><td>リアクション確定</td><td>-</td></tr>
+        <tr><td><kbd class="key">0</kbd>~<kbd class="key">9</kbd></td><td>数字に対応したリアクションで確定</td><td>-</td></tr>
+        <tr><td><kbd class="key">Esc</kbd></td><td>リアクションするのをやめる</td><td>-</td></tr>
+    </tbody>
+</table>
diff --git a/src/docs/kn-IN/features/mfm.md b/src/docs/kn-IN/features/mfm.md
new file mode 100644
index 0000000000..5be2df4f30
--- /dev/null
+++ b/src/docs/kn-IN/features/mfm.md
@@ -0,0 +1,12 @@
+# MFM
+MFMは、Misskey Flavored Markdownの略で、Misskeyの様々な場所で使用できる専用のマークアップ言語です。 MFMで使用可能な構文は[MFMチートシート](/mfm-cheat-sheet)で確認できます。
+
+## MFMが使用可能な場所の例
+- ノート本文
+- CW注釈
+- ユーザーの名前
+- ユーザーの自己紹介
+
+## 開発者向け情報
+MFMのパーサー実装はライブラリとして公開されており、簡単にクライアントにMFMを組み込むことが可能です。
+- [misskey-dev/mfm.js](https://github.com/misskey-dev/mfm.js) - JavaScriptパーサー実装
diff --git a/src/docs/kn-IN/features/mute.md b/src/docs/kn-IN/features/mute.md
new file mode 100644
index 0000000000..6a9608662a
--- /dev/null
+++ b/src/docs/kn-IN/features/mute.md
@@ -0,0 +1,13 @@
+# ミュート
+
+ユーザーをミュートすると、そのユーザーに関する次のコンテンツがMisskeyに表示されなくなります:
+
+* タイムラインや投稿の検索結果内の、そのユーザーの投稿(およびそれらの投稿に対する返信やRenote)
+* そのユーザーからの通知
+* メッセージ履歴一覧内の、そのユーザーとのメッセージ履歴
+
+ユーザーをミュートするには、対象のユーザーのユーザーページに表示されている「ミュート」ボタンを押します。
+
+ミュートを行ったことは相手に通知されず、ミュートされていることを知ることもできません。
+
+設定>ミュート から、自分がミュートしているユーザー一覧を確認することができます。
diff --git a/src/docs/kn-IN/features/note.md b/src/docs/kn-IN/features/note.md
new file mode 100644
index 0000000000..3deb87fb0e
--- /dev/null
+++ b/src/docs/kn-IN/features/note.md
@@ -0,0 +1,51 @@
+# ノート
+ノートは、Misskeyに投稿される、文章、ファイル、アンケートなどを含むコンテンツで、Misskeyの中心的概念です。また、そのノートを作成する行為自体もノートと呼ばれます。
+
+ノートが作成されると、[タイムライン](./timeline)に追加され、自分の[フォロワー](./follow)やサーバーのユーザーが見れるようになります。
+
+ノートには、[リアクション](./reaction)を行うことができます。また、返信や引用もできます。
+
+ノートを[お気に入り](./favorite)登録することで、後で簡単に見返すことができます。
+
+## ノートを作成する
+ノートを作成するには、画面上にある鉛筆マークのボタンを押して、作成フォームを開きます。作成フォームに内容を入力し、「ノート」ボタンを押すことでノートが作成されます。 ノートには、画像、動画など任意のファイルや、[アンケート](./poll)を添付することができます。また、本文中には[MFM](./mfm)が使用でき、[メンション](./mention)や[ハッシュタグ](./hashtag)を含めることもできます。 他にも、CWや公開範囲といった設定も行えます(詳細は後述)。
+<div class="info">ℹ️ コンピューターのクリップボードに画像データがある状態で、フォーム内のテキストボックスにペーストするとその画像を添付することができます。</div>
+<div class="info">ℹ️ テキストボックス内で<kbd class="key">Ctrl + Enter</kbd>を押すことでも投稿できます。</div>
+
+## Renote
+既にあるノートを引用、もしくはそのノートを新しいノートとして共有する行為、またそれによって作成されたノートをRenoteと呼びます。 自分がフォローしているユーザーの、気に入ったノートを自分のフォロワーに共有したい場合や、過去の自分のノートを再度共有したい場合に使います。 同じノートに対して無制限にRenoteを行うことができますが、あまり連続して使用すると迷惑になる場合もあるので、注意しましょう。
+<div class="warn">⚠️ 公開範囲がフォロワーやダイレクトのノートはRenoteできません</div>
+
+Renoteを削除するには、Renoteの時刻表示の隣にある「...」を押し、「Renote解除」を選択します。
+
+## CW
+Contents Warningの略で、ノートの内容を、閲覧者の操作なしには表示しないようにできる機能です。主に長大な内容を隠すためや、ネタバレ防止などに使うことができます。 設定するには、フォームの「内容を隠す」ボタン(目のアイコン)を押します。すると新しい入力エリアが表れるので、そこに内容の要約を記入します。
+
+## 公開範囲
+ノートごとに、そのノートが公開される範囲を設定することができます。フォームの「ノート」ボタンの左にあるアイコンを押すと公開範囲を以下から選択できます。
+
+### パブリック
+全ての人に対してノートが公開されるほか、サーバーの全てのタイムライン(ホームタイムライン、ローカルタイムライン、ソーシャルタイムライン、グローバルタイムライン)にノートが流れます。
+<div class="warn">⚠️ アカウントが<a href="./silence">サイレンス</a>状態の時は、この公開範囲は使用できません。</div>
+
+### ホーム
+全ての人に対してノートが公開されますが、フォロワー以外のローカルタイムライン、ソーシャルタイムライン、グローバルタイムラインにはノートは流れません。
+
+### フォロワー
+自分のフォロワーに対してのみノートを公開します。フォロワーの全てのタイムラインに流れます。
+
+### ダイレクト
+指定したユーザーに対してのみノートを公開します。指定したユーザーの全てのタイムラインに流れます。
+
+### 「ローカルのみ」オプション
+このオプションを有効にすると、リモートにノートを連合しなくなります。
+
+### 公開範囲の比較
+<table>
+    <tr><th></th><th>パブリック</th><th>ホーム</th><th>フォロワー</th><th>ダイレクト</th></tr>
+    <tr><th>フォロワーのLTL/STL/GTL</th><td>✔</td><td>✔</td><td>✔</td><td></td></tr>
+    <tr><th>非フォロワーのLTL/STL/GTL</th><td>✔</td><td></td><td></td><td></td></tr>
+</table>
+
+## ಪ್ರೊಫ಼ೈಲಿಗೆ ಅಂಟಿಸು
+ノートをピン留めすると、ユーザーページに常にそのノートを表示しておくことができます。 ノートのメニューを開き、「ピン留め」を選択してピン留めできます。 複数のノートをピン留めできます。
diff --git a/src/docs/kn-IN/features/pages.md b/src/docs/kn-IN/features/pages.md
new file mode 100644
index 0000000000..a7311b95e6
--- /dev/null
+++ b/src/docs/kn-IN/features/pages.md
@@ -0,0 +1,10 @@
+# Pages
+
+## 変数
+変数を使うことで動的なページを作成できます。テキスト内で <b>{ 変数名 }</b> と書くとそこに変数の値を埋め込めます。例えば <b>Hello { thing } world!</b> というテキストで、変数(thing)の値が <b>ai</b> だった場合、テキストは <b>Hello ai world!</b> になります。
+
+変数の評価(値を算出すること)は上から下に行われるので、ある変数の中で自分より下の変数を参照することはできません。例えば上から <b>A、B、C</b> と3つの変数を定義したとき、<b>C</b>の中で<b>A</b>や<b>B</b>を参照することはできますが、<b>A</b>の中で<b>B</b>や<b>C</b>を参照することはできません。
+
+ユーザーからの入力を受け取るには、ページに「ユーザー入力」ブロックを設置し、「変数名」に入力を格納したい変数名を設定します(変数は自動で作成されます)。その変数を使ってユーザー入力に応じた動作を行えます。
+
+関数を使うと、値の算出処理を再利用可能な形にまとめることができます。関数を作るには、「関数」タイプの変数を作成します。関数にはスロット(引数)を設定することができ、スロットの値は関数内で変数として利用可能です。また、関数を引数に取る関数(高階関数と呼ばれます)も存在します。関数は予め定義しておくほかに、このような高階関数のスロットに即席でセットすることもできます。
diff --git a/src/docs/kn-IN/features/reaction.md b/src/docs/kn-IN/features/reaction.md
new file mode 100644
index 0000000000..4d479fd416
--- /dev/null
+++ b/src/docs/kn-IN/features/reaction.md
@@ -0,0 +1,11 @@
+# リアクション
+他の人のノートに、絵文字を付けて簡単にあなたの反応を伝えられる機能です。 リアクションするには、ノートの + アイコンをクリックしてピッカーを表示し、絵文字を選択します。 リアクションには[カスタム絵文字](./custom-emoji)も使用できます。
+
+## リアクションピッカーのカスタマイズ
+ピッカーに表示される絵文字を自分好みにカスタマイズすることができます。 設定の「リアクション」で設定します。
+
+## リモート投稿へのリアクションについて
+リアクションはMisskeyオリジナルの機能であるため、リモートインスタンスがMisskeyでない限りは、ほとんどの場合「Like」としてアクティビティが送信されます。一般的にはLikeは「お気に入り」として実装されているようです。
+
+## リモートからのリアクションについて
+リモートから「Like」アクティビティを受信したとき、Misskeyでは「👍」のリアクションとして解釈されます。
diff --git a/src/docs/kn-IN/features/silence.md b/src/docs/kn-IN/features/silence.md
new file mode 100644
index 0000000000..7e26feab0d
--- /dev/null
+++ b/src/docs/kn-IN/features/silence.md
@@ -0,0 +1,6 @@
+# サイレンス
+サイレンスは、アカウントに設定される状態のひとつです。
+
+アカウントがサイレンス状態になると、ノートの公開範囲をパブリックにできなくなります。 ホーム、フォロワー、ダイレクトは選択可能なため、サイレンスを受けた場合でもフォロワーやあなたのユーザーページを直接訪れた場合は投稿を閲覧できますが、GTL(連合タイムライン)やLTL(ローカルタイムライン)には投稿が流れません。
+
+アカウントのサイレンス状態は、サーバーのモデレーターによって有効化/無効化されます。
diff --git a/src/docs/kn-IN/features/theme.md b/src/docs/kn-IN/features/theme.md
new file mode 100644
index 0000000000..a406f3433c
--- /dev/null
+++ b/src/docs/kn-IN/features/theme.md
@@ -0,0 +1,68 @@
+# テーマ
+
+テーマを設定して、Misskeyクライアントの見た目を変更できます。
+
+## テーマの設定
+設定 > テーマ
+
+## テーマを作成する
+テーマコードはJSON5で記述されたテーマオブジェクトです。 テーマは以下のようなオブジェクトです。
+``` js
+{
+    id: '17587283-dd92-4a2c-a22c-be0637c9e22a',
+
+    name: 'Danboard',
+    author: 'syuilo',
+
+    base: 'light',
+
+    props: {
+        accent: 'rgb(218, 141, 49)',
+        bg: 'rgb(218, 212, 190)',
+        fg: 'rgb(115, 108, 92)',
+        panel: 'rgb(236, 232, 220)',
+        renote: 'rgb(100, 152, 106)',
+        link: 'rgb(100, 152, 106)',
+        mention: '@accent',
+        hashtag: 'rgb(100, 152, 106)',
+        header: 'rgba(239, 227, 213, 0.75)',
+        navBg: 'rgb(216, 206, 182)',
+        inputBorder: 'rgba(0, 0, 0, 0.1)',
+    },
+}
+
+```
+
+* `id` ... テーマの一意なID。UUIDをおすすめします。
+* `name` ... テーマ名
+* `author` ... テーマの作者
+* `desc` ... テーマの説明(オプション)
+* `base` ... 明るいテーマか、暗いテーマか
+    * `light`にすると明るいテーマになり、`dark`にすると暗いテーマになります。
+    * テーマはここで設定されたベーステーマを継承します。
+* `props` ... テーマのスタイル定義。これから説明します。
+
+### テーマのスタイル定義
+`props`下にはテーマのスタイルを定義します。 キーがCSSの変数名になり、バリューで中身を指定します。 なお、この`props`オブジェクトはベーステーマから継承されます。 ベーステーマは、このテーマの`base`が`light`なら[_light.json5](https://github.com/misskey-dev/misskey/blob/develop/src/client/themes/_light.json5)で、`dark`なら[_dark.json5](https://github.com/misskey-dev/misskey/blob/develop/src/client/themes/_dark.json5)です。 つまり、このテーマ内の`props`に`panel`というキーが無くても、そこにはベーステーマの`panel`があると見なされます。
+
+#### バリューで使える構文
+* 16進数で表された色
+    * 例: `#00ff00`
+* `rgb(r, g, b)`形式で表された色
+    * 例: `rgb(0, 255, 0)`
+* `rgb(r, g, b, a)`形式で表された透明度を含む色
+    * 例: `rgba(0, 255, 0, 0.5)`
+* 他のキーの値の参照
+    * `@{キー名}`と書くと他のキーの値の参照になります。`{キー名}`は参照したいキーの名前に置き換えます。
+    * 例: `@panel`
+* 定数(後述)の参照
+    * `${定数名}`と書くと定数の参照になります。`{定数名}`は参照したい定数の名前に置き換えます。
+    * 例: `$main`
+* 関数(後述)
+    * `:{関数名}<{引数}<{色}`
+
+#### 定数
+「CSS変数として出力はしたくないが、他のCSS変数の値として使いまわしたい」値があるときは、定数を使うと便利です。 キー名を`$`で始めると、そのキーはCSS変数として出力されません。
+
+#### 関数
+wip
diff --git a/src/docs/kn-IN/features/timeline.md b/src/docs/kn-IN/features/timeline.md
new file mode 100644
index 0000000000..03e388d557
--- /dev/null
+++ b/src/docs/kn-IN/features/timeline.md
@@ -0,0 +1,31 @@
+# ಸಮಯಸಾಲು
+タイムラインは、[ノート](./note)が時系列で表示される機能です。 タイムラインには以下で示す種類があり、種類によって表示されるノートも異なります。 なお、タイムラインの種類によってはサーバーにより無効になっている場合があります。
+
+## ホーム
+自分のフォローしているユーザーの投稿が流れます。HTLと略されます。
+
+## ローカル
+全てのローカルユーザーの「ホーム」指定されていない投稿が流れます。LTLと略されます。
+
+## ソーシャル
+自分のフォローしているユーザーの投稿と、全てのローカルユーザーの「ホーム」指定されていない投稿が流れます。STLと略されます。
+
+## グローバル
+全てのローカルユーザーの「ホーム」指定されていない投稿と、サーバーに届いた全てのリモートユーザーの「ホーム」指定されていない投稿が流れます。GTLと略されます。
+
+## 比較
+| ソース          |       |     | ಸಮಯಸಾಲು |       |       |
+| ------------ | ----- | --- | ------- | ----- | ----- |
+| ಬಳಕೆದಾರ      | 公開範囲  | ホーム | ローカル    | ソーシャル | グローバル |
+| ローカル (フォロー)  | 公開    | ✔   | ✔       | ✔     | ✔     |
+|              | ホーム   | ✔   |         | ✔     |       |
+|              | フォロワー | ✔   | ✔       | ✔     | ✔     |
+| リモート (フォロー)  | 公開    | ✔   |         | ✔     | ✔     |
+|              | ホーム   | ✔   |         | ✔     |       |
+|              | フォロワー | ✔   |         | ✔     | ✔     |
+| ローカル (未フォロー) | 公開    |     | ✔       | ✔     | ✔     |
+|              | ホーム   |     |         |       |       |
+|              | フォロワー |     |         |       |       |
+| リモート (未フォロー) | 公開    |     |         |       | ✔     |
+|              | ホーム   |     |         |       |       |
+|              | フォロワー |     |         |       |       |
diff --git a/src/docs/kn-IN/features/widgets.md b/src/docs/kn-IN/features/widgets.md
new file mode 100644
index 0000000000..a7c2c1d1d6
--- /dev/null
+++ b/src/docs/kn-IN/features/widgets.md
@@ -0,0 +1,7 @@
+# ウィジェット
+ウィジェットは、MisskeyのUI上に設置できる小型の情報表示、操作が行えるパーツです。
+
+ウィジェットを編集するには、ウィジェット編集モードに切り替えます。切り替え方法はUIによって異なります。 ウィジェット編集モードでは、ウィジェットの追加、削除、並び替え、およびそれぞれのウィジェットの設定を行えます。
+
+## 利用可能なウィジェット一覧
+todo
diff --git a/src/docs/kn-IN/general/apps.md b/src/docs/kn-IN/general/apps.md
new file mode 100644
index 0000000000..1f4c85fe8f
--- /dev/null
+++ b/src/docs/kn-IN/general/apps.md
@@ -0,0 +1,6 @@
+# サードパーティアプリのリスト
+## クライアント
+todo
+
+## 連携サービス
+todo
diff --git a/src/docs/kn-IN/general/faq.md b/src/docs/kn-IN/general/faq.md
new file mode 100644
index 0000000000..ecb664e32e
--- /dev/null
+++ b/src/docs/kn-IN/general/faq.md
@@ -0,0 +1,22 @@
+# よくある質問
+ここでは利用上のよくある質問について掲載しています。 Misskeyのプロジェクト自体についてのよくある質問は[こちら](./misskey)に掲載されています。
+
+### iOS/Androidのアプリはありますか?
+公式にはそういったOSのネイティブアプリを開発していませんが、サードパーティ製のアプリがいくつかあります。 詳しくは[こちら](./apps)をご覧ください。
+
+ただ、サードパーティ製アプリはどうしても機能への対応が遅れてしまうため、とくに拘りがなければ公式のWebクライアントの利用をおすすめします。 なお、MisskeyのWebクライアントはPWAに対応しているので、ネイティブアプリのように動作させることも可能です。 詳しくは[こちら](todo)をご覧ください。
+
+## 他のサーバーのユーザーをフォローするときは?
+メニューから検索を選び、ユーザー名をホスト込みで入力します。例: `@syuilo@misskey.io`
+
+## Renoteを削除するには?
+Renoteの時刻表示の隣にある「...」を押し、「Renote解除」を選択します。 Renoteについては[こちら](../features/note)をご確認ください。
+
+## URLのプレビューを表示させたくない
+MFMには、そのURLのプレビューを無効にする構文があります。詳細は[MFMチートシート](/mfm-cheat-sheet)をご確認ください。
+
+## カスタム絵文字を追加したい
+運営者のみがカスタム絵文字を追加、編集、削除できます。それらを希望する場合は運営者に依頼してください。
+
+## Botを開発したい
+Misskey APIを利用してBotの開発が可能です。[こちら](../advanced/develop-bot)をご確認ください。
diff --git a/src/docs/kn-IN/general/glossary.md b/src/docs/kn-IN/general/glossary.md
new file mode 100644
index 0000000000..b580362844
--- /dev/null
+++ b/src/docs/kn-IN/general/glossary.md
@@ -0,0 +1,83 @@
+# 用語集
+Misskeyに関する用語集です。
+
+## AcitivityPub
+(読み: あくてぃびてぃぱぶ) 分散型を実現するために用いられるプロトコル(仕様)。このプロトコルに則ってサーバー同士通信を行うことで、連合が行われ、Fediverseを形成しています。
+
+## AiScript
+(読み: あいすくりぷと) Misskey上で使用できるプログラミング言語です。詳細は[こちら。](../advanced/aiscript)
+
+## API
+(読み: えーぴーあい) Misskeyのサーバーが公開している、プログラムからMisskeyを扱うためのインターフェース。詳細は[こちら。](../advanced/api)
+
+## Bot
+(読み: ぼっと) プログラムによって動作しているアカウント。
+
+## CW
+(読み: こんてんつわーにんぐ) Contents Warningの略。ノートの内容を、操作なしには表示しないようにできる機能。主に長大な内容を隠すためや、ネタバレ防止などに使われます。
+
+## Fediverse
+(読み: ふぇでぃばーす) Misskeyを含む様々な分散型ソフトウェアのサーバーで構成されたネットワーク。
+
+## GTL
+グローバルタイムライン(Global TimeLine)の略。タイムラインの詳細は[こちら。](../features/timeline)
+
+## HTL
+ホームタイムライン(Home TimeLine)の略。タイムラインの詳細は[こちら。](../features/timeline)
+
+## LTL
+ローカルタイムライン(Local TimeLine)の略。タイムラインの詳細は[こちら。](../features/timeline)
+
+## MFM
+(読み: えむえふえむ) Misskey Flavored Markdownの略で、Misskey上で使用できるマークアップ言語です。詳細は[こちら。](../features/mfm)
+
+## NSFW
+(読み: のっとせーふふぉーわーく) Not Safe For Workの略。画像を「閲覧注意」扱いにし、操作なしには表示しないようにすることができる機能。
+
+## Renote
+(読み: りのーと) 既にあるノートを引用、もしくはそのノートを新しいノートとして共有する行為、またそれによって作成されたノート。詳細は[こちら。](../features/note)
+
+## STL
+ソーシャルタイムライン(Social TimeLine)の略。タイムラインの詳細は[こちら。](../features/timeline)
+
+## 藍
+(読み: あい) Misskeyの看板娘(公式キャラクター)です。
+
+## アクティブユーザー
+インスタンスにアカウントを作っているユーザーのうち、現在も実際にサービスを利用しているユーザーのこと。
+
+## ನಿದರ್ಶನ
+todo
+
+## コントロールパネル
+インスタンスの設定画面のこと。
+
+## サーバー
+todo
+
+## サイレンス
+ノートをパブリックな公開範囲で投稿できなくされている状態。モデレーターの判断でユーザーごとに設定されます。詳細は[こちら。](../features/silence)
+
+## 凍結
+アカウントが使用不可に設定されている状態。
+
+## ドライブ
+Misskeyにアップロードしたファイルを管理する機能。詳細は[こちら。](../features/drive)
+
+## ノート
+Misskeyに投稿される、文章、ファイル、アンケートなどを含めることができるコンテンツ。詳細は[こちら。](../features/note)
+
+## ミスキスト
+Misskeyを使う人のこと。
+
+## モデレーター
+スパムの凍結およびサイレンスや不適切な投稿の削除など、コミュニティ運営に関する権限を持つユーザー。
+
+## リモート
+他サーバーのことを指します。リモートユーザーといったように接頭辞としても使われます。ローカルの逆です。
+
+## 連合
+サーバー上で作成された情報が他のサーバーに伝わること。
+
+## ローカル
+自サーバーのことを指します。ローカルユーザー、ローカルタイムラインといったように接頭辞としても使われます。リモートの逆です。
diff --git a/src/docs/kn-IN/general/links.md b/src/docs/kn-IN/general/links.md
new file mode 100644
index 0000000000..d6b16856fb
--- /dev/null
+++ b/src/docs/kn-IN/general/links.md
@@ -0,0 +1,5 @@
+# リンク集
+
+## ライブラリ
+- [misskey-dev/misskey.js](https://github.com/misskey-dev/misskey.js) - JavaScriptのMisskey SDK
+- [misskey-dev/mfm.js](https://github.com/misskey-dev/mfm.js) - JavaScriptのMFMパーサー実装
diff --git a/src/docs/kn-IN/general/misskey.md b/src/docs/kn-IN/general/misskey.md
new file mode 100644
index 0000000000..1e64a10e28
--- /dev/null
+++ b/src/docs/kn-IN/general/misskey.md
@@ -0,0 +1,87 @@
+# Misskeyについて
+
+Misskeyはオープンソースの分散型マイクロブログプラットフォームプロジェクトです。 開発は日本でsyuiloによって2014年から開始されました。 ドライブ、リアクションなどの豊富な機能や、高いカスタマイズ性を備えたUIを持つことが特徴です。
+
+## 歴史
+開発当初は掲示板がメインのサービスでしたが、ユーザーが短文を投稿し、それを時系列で流れるタイムライン機能を追加したところ人気が高まり、徐々にそれがメインとして開発が進むようになりました。 当初は分散型ではありませんでしたが、2018年にAcitivityPubを実装し分散型になったことで、より多くの方に認知され利用されるサービスになり、現在に至ります。
+<div class="info">ℹ️ Misskeyという名前は、syuiloが当時聴いていたMay'nというアーティストの楽曲、Brain Diverの歌詞に由来します。</div>
+
+誰でも開発に参加することができ、現在でも活発に開発が続いています。
+
+## 分散型とは何か?
+
+<b>分散(distributed)型</b>とは、<b>非中央集権(decentralized)</b>とも呼ばれ、コミュニティが多数のサーバーに分散して存在し、それらが相互に<b>通信(連合、federation)</b>することでコンテンツ共有<b>ネットワーク(Fediverse)</b>を形成していることが特徴のサービスです。 単一のサーバーしか存在しない、もしくは複数存在しても互いに独立している場合は中央集権なサービスと言われ、例えばTwitterやFacebookなどほとんどのサービスがそれに該当します。 分散型のメリットは、自分に合った運営者やテーマのサーバーを選択できることです。自分でサーバーを作成することもできます。連合するおかげで、どのサーバーを選んでも、同じコミュニティにアクセスできます。
+
+## 常にオープンソース
+Misskeyはこれまでもこれからも、オープンソースであり続けます。オープンソースとは、簡単に言うと<b>ソフトウェアのソースコード(プログラム)が公開されている</b>ことです。ソースコードの修正や再配布が可能であることを定義に含めることもあります。 Misskeyのすべてのソースコードは[AGPL](https://github.com/misskey-dev/misskey/blob/develop/LICENSE)というオープンソースライセンスの下に[公開](https://github.com/misskey-dev)されていて、誰でも自由に閲覧、使用、修正、改変、再配布をすることができます。 オープンソースは、自分で好きなように変えたり、有害な処理が含まれていないことを確認することができたり、誰でも開発に参加できるなどの、様々なメリットがあります。 上述の分散型を実現するためにも、オープンソースであるということは必要不可欠な要素です。 再び引き合いに出しますが、TwitterやFacebookなどの利益を得ているほとんどのサービスはオープンソースではありません。
+
+<div class="info">ℹ️ 技術的に言うと、MisskeyのソースコードはGitで管理されていて、リポジトリは<a href="https://github.com/misskey-dev" target="_blank">GitHub上でホスティングされています。</a></div>
+
+## 開発に参加する、プロジェクトを支援する
+Misskeyを気に入っていただけたら、ぜひプロジェクトを支援してください。プロジェクトに貢献するには、以下で紹介するようにいろいろな方法があります。方法によっては開発のスキルは不要なので、誰でも気軽に参加し貢献することができます。いつでもお待ちしています。
+
+### 機能を追加したり、バグを修正する
+ソフトウェアエンジニアのスキルをお持ちの方であれば、ソースコードを編集する形でプロジェクトに貢献することができます。 貢献についてのガイドは[こちら](https://github.com/misskey-dev/misskey/blob/develop/CONTRIBUTING.md)です。
+
+### 議論に参加する
+新しい機能、または既存の機能について意見を述べたり、不具合を報告したりすることでも貢献できます。 そのようなディスカッションは[GitHub](https://github.com/misskey-dev)上か、[フォーラム](https://forum.misskey.io/)等で行われます。
+
+### テキストを翻訳する
+Misskeyは様々な言語に対応しています(i18n -internationalizationの略- と呼ばれます)。元の言語は基本的に日本語ですが、有志によって他の言語へと翻訳されています。 その翻訳作業に加わっていただくことでもMisskeyに貢献できます。 Misskeyは[Crowdinというサービスを使用して翻訳の管理を行っています。](https://crowdin.com/project/misskey)
+
+### 感想を投稿する
+不具合報告等だけではなく、Misskeyの良い点、楽しい点といったポジティブな意見もぜひ共有してください。開発の励みになり、それは間接的ですがプロジェクトへの貢献です。
+
+### ミスキストを増やす
+ミスキストとは、Misskeyを使用する人のことです。 知り合いに紹介するなどしてMisskeyを広めていただければ、ミスキストが増え開発のモチベーションが上がります。
+
+### 寄付をする
+Misskeyはビジネスではなく、利用は無料であるため、収益は皆様からの寄付のみです。(インスタンスによっては広告収入を得ているような場合もありますが、それは運営者の収入であり直接開発者への収入にはなりません) 寄付をしていただければ、今後も開発を続けることが可能になり、プロジェクトへの貢献になります。 寄付は基本的には[Patreon](https://www.patreon.com/syuilo)で受け付けています。 一定額寄付していただけると、Misskeyの[情報ページ](/about-misskey)に名前を記載することができます。
+
+また、サーバーの運営者も、基本的には収益を得ていません。サーバーの運営にはコストがかかるので、運営者の支援をすることもご検討ください。 開発には直接関係しませんが、サーバーがあってこそのプロジェクトなので、運営が維持されるというのは開発と同じくらい重要なことです。
+
+## クレジット
+Misskeyの開発者や、Misskeyに寄付をしてくださった方の一覧は[こちら](/about-misskey)で見ることができます。
+
+## よくある質問
+### プロジェクトは何を目指していますか?
+強いて言うと、漠然的になりますが広く使われる汎用的なプラットフォームになることを目指しています。 Misskeyは他のプロジェクトとは違い、何らかの思想(例えば、反中央集権)やビジョンに基づいて開発が行われているわけではなく、その点ではフラットです。 それが逆に、特定の方向性に縛られないフレキシブルさを生み出すことに繋がっていると感じています。
+<!-- TODO: ここにロードマップへのリンク -->
+
+### 企業によって開発されていますか?
+いいえ。Misskeyの開発は個人で行われており、商業的でもないため、特定の企業の関りはありません。 開発メンバーも基本的にはボランティアです。 また、開発に対し企業のスポンサーがつくこともありますが、その場合でもやはり開発は個人のコミュニティが主体です。
+
+### 誰が運営していますか?
+Misskeyは分散型なため、各サーバーにそれぞれ異なった運営者がいます。従って、特定の個人や企業によって、Misskeyの全てが運営されているわけではありません。 また、開発チームが運営を行うわけでもないため、運営に関する連絡は、お使いのサーバーの運営者に行ってください。 サーバーの運営者は、[このページ](/about)で確認することができます。 あなたがサーバーを作成すれば、あなたが運営者になります。
+
+### どのサーバーを選べばいいですか?
+[サーバー一覧が公開されています。](https://join.misskey.page/ja-JP/instances) サーバーによってコミュニティのテーマ(特定のこと、ものが好き 等)が決められている場合があるので、自分に合ったテーマのサーバーがあれば、そこを選ぶと良いかもしれません。 他にも、サーバーの規模、ユーザー層、国および言語、運営者が信頼できるかどうか、などの観点があります。 なお、Misskey公式のサーバーというものはありません。自身で新しくサーバーを作成するという選択肢もあります。
+
+基本的にどのサーバーを選んだとしても、他の全てのサーバーのユーザーと繋がることができます。
+
+### サーバーを建てるにはどうしたらいいですか?
+Misskeyサーバーの作成に興味を持っていただきありがとうございます。 2021年現在、Misskeyのホスティングサービスは存在しないため、サーバーの作成にはある程度の知識が必要です。 サーバーの作成方法については[こちら](todo)をご覧ください。
+
+### どのような技術を使用していますか?
+Misskeyは開発が進むにつれ使用する技術も大きく変わってきました。開発当初はMySQL + PHP + jQueryといった構成でしたが、現在は以下のようになっています。
+- サーバーサイド: Node.js
+- データベース: PostgreSQL、Redis
+- UIフレームワーク: Vue.js
+- プログラミング言語: TypeScript
+
+また、MFMやAiScriptなどの、Misskeyから派生して独自の技術も開発しています。
+
+### Mastodonのフォークですか?
+いいえ。MisskeyはMastodonやその他のプロジェクトとは全く別のプロジェクトです。 開発に関しても、Misskeyの方が昔から開発されています。ただし、分散型になったのはMastodonの登場より後です。 同じAcitivityPubという分散のためのプロトコルを実装しているという点以外、両者に特に関りがあるわけでもありません。
+
+### iOS/Androidのアプリはありますか?
+公式にはそういったOSのネイティブアプリを開発していませんが、サードパーティ製のアプリがいくつかあります。 詳しくは[こちら](./apps)をご覧ください。
+
+ただ、サードパーティ製アプリはどうしても機能への対応が遅れてしまうため、とくに拘りがなければ公式のWebクライアントの利用をおすすめします。 なお、MisskeyのWebクライアントはPWAに対応しているので、ネイティブアプリのように動作させることも可能です。 詳しくは[こちら](todo)をご覧ください。
+
+### Misskeyのロゴ、アイコンはどこで入手できますか?
+(準備中)
+
+### 時折目にする猫耳の可愛い女の子は?
+Misskeyの守り神、藍ちゃんです。アイチャンカワイイヤッター!
+<div class="info">ℹ️ 藍ちゃんについては<a href="https://xn--931a.moe/" target="_blank">こちら</a>です。</div>
diff --git a/src/docs/kn-IN/general/report-issue.md b/src/docs/kn-IN/general/report-issue.md
new file mode 100644
index 0000000000..63527e32af
--- /dev/null
+++ b/src/docs/kn-IN/general/report-issue.md
@@ -0,0 +1,8 @@
+# 不具合の報告
+不具合と思われる状況に遭遇したときは、まず[トラブルシューティング](./troubleshooting)をご一読ください。 それでも問題が解決しないときは、以下の情報を含めて[フォーラム](https://forum.misskey.io/)に投稿してください。 投稿することで、解決策が見つかったり、不具合と判断されれば開発チームによって修正が行われます。
+
+## 含める情報
+- Misskeyのバージョン([情報ページ](/about)で確認できます)
+- お使いのブラウザの種類とバージョン
+- お使いのOSの種類とバージョン
+- 問題の再現手順
diff --git a/src/docs/kn-IN/general/troubleshooting.md b/src/docs/kn-IN/general/troubleshooting.md
new file mode 100644
index 0000000000..4a35091299
--- /dev/null
+++ b/src/docs/kn-IN/general/troubleshooting.md
@@ -0,0 +1,36 @@
+# トラブルシューティング
+<div class="info">ℹ️ <a href="./faq">よくある質問</a>も合わせてお役立てください。</div>
+
+問題が発生したときは、まずこちらをご確認ください。 該当する項目が無い、もしくは手順を試しても効果がない場合は、サーバーの管理者に連絡するか[不具合を報告](./report-issue)してください。
+
+## クライアントが起動しない
+ほとんどの場合、お使いのブラウザまたはOSのバージョンが古いことが原因です。 ブラウザおよびOSのバージョンを最新のものに更新してから、再度試してみてください。
+
+これは稀ですが、それでも起動しない場合は、キャッシュが原因の場合があります。ブラウザのキャッシュをクリアして、再度試してみてください。
+
+## ページが読み込めない
+クライアントが起動するもののページが読み込めないというエラーが出る場合は、ネットワークに問題がないか確認してください。また、サーバーがダウンしていないか確認してください。
+
+これは稀ですが、キャッシュが原因の場合があります。ブラウザのキャッシュをクリアして、再度試してみてください。
+
+まだ問題がある場合は、サーバーの問題と思われるのでサーバーの管理者に連絡してください。
+
+## クライアントの動作が遅い
+以下を試してみてください:
+
+- クライアント設定で「UIのアニメーションを減らす」を有効にする
+- クライアント設定で「モーダルにぼかし効果を使用」を無効にする
+- お使いのブラウザの設定でハードウェアアクセラレーションを有効にする
+- お使いのデバイスのスペックを上げる
+
+## 通知やアンテナ等の点滅が消えない
+点滅は、未読のコンテンツがあることを示しています。通常点滅が消えない場合は、コンテンツを遡ると未読なコンテンツが残っています。 すべて既読にしたと思われるのに、それでもなお点滅が続く場合(おそらく不具合と思われます)は設定から強制的にすべて既読扱いにすることができます。
+
+## Renoteができない
+フォロワー限定のノートはRenoteすることはできません。
+
+## UI上で特定の要素が表示されない
+広告ブロッカーを使用しているとそのような不具合が発生することがあります。Misskeyではオフにしてご利用ください。
+
+## UI上で未翻訳の部分がある
+ほとんどの場合、単に翻訳が間に合っていないだけで、不具合ではありません。翻訳が終わるまでお待ちください。 [翻訳に参加](./misskey)していただくことも可能です。
diff --git a/src/docs/ko-KR/admin/disable-timelines.md b/src/docs/ko-KR/admin/disable-timelines.md
new file mode 100644
index 0000000000..b081e35ab0
--- /dev/null
+++ b/src/docs/ko-KR/admin/disable-timelines.md
@@ -0,0 +1,8 @@
+# LTL/STL/GTLの無効化
+Misskeyでは、LTL/STL/GTLをそれぞれ無効化することができます。有効/無効を切り替えるには、インスタンスコントロールパネルで設定します。
+
+LTLやSTLは、そのインスタンス全員の投稿が見れるため、新規のユーザーにとってはユーザーを探す必要がなくなり、興味のあるユーザーを見つけやすいという利点があります。 しかし同時に、フォロー機能が活用されなくなったり、不適切な投稿が目につきやすくなったり、チャットのようになることで内輪感が生じて逆に新規ユーザーが参加しにくくなるといったデメリットも持ち合わせています。 サーバーによってメリット/デメリットどちらが優勢かは異なるので、オプションとして無効にできるようになっています。 もしデメリットの方が上回っていると感じたら、それらのタイムラインを無効化することも検討してください。
+
+<div class="warn">⚠️ 無効化を行うと、ユーザーが困惑し、短期的に見て利用者が減る可能性があります。そのため、無効化の際は影響を慎重に検討し、事前に説明してフォローを整える期間を一定程度設けることを推奨します。</div>
+
+なお、管理者/モデレーターは、これらのタイムラインの無効化状態は適用されず、引き続き利用することが可能です。
diff --git a/src/docs/ko-KR/admin/faq.md b/src/docs/ko-KR/admin/faq.md
new file mode 100644
index 0000000000..317b4e0655
--- /dev/null
+++ b/src/docs/ko-KR/admin/faq.md
@@ -0,0 +1,5 @@
+# よくある質問
+ここでは、サーバー管理者向けのよくある質問を掲載しています。
+
+## デフォルトテーマを設定したい
+現在、デフォルトテーマ設定機能は実装されていません。
diff --git a/src/docs/ko-KR/advanced/aiscript.md b/src/docs/ko-KR/advanced/aiscript.md
new file mode 100644
index 0000000000..604d17daa8
--- /dev/null
+++ b/src/docs/ko-KR/advanced/aiscript.md
@@ -0,0 +1,7 @@
+# AiScript
+AiScriptは、Misskeyで使用できるスクリプト言語です。
+
+<div class="info">ℹ️ AiScript実装はMisskeyとは別リポジトリで、<a href="https://github.com/syuilo/aiscript" target="_blank">オープンソースで公開されています。</a></div>
+
+## 使い方
+AiScriptの構文や組み込み関数などのドキュメントは、[こちら](https://github.com/syuilo/aiscript/tree/master/docs)で公開されています。
diff --git a/src/docs/ko-KR/advanced/api.md b/src/docs/ko-KR/advanced/api.md
new file mode 100644
index 0000000000..76019b6145
--- /dev/null
+++ b/src/docs/ko-KR/advanced/api.md
@@ -0,0 +1,58 @@
+# Misskey API
+
+MisskeyAPIを使ってMisskeyクライアント、Misskey連携Webサービス、Bot等(以下「アプリケーション」と呼びます)を開発できます。 ストリーミングAPIもあるので、リアルタイム性のあるアプリケーションを作ることも可能です。
+
+APIを使い始めるには、まずアクセストークンを取得する必要があります。 このドキュメントでは、アクセストークンを取得する手順を説明した後、基本的なAPIの使い方を説明します。
+
+## アクセストークンの取得
+基本的に、APIはリクエストにはアクセストークンが必要となります。 APIにリクエストするのが自分自身なのか、不特定の利用者に使ってもらうアプリケーションなのかによって取得手順は異なります。
+
+* 前者の場合: [「自分自身のアクセストークンを手動発行する」](#自分自身のアクセストークンを手動発行する)に進む
+* 後者の場合: [「アプリケーション利用者にアクセストークンの発行をリクエストする」](#アプリケーション利用者にアクセストークンの発行をリクエストする)に進む
+
+### 自分自身のアクセストークンを手動発行する
+「設定 > API」で、自分のアクセストークンを発行できます。
+
+[「APIの使い方」へ進む](#APIの使い方)
+
+### アプリケーション利用者にアクセストークンの発行をリクエストする
+アプリケーション利用者のアクセストークンを取得するには、以下の手順で発行をリクエストします。
+
+#### Step 1
+
+UUIDを生成する。以後これをセッションIDと呼びます。
+
+> このセッションIDは毎回生成し、使いまわさないようにしてください。
+
+#### Step 2
+
+`{_URL_}/miauth/{session}`をユーザーのブラウザで表示させる。`{session}`の部分は、セッションIDに置き換えてください。
+> 例: `{_URL_}/miauth/c1f6d42b-468b-4fd2-8274-e58abdedef6f`
+
+表示する際、URLにクエリパラメータとしていくつかのオプションを設定できます:
+* `name` ... アプリケーション名
+    * > 例: `MissDeck`
+* `icon` ... アプリケーションのアイコン画像URL
+    * > 例: `https://missdeck.example.com/icon.png`
+* `callback` ... 認証が終わった後にリダイレクトするURL
+    * > 例: `https://missdeck.example.com/callback`
+    * リダイレクト時には、`session`というクエリパラメータでセッションIDが付きます
+* `permission` ... アプリケーションが要求する権限
+    * > 例: `write:notes,write:following,read:drive`
+    * 要求する権限を`,`で区切って列挙します
+    * どのような権限があるかは[APIリファレンス](/api-doc)で確認できます
+
+#### Step 3
+ユーザーが発行を許可した後、`{_URL_}/api/miauth/{session}/check`にPOSTリクエストすると、レスポンスとしてアクセストークンを含むJSONが返ります。
+
+レスポンスに含まれるプロパティ:
+* `token` ... ユーザーのアクセストークン
+* `user` ... ユーザーの情報
+
+[「APIの使い方」へ進む](#APIの使い方)
+
+## APIの使い方
+**APIはすべてPOSTで、リクエスト/レスポンスともにJSON形式です。RESTではありません。** アクセストークンは、`i`というパラメータ名でリクエストに含めます。
+
+* [APIリファレンス](/api-doc)
+* [ストリーミングAPI](./stream)
diff --git a/src/docs/ko-KR/advanced/create-plugin.md b/src/docs/ko-KR/advanced/create-plugin.md
new file mode 100644
index 0000000000..1562060d72
--- /dev/null
+++ b/src/docs/ko-KR/advanced/create-plugin.md
@@ -0,0 +1,74 @@
+# プラグインの作成
+Misskey Webクライアントのプラグイン機能を使うと、クライアントを拡張し、様々な機能を追加できます。 ここではプラグインの作成にあたってのメタデータ定義や、AiScript APIリファレンスを掲載します。
+
+## 메타데이터
+プラグインは、AiScriptのメタデータ埋め込み機能を使って、デフォルトとしてプラグインのメタデータを定義する必要があります。 メタデータは次のプロパティを含むオブジェクトです。
+
+### name
+プラグイン名
+
+### author
+プラグイン作者
+
+### version
+プラグインバージョン。数値を指定してください。
+
+### description
+プラグインの説明
+
+### permissions
+プラグインが要求する権限。MisskeyAPIにリクエストする際に用いられます。
+
+### config
+プラグインの設定情報を表すオブジェクト。 キーに設定名、値に以下のプロパティを含めます。
+
+#### type
+設定値の種類を表す文字列。以下から選択します。 string number boolean
+
+#### label
+ユーザーに表示する設定名
+
+#### description
+設定の説明
+
+#### default
+設定のデフォルト値
+
+## APIリファレンス
+AiScript標準で組み込まれているAPIは掲載しません。
+
+### Mk:dialog(title text type)
+ダイアログを表示します。typeには以下の値が設定できます。 info success warn error question 省略すると info になります。
+
+### Mk:confirm(title text type)
+確認ダイアログを表示します。typeには以下の値が設定できます。 info success warn error question 省略すると question になります。 ユーザーが"OK"を選択した場合は true を、"キャンセル"を選択した場合は false が返ります。
+
+### Mk:api(endpoint params)
+Misskey APIにリクエストします。第一引数にエンドポイント名、第二引数にパラメータオブジェクトを渡します。
+
+### Mk:save(key value)
+任意の値に任意の名前を付けて永続化します。永続化した値は、AiScriptコンテキストが終了しても残り、Mk:loadで読み取ることができます。
+
+### Mk:load(key)
+Mk:saveで永続化した指定の名前の値を読み取ります。
+
+### Plugin:register_post_form_action(title fn)
+投稿フォームにアクションを追加します。第一引数にアクション名、第二引数にアクションが選択された際のコールバック関数を渡します。 コールバック関数には、第一引数に投稿フォームオブジェクトが渡されます。
+
+### Plugin:register_note_action(title fn)
+ノートメニューに項目を追加します。第一引数に項目名、第二引数に項目が選択された際のコールバック関数を渡します。 コールバック関数には、第一引数に対象のノートオブジェクトが渡されます。
+
+### Plugin:register_user_action(title fn)
+ユーザーメニューに項目を追加します。第一引数に項目名、第二引数に項目が選択された際のコールバック関数を渡します。 コールバック関数には、第一引数に対象のユーザーオブジェクトが渡されます。
+
+### Plugin:register_note_view_interruptor(fn)
+UIに表示されるノート情報を書き換えます。 コールバック関数には、第一引数に対象のノートオブジェクトが渡されます。 コールバック関数の返り値でノートが書き換えられます。
+
+### Plugin:register_note_post_interruptor(fn)
+ノート投稿時にノート情報を書き換えます。 コールバック関数には、第一引数に対象のノートオブジェクトが渡されます。 コールバック関数の返り値でノートが書き換えられます。
+
+### Plugin:open_url(url)
+第一引数に渡されたURLをブラウザの新しいタブで開きます。
+
+### Plugin:config
+プラグインの設定が格納されるオブジェクト。プラグイン定義のconfigで設定したキーで値が入ります。
diff --git a/src/docs/ko-KR/advanced/develop-bot.md b/src/docs/ko-KR/advanced/develop-bot.md
new file mode 100644
index 0000000000..7f825e9bc4
--- /dev/null
+++ b/src/docs/ko-KR/advanced/develop-bot.md
@@ -0,0 +1,6 @@
+# Botの作成
+[Misskey API](./api)を利用してBotの開発が可能です。 また、いくつかのBot実装が公開されているため、ぜひ参考にしてください。
+
+- [syuilo/ai](https://github.com/syuilo/ai) ... Node.js上で動く、TypeScript製Bot実装
+
+Botを作成したときは、プロフィール設定からBotフラグをオンにしておくことを強くおすすめします。
diff --git a/src/docs/ko-KR/advanced/reversi-bot.md b/src/docs/ko-KR/advanced/reversi-bot.md
new file mode 100644
index 0000000000..aef450f2de
--- /dev/null
+++ b/src/docs/ko-KR/advanced/reversi-bot.md
@@ -0,0 +1,160 @@
+# MisskeyリバーシBotの開発
+Misskeyのリバーシ機能に対応したBotの開発方法をここに記します。
+
+1. `games/reversi`ストリームに以下のパラメータを付けて接続する:
+    * `i`: botアカウントのAPIキー
+
+2. 対局への招待が来たら、ストリームから`invited`イベントが流れてくる
+    * イベントの中身に、`parent`という名前で対局へ誘ってきたユーザーの情報が含まれている
+
+3. `games/reversi/match`へ、`user_id`として`parent`の`id`が含まれたリクエストを送信する
+
+4. 上手くいくとゲーム情報が返ってくるので、`games/reversi-game`ストリームへ、以下のパラメータを付けて接続する:
+    * `i`: botアカウントのAPIキー
+    * `game`: `game`の`id`
+
+5. この間、相手がゲームの設定を変更するとその都度`update-settings`イベントが流れてくるので、必要であれば何かしらの処理を行う
+
+6. 設定に満足したら、`{ type: 'accept' }`メッセージをストリームに送信する
+
+7. ゲームが開始すると、`started`イベントが流れてくる
+    * イベントの中身にはゲーム情報が含まれている
+
+8. 石を打つには、ストリームに`{ type: 'set', pos: <位置> }`を送信する(位置の計算方法は後述)
+
+9. 相手または自分が石を打つと、ストリームから`set`イベントが流れてくる
+    * `color`として石の色が含まれている
+    * `pos`として位置情報が含まれている
+
+## 位置の計算法
+8x8のマップを考える場合、各マスの位置(インデックスと呼びます)は次のようになっています:
+```
++--+--+--+--+--+--+--+--+
+| 0| 1| 2| 3| 4| 5| 6| 7|
++--+--+--+--+--+--+--+--+
+| 8| 9|10|11|12|13|14|15|
++--+--+--+--+--+--+--+--+
+|16|17|18|19|20|21|22|23|
+...
+```
+
+### X,Y座標 から インデックス に変換する
+```
+pos = x + (y * mapWidth)
+```
+`mapWidth`は、ゲーム情報の`map`から、次のようにして計算できます:
+```
+mapWidth = map[0].length
+```
+
+### インデックス から X,Y座標 に変換する
+```
+x = pos % mapWidth
+y = Math.floor(pos / mapWidth)
+```
+
+## マップ情報
+マップ情報は、ゲーム情報の`map`に入っています。 文字列の配列になっており、ひとつひとつの文字がマス情報を表しています。 それをもとにマップのデザインを知る事が出来ます:
+* `(スペース)` ... マス無し
+* `-` ... マス
+* `b` ... 初期配置される黒石
+* `w` ... 初期配置される白石
+
+例えば、4*4の次のような単純なマップがあるとします:
+```text
++---+---+---+---+
+|   |   |   |   |
++---+---+---+---+
+|   | ○ | ● |   |
++---+---+---+---+
+|   | ● | ○ |   |
++---+---+---+---+
+|   |   |   |   |
++---+---+---+---+
+```
+
+この場合、マップデータはこのようになります:
+```javascript
+['----', '-wb-', '-bw-', '----']
+```
+
+## ユーザーにフォームを提示して対話可能Botを作成する
+ユーザーとのコミュニケーションを行うため、ゲームの設定画面でユーザーにフォームを提示することができます。 例えば、Botの強さをユーザーが設定できるようにする、といったシナリオが考えられます。
+
+フォームを提示するには、`reversi-game`ストリームに次のメッセージを送信します:
+```javascript
+{
+  type: 'init-form',
+  body: [フォームコントロールの配列]
+}
+```
+
+フォームコントロールの配列については今から説明します。 フォームコントロールは、次のようなオブジェクトです:
+```javascript
+{
+  id: 'switch1',
+  type: 'switch',
+  label: 'Enable hoge',
+  value: false
+}
+```
+`id` ... コントロールのID。 `type` ... コントロールの種類。後述します。 `label` ... コントロールと一緒に表記するテキスト。 `value` ... コントロールのデフォルト値。
+
+### フォームの操作を受け取る
+ユーザーがフォームを操作すると、ストリームから`update-form`イベントが流れてきます。 イベントの中身には、コントロールのIDと、ユーザーが設定した値が含まれています。 例えば、上で示したスイッチをユーザーがオンにしたとすると、次のイベントが流れてきます:
+```javascript
+{
+  id: 'switch1',
+  value: true
+}
+```
+
+### フォームコントロールの種類
+#### 스위치
+type: `switch` スイッチを表示します。何かの機能をオン/オフさせたい場合に有用です。
+
+##### プロパティ
+`label` ... スイッチに表記するテキスト。
+
+#### ラジオボタン
+type: `radio` ラジオボタンを表示します。選択肢を提示するのに有用です。例えば、Botの強さを設定させるなどです。
+
+##### プロパティ
+`items` ... ラジオボタンの選択肢。例:
+```javascript
+items: [{
+  label: 'å¼±',
+  value: 1
+}, {
+  label: '中',
+  value: 2
+}, {
+  label: 'å¼·',
+  value: 3
+}]
+```
+
+#### スライダー
+type: `slider` スライダーを表示します。
+
+##### プロパティ
+`min` ... スライダーの下限。 `max` ... スライダーの上限。 `step` ... 入力欄で刻むステップ値。
+
+#### テキストボックス
+type: `textbox` テキストボックスを表示します。ユーザーになにか入力させる一般的な用途に利用できます。
+
+## ユーザーにメッセージを表示する
+設定画面でユーザーと対話する、フォーム以外のもうひとつの方法がこれです。ユーザーになにかメッセージを表示することができます。 例えば、ユーザーがBotの対応していないモードやマップを選択したとき、警告を表示するなどです。 メッセージを表示するには、次のメッセージをストリームに送信します:
+```javascript
+{
+  type: 'message',
+  body: {
+    text: 'メッセージ内容',
+    type: 'メッセージの種類'
+  }
+}
+```
+メッセージの種類: `success`, `info`, `warning`, `error`。
+
+## 投了する
+投了をするには、<a href="./api/endpoints/games/reversi/games/surrender">このエンドポイント</a>にリクエストします。
diff --git a/src/docs/ko-KR/advanced/stream.md b/src/docs/ko-KR/advanced/stream.md
new file mode 100644
index 0000000000..291fb9271d
--- /dev/null
+++ b/src/docs/ko-KR/advanced/stream.md
@@ -0,0 +1,350 @@
+# ストリーミングAPI
+
+ストリーミングAPIを使うと、リアルタイムで様々な情報(例えばタイムラインに新しい投稿が流れてきた、メッセージが届いた、フォローされた、など)を受け取ったり、様々な操作を行ったりすることができます。
+
+## ストリームに接続する
+
+ストリーミングAPIを利用するには、まずMisskeyサーバーに**websocket**接続する必要があります。
+
+以下のURLに、`i`というパラメータ名で認証情報を含めて、websocket接続してください。例:
+```
+%WS_URL%/streaming?i=xxxxxxxxxxxxxxx
+```
+
+認証情報は、自分のAPIキーや、アプリケーションからストリームに接続する際はユーザーのアクセストークンのことを指します。
+
+<div class="info">ℹ️ 認証情報の取得については、<a href="./api">こちらのドキュメント</a>をご確認ください。</div>
+
+---
+
+認証情報は省略することもできますが、その場合非ログインでの利用ということになり、受信できる情報や可能な操作は限られます。例:
+
+```
+%WS_URL%/streaming
+```
+
+---
+
+ストリームに接続すると、後述するAPI操作や、投稿の購読を行ったりすることができます。 しかしまだこの段階では、例えばタイムラインへの新しい投稿を受信したりすることはできません。 それを行うには、ストリーム上で、後述する**チャンネル**に接続する必要があります。
+
+**ストリームでのやり取りはすべてJSONです。**
+
+## 채널
+MisskeyのストリーミングAPIにはチャンネルという概念があります。これは、送受信する情報を分離するための仕組みです。 Misskeyのストリームに接続しただけでは、まだリアルタイムでタイムラインの投稿を受信したりはできません。 ストリーム上でチャンネルに接続することで、様々な情報を受け取ったり情報を送信したりすることができるようになります。
+
+ひとつのストリーム上で、同時に複数のチャンネルに接続することができます。
+
+### チャンネルに接続する
+チャンネルに接続するには、次のようなデータをJSONでストリームに送信します:
+
+```json
+{
+    type: 'connect',
+    body: {
+        channel: 'xxxxxxxx',
+        id: 'foobar',
+        params: {
+            ...
+        }
+    }
+}
+```
+
+ここで、
+* `channel`には接続したいチャンネル名を設定します。チャンネルの種類については後述します。
+* `id`にはそのチャンネルとやり取りするための任意のIDを設定します。ストリームでは様々なメッセージが流れるので、そのメッセージがどのチャンネルからのものなのか識別する必要があるからです。このIDは、UUIDや、乱数のようなもので構いません。
+* `params`はチャンネルに接続する際のパラメータです。チャンネルによって接続時に必要とされるパラメータは異なります。パラメータ不要のチャンネルに接続する際は、このプロパティは省略可能です。
+
+<div class="info">ℹ️ IDはチャンネルごとではなく「チャンネルの接続ごと」です。なぜなら、同じチャンネルに異なるパラメータで複数接続するケースもあるからです。</div>
+
+### チャンネルからのメッセージを受け取る
+例えばタイムラインのチャンネルなら、新しい投稿があった時にメッセージを発します。そのメッセージを受け取ることで、タイムラインに新しい投稿がされたことをリアルタイムで知ることができます。
+
+チャンネルがメッセージを発すると、次のようなデータがJSONでストリームに流れてきます:
+```json
+{
+    type: 'channel',
+    body: {
+        id: 'foobar',
+        type: 'something',
+        body: {
+            some: 'thing'
+        }
+    }
+}
+```
+
+ここで、
+* `id`には前述したそのチャンネルに接続する際に設定したIDが設定されています。これで、このメッセージがどのチャンネルからのものなのか知ることができます。
+* `type`にはメッセージの種類が設定されます。チャンネルによって、どのような種類のメッセージが流れてくるかは異なります。
+* `body`にはメッセージの内容が設定されます。チャンネルによって、どのような内容のメッセージが流れてくるかは異なります。
+
+### チャンネルに向けてメッセージを送信する
+チャンネルによっては、メッセージを受け取るだけでなく、こちらから何かメッセージを送信し、何らかの操作を行える場合があります。
+
+チャンネルにメッセージを送信するには、次のようなデータをJSONでストリームに送信します:
+```json
+{
+    type: 'channel',
+    body: {
+        id: 'foobar',
+        type: 'something',
+        body: {
+            some: 'thing'
+        }
+    }
+}
+```
+
+ここで、
+* `id`には前述したそのチャンネルに接続する際に設定したIDを設定します。これで、このメッセージがどのチャンネルに向けたものなのか識別させることができます。
+* `type`にはメッセージの種類を設定します。チャンネルによって、どのような種類のメッセージを受け付けるかは異なります。
+* `body`にはメッセージの内容を設定します。チャンネルによって、どのような内容のメッセージを受け付けるかは異なります。
+
+### チャンネルから切断する
+チャンネルから切断するには、次のようなデータをJSONでストリームに送信します:
+
+```json
+{
+    type: 'disconnect',
+    body: {
+        id: 'foobar'
+    }
+}
+```
+
+ここで、
+* `id`には前述したそのチャンネルに接続する際に設定したIDを設定します。
+
+## ストリームを経由してAPIリクエストする
+
+ストリームを経由してAPIリクエストすると、HTTPリクエストを発生させずにAPIを利用できます。そのため、コードを簡潔にできたり、パフォーマンスの向上を見込めるかもしれません。
+
+ストリームを経由してAPIリクエストするには、次のようなデータをJSONでストリームに送信します:
+```json
+{
+    type: 'api',
+    body: {
+        id: 'xxxxxxxxxxxxxxxx',
+        endpoint: 'notes/create',
+        data: {
+            text: 'yee haw!'
+        }
+    }
+}
+```
+
+ここで、
+* `id`には、APIのレスポンスを識別するための、APIリクエストごとの一意なIDを設定する必要があります。UUIDや、簡単な乱数のようなもので構いません。
+* `endpoint`には、あなたがリクエストしたいAPIのエンドポイントを指定します。
+* `data`には、エンドポイントのパラメータを含めます。
+
+<div class="info">ℹ️ APIのエンドポイントやパラメータについてはAPIリファレンスをご確認ください。</div>
+
+### レスポンスの受信
+
+APIへリクエストすると、レスポンスがストリームから次のような形式で流れてきます。
+
+```json
+{
+    type: 'api:xxxxxxxxxxxxxxxx',
+    body: {
+        ...
+    }
+}
+```
+
+ここで、
+* `xxxxxxxxxxxxxxxx`の部分には、リクエストの際に設定された`id`が含まれています。これにより、どのリクエストに対するレスポンスなのか判別することができます。
+* `body`には、レスポンスが含まれています。
+
+## 投稿のキャプチャ
+
+Misskeyは投稿のキャプチャと呼ばれる仕組みを提供しています。これは、指定した投稿のイベントをストリームで受け取る機能です。
+
+例えばタイムラインを取得してユーザーに表示したとします。ここで誰かがそのタイムラインに含まれるどれかの投稿に対してリアクションしたとします。
+
+しかし、クライアントからするとある投稿にリアクションが付いたことなどは知る由がないため、リアルタイムでリアクションをタイムライン上の投稿に反映して表示するといったことができません。
+
+この問題を解決するために、Misskeyは投稿のキャプチャ機構を用意しています。投稿をキャプチャすると、その投稿に関するイベントを受け取ることができるため、リアルタイムでリアクションを反映させたりすることが可能になります。
+
+### 投稿をキャプチャする
+
+投稿をキャプチャするには、ストリームに次のようなメッセージを送信します:
+
+```json
+{
+    type: 'subNote',
+    body: {
+        id: 'xxxxxxxxxxxxxxxx'
+    }
+}
+```
+
+ここで、
+* `id`にキャプチャしたい投稿の`id`を設定します。
+
+このメッセージを送信すると、Misskeyにキャプチャを要請したことになり、以後、その投稿に関するイベントが流れてくるようになります。
+
+例えば投稿にリアクションが付いたとすると、次のようなメッセージが流れてきます:
+
+```json
+{
+    type: 'noteUpdated',
+    body: {
+        id: 'xxxxxxxxxxxxxxxx',
+        type: 'reacted',
+        body: {
+            reaction: 'like',
+            userId: 'yyyyyyyyyyyyyyyy'
+        }
+    }
+}
+```
+
+ここで、
+* `body`内の`id`に、イベントを発生させた投稿のIDが設定されます。
+* `body`内の`type`に、イベントの種類が設定されます。
+* `body`内の`body`に、イベントの詳細が設定されます。
+
+#### イベントの種類
+
+##### `reacted`
+その投稿にリアクションがされた時に発生します。
+
+* `reaction`に、リアクションの種類が設定されます。
+* `userId`に、リアクションを行ったユーザーのIDが設定されます。
+
+例:
+```json
+{
+    type: 'noteUpdated',
+    body: {
+        id: 'xxxxxxxxxxxxxxxx',
+        type: 'reacted',
+        body: {
+            reaction: 'like',
+            userId: 'yyyyyyyyyyyyyyyy'
+        }
+    }
+}
+```
+
+##### `deleted`
+その投稿が削除された時に発生します。
+
+* `deletedAt`に、削除日時が設定されます。
+
+例:
+```json
+{
+    type: 'noteUpdated',
+    body: {
+        id: 'xxxxxxxxxxxxxxxx',
+        type: 'deleted',
+        body: {
+            deletedAt: '2018-10-22T02:17:09.703Z'
+        }
+    }
+}
+```
+
+##### `pollVoted`
+その投稿に添付されたアンケートに投票された時に発生します。
+
+* `choice`に、選択肢IDが設定されます。
+* `userId`に、投票を行ったユーザーのIDが設定されます。
+
+例:
+```json
+{
+    type: 'noteUpdated',
+    body: {
+        id: 'xxxxxxxxxxxxxxxx',
+        type: 'pollVoted',
+        body: {
+            choice: 2,
+            userId: 'yyyyyyyyyyyyyyyy'
+        }
+    }
+}
+```
+
+### 投稿のキャプチャを解除する
+
+その投稿がもう画面に表示されなくなったりして、その投稿に関するイベントをもう受け取る必要がなくなったときは、キャプチャの解除を申請してください。
+
+次のメッセージを送信します:
+
+```json
+{
+    type: 'unsubNote',
+    body: {
+        id: 'xxxxxxxxxxxxxxxx'
+    }
+}
+```
+
+ここで、
+* `id`にキャプチャを解除したい投稿の`id`を設定します。
+
+このメッセージを送信すると、以後、その投稿に関するイベントは流れてこないようになります。
+
+# チャンネル一覧
+## `main`
+アカウントに関する基本的な情報が流れてきます。このチャンネルにパラメータはありません。
+
+### 流れてくるイベント一覧
+
+#### `renote`
+自分の投稿がRenoteされた時に発生するイベントです。自分自身の投稿をRenoteしたときは発生しません。
+
+#### `mention`
+誰かからメンションされたときに発生するイベントです。
+
+#### `readAllNotifications`
+自分宛ての通知がすべて既読になったことを表すイベントです。このイベントを利用して、「通知があることを示すアイコン」のようなものをオフにしたりする等のケースが想定されます。
+
+#### `meUpdated`
+自分の情報が更新されたことを表すイベントです。
+
+#### `follow`
+自分が誰かをフォローしたときに発生するイベントです。
+
+#### `unfollow`
+自分が誰かのフォローを解除したときに発生するイベントです。
+
+#### `followed`
+自分が誰かにフォローされたときに発生するイベントです。
+
+## `homeTimeline`
+ホームタイムラインの投稿情報が流れてきます。このチャンネルにパラメータはありません。
+
+### 流れてくるイベント一覧
+
+#### `note`
+タイムラインに新しい投稿が流れてきたときに発生するイベントです。
+
+## `localTimeline`
+ローカルタイムラインの投稿情報が流れてきます。このチャンネルにパラメータはありません。
+
+### 流れてくるイベント一覧
+
+#### `note`
+ローカルタイムラインに新しい投稿が流れてきたときに発生するイベントです。
+
+## `hybridTimeline`
+ソーシャルタイムラインの投稿情報が流れてきます。このチャンネルにパラメータはありません。
+
+### 流れてくるイベント一覧
+
+#### `note`
+ソーシャルタイムラインに新しい投稿が流れてきたときに発生するイベントです。
+
+## `globalTimeline`
+グローバルタイムラインの投稿情報が流れてきます。このチャンネルにパラメータはありません。
+
+### 流れてくるイベント一覧
+
+#### `note`
+グローバルタイムラインに新しい投稿が流れてきたときに発生するイベントです。
diff --git a/src/docs/ko-KR/features/antenna.md b/src/docs/ko-KR/features/antenna.md
new file mode 100644
index 0000000000..9457015f6b
--- /dev/null
+++ b/src/docs/ko-KR/features/antenna.md
@@ -0,0 +1,4 @@
+# 안테나
+アンテナは、自由に条件を設定して、合致するノートを自動で収集することができる機能です。
+
+条件を設定したアンテナが作成された状態で、条件に合致するノートが投稿されると、リアルタイムでそのアンテナのタイムラインにノートが追加されます。
diff --git a/src/docs/ko-KR/features/custom-emoji.md b/src/docs/ko-KR/features/custom-emoji.md
new file mode 100644
index 0000000000..6aa3a0fe49
--- /dev/null
+++ b/src/docs/ko-KR/features/custom-emoji.md
@@ -0,0 +1,2 @@
+# 커스텀 이모지
+カスタム絵文字は、インスタンスで用意された画像を絵文字のように使える機能です。 ノート、リアクション、チャット、自己紹介、名前などの場所で使うことができます。 カスタム絵文字をそれらの場所で使うには、絵文字ピッカーボタン(ある場合)を押すか、`:`を入力して絵文字サジェストを表示します。 テキスト内に`:foo:`のような形式の文字列が見つかると、`foo`の部分がカスタム絵文字名と解釈され、表示時には対応したカスタム絵文字に置き換わります。
diff --git a/src/docs/ko-KR/features/deck.md b/src/docs/ko-KR/features/deck.md
new file mode 100644
index 0000000000..87c95d45b3
--- /dev/null
+++ b/src/docs/ko-KR/features/deck.md
@@ -0,0 +1,18 @@
+# 덱
+
+デッキは利用可能なUIのひとつです。「カラム」と呼ばれるビューを複数並べて表示させることで、カスタマイズ性が高く、情報量の多いUIが構築できることが特徴です。
+
+## カラムの追加
+デッキの背景を右クリックし、「カラムを追加」して任意のカラムを追加できます。
+
+## カラムの移動
+カラムは、ドラッグアンドドロップで他のカラムと位置を入れ替えることが出来るほか、カラムメニュー(カラムのヘッダー右クリック)から位置を移動させることもできます。
+
+## カラムの水平分割
+カラムは左右だけでなく、上下に並べることもできます。 カラムメニューを開き、「左に重ねる」を選択すると、左のカラムの下に現在のカラムが移動します。 上下分割を解除するには、カラムメニューの「右に出す」を選択します。
+
+## カラムの設定
+カラムメニューの「編集」を選択するとカラムの設定を編集できます。カラムの名前を変えたり、幅を変えたりできます。
+
+## デッキの設定
+デッキに関する設定は、[settings/deck](/settings/deck)で行えます。
diff --git a/src/docs/ko-KR/features/drive.md b/src/docs/ko-KR/features/drive.md
new file mode 100644
index 0000000000..9c1d604da7
--- /dev/null
+++ b/src/docs/ko-KR/features/drive.md
@@ -0,0 +1,17 @@
+# 드라이브
+ドライブは、Misskey上でファイルを管理できる機能です。
+
+[ドライブのページ](/my/drive)から任意のファイルをアップロードできるほか、アバターに設定した画像や、ノートに添付したファイルなどもすべてドライブにアップロードされます。
+
+<div class="warn">⚠️ ドライブからファイルを削除すると、そのファイルが添付されたノートも消えます。</div>
+
+ドライブにアップロードされたファイルは、いつでもダウンロードすることができるほか、ノート作成時に「ドライブからファイルを添付」することでファイルを再利用することもできます。
+
+ドライブ内にフォルダを作り、複数のファイルをまとめて整理することもできます。
+
+## 閲覧注意 (NSFW)
+<div class="info">ℹ️ この項目が閲覧注意なわけではありません</div>
+
+閲覧注意またはNSFW (Not safe for work) は、ドライブのファイルに設定することができるフラグです。 閲覧注意フラグを設定されたファイルは、表示される際に閲覧者の操作なしには表示されなくなります。 このフラグは、例えば職場や公共の場で閲覧するのに適切でないと思われる画像などに設定し、そのような画像が突然表示されてしまうことを防ぐ目的で使われます。
+
+このフラグは手動でオンオフを切り替えられるほか、モデレーターの判断で設定される場合もあります。
diff --git a/src/docs/ko-KR/features/favorite.md b/src/docs/ko-KR/features/favorite.md
new file mode 100644
index 0000000000..c6a3b413dc
--- /dev/null
+++ b/src/docs/ko-KR/features/favorite.md
@@ -0,0 +1,4 @@
+# 즐겨찾기
+[ノート](./node)をお気に入りとして登録できる機能です。 お気に入り登録したノートは、[お気に入りページ](./my/favorites)で一覧することができます。 お気に入りに登録したことは相手に通知されず、お気に入りは自分しか見ることができません。
+
+ノートをお気に入り登録するには、ノートメニューの「お気に入り」を押します。お気に入り解除するには、ノートメニューの「お気に入り解除」を押します。
diff --git a/src/docs/ko-KR/features/follow.md b/src/docs/ko-KR/features/follow.md
new file mode 100644
index 0000000000..197aee13c5
--- /dev/null
+++ b/src/docs/ko-KR/features/follow.md
@@ -0,0 +1,2 @@
+# 팔로잉
+ユーザーをフォローすると、タイムラインにそのユーザーの投稿が表示されるようになります。ただし、他のユーザーに対する返信は含まれません。 ユーザーをフォローするには、ユーザーページの「フォロー」ボタンをクリックします。フォローを解除するには、もう一度クリックします。
diff --git a/src/docs/ko-KR/features/keyboard-shortcut.md b/src/docs/ko-KR/features/keyboard-shortcut.md
new file mode 100644
index 0000000000..95cb818846
--- /dev/null
+++ b/src/docs/ko-KR/features/keyboard-shortcut.md
@@ -0,0 +1,66 @@
+# キーボードショートカット
+
+## 글로벌
+これらのショートカットは基本的にどこでも使えます。
+<table>
+    <thead>
+        <tr><th>ショートカット</th><th>効果</th><th>由来</th></tr>
+    </thead>
+    <tbody>
+        <tr><td><kbd class="key">P</kbd>, <kbd class="key">N</kbd></td><td>新規投稿</td><td><b>P</b>ost, <b>N</b>ew, <b>N</b>ote</td></tr>
+        <tr><td><kbd class="key">T</kbd></td><td>タイムラインの最も新しい投稿にフォーカス</td><td><b>T</b>imeline, <b>T</b>op</td></tr>
+        <tr><td><kbd class="group"><kbd class="key">Shift</kbd> + <kbd class="key">N</kbd></kbd></td><td>通知を表示/隠す</td><td><b>N</b>otifications</td></tr>
+        <tr><td><kbd class="key">S</kbd></td><td>검색</td><td><b>S</b>earch</td></tr>
+        <tr><td><kbd class="key">H</kbd>, <kbd class="key">?</kbd></td><td>ヘルプを表示</td><td><b>H</b>elp</td></tr>
+    </tbody>
+</table>
+
+## 投稿にフォーカスされた状態
+<table>
+    <thead>
+        <tr><th>ショートカット</th><th>効果</th><th>由来</th></tr>
+    </thead>
+    <tbody>
+        <tr><td><kbd class="key">↑</kbd>, <kbd class="key">K</kbd>, <kbd class="group"><kbd class="key">Shift</kbd> + <kbd class="key">Tab</kbd></kbd></td><td>上の投稿にフォーカスを移動</td><td>-</td></tr>
+        <tr><td><kbd class="key">↓</kbd>, <kbd class="key">J</kbd>, <kbd class="key">Tab</kbd></td><td>下の投稿にフォーカスを移動</td><td>-</td></tr>
+        <tr><td><kbd class="key">R</kbd></td><td>返信フォームを開く</td><td><b>R</b>eply</td></tr>
+        <tr><td><kbd class="key">Q</kbd></td><td>Renoteフォームを開く</td><td><b>Q</b>uote</td></tr>
+        <tr><td><kbd class="group"><kbd class="key">Ctrl</kbd> + <kbd class="key">Q</kbd></kbd></td><td>即刻Renoteする(フォームを開かずに)</td><td>-</td></tr>
+        <tr><td><kbd class="key">E</kbd>, <kbd class="key">A</kbd>, <kbd class="key">+</kbd></td><td>リアクションフォームを開く</td><td><b>E</b>mote, re<b>A</b>ction</td></tr>
+        <tr><td><kbd class="key">0</kbd>~<kbd class="key">9</kbd></td><td>数字に対応したリアクションをする(対応については後述)</td><td>-</td></tr>
+        <tr><td><kbd class="key">F</kbd>, <kbd class="key">B</kbd></td><td>お気に入りに登録</td><td><b>F</b>avorite, <b>B</b>ookmark</td></tr>
+        <tr><td><kbd class="key">Del</kbd>, <kbd class="group"><kbd class="key">Ctrl</kbd> + <kbd class="key">D</kbd></kbd></td><td>投稿を削除</td><td><b>D</b>elete</tr>
+        <tr><td><kbd class="key">M</kbd>, <kbd class="key">O</kbd></td><td>投稿に対するメニューを開く</td><td><b>M</b>ore, <b>O</b>ther</td></tr>
+        <tr><td><kbd class="key">S</kbd></td><td>CWで隠された部分を表示 or 隠す</td><td><b>S</b>how, <b>S</b>ee</td></tr>
+        <tr><td><kbd class="key">Esc</kbd></td><td>フォーカスを外す</td><td>-</td></tr>
+    </tbody>
+</table>
+
+## Renoteフォーム
+<table>
+    <thead>
+        <tr><th>ショートカット</th><th>効果</th><th>由来</th></tr>
+    </thead>
+    <tbody>
+        <tr><td><kbd class="key">Enter</kbd></td><td>Renoteする</td><td>-</td></tr>
+        <tr><td><kbd class="key">Q</kbd></td><td>フォームを展開する</td><td><b>Q</b>uote</td></tr>
+        <tr><td><kbd class="key">Esc</kbd></td><td>フォームを閉じる</td><td>-</td></tr>
+    </tbody>
+</table>
+
+## リアクションフォーム
+デフォルトで「👍」にフォーカスが当たっている状態です。
+<table>
+    <thead>
+        <tr><th>ショートカット</th><th>効果</th><th>由来</th></tr>
+    </thead>
+    <tbody>
+        <tr><td><kbd class="key">↑</kbd>, <kbd class="key">K</kbd></td><td>上のリアクションにフォーカスを移動</td><td>-</td></tr>
+        <tr><td><kbd class="key">↓</kbd>, <kbd class="key">J</kbd></td><td>下のリアクションにフォーカスを移動</td><td>-</td></tr>
+        <tr><td><kbd class="key">←</kbd>, <kbd class="key">H</kbd>, <kbd class="group"><kbd class="key">Shift</kbd> + <kbd class="key">Tab</kbd></kbd></td><td>左のリアクションにフォーカスを移動</td><td>-</td></tr>
+        <tr><td><kbd class="key">→</kbd>, <kbd class="key">L</kbd>, <kbd class="key">Tab</kbd></td><td>右のリアクションにフォーカスを移動</td><td>-</td></tr>
+        <tr><td><kbd class="key">Enter</kbd>, <kbd class="key">Space</kbd>, <kbd class="key">+</kbd></td><td>リアクション確定</td><td>-</td></tr>
+        <tr><td><kbd class="key">0</kbd>~<kbd class="key">9</kbd></td><td>数字に対応したリアクションで確定</td><td>-</td></tr>
+        <tr><td><kbd class="key">Esc</kbd></td><td>リアクションするのをやめる</td><td>-</td></tr>
+    </tbody>
+</table>
diff --git a/src/docs/ko-KR/features/mfm.md b/src/docs/ko-KR/features/mfm.md
new file mode 100644
index 0000000000..5be2df4f30
--- /dev/null
+++ b/src/docs/ko-KR/features/mfm.md
@@ -0,0 +1,12 @@
+# MFM
+MFMは、Misskey Flavored Markdownの略で、Misskeyの様々な場所で使用できる専用のマークアップ言語です。 MFMで使用可能な構文は[MFMチートシート](/mfm-cheat-sheet)で確認できます。
+
+## MFMが使用可能な場所の例
+- ノート本文
+- CW注釈
+- ユーザーの名前
+- ユーザーの自己紹介
+
+## 開発者向け情報
+MFMのパーサー実装はライブラリとして公開されており、簡単にクライアントにMFMを組み込むことが可能です。
+- [misskey-dev/mfm.js](https://github.com/misskey-dev/mfm.js) - JavaScriptパーサー実装
diff --git a/src/docs/ko-KR/features/mute.md b/src/docs/ko-KR/features/mute.md
new file mode 100644
index 0000000000..89195bb108
--- /dev/null
+++ b/src/docs/ko-KR/features/mute.md
@@ -0,0 +1,13 @@
+# 뮤트
+
+ユーザーをミュートすると、そのユーザーに関する次のコンテンツがMisskeyに表示されなくなります:
+
+* タイムラインや投稿の検索結果内の、そのユーザーの投稿(およびそれらの投稿に対する返信やRenote)
+* そのユーザーからの通知
+* メッセージ履歴一覧内の、そのユーザーとのメッセージ履歴
+
+ユーザーをミュートするには、対象のユーザーのユーザーページに表示されている「ミュート」ボタンを押します。
+
+ミュートを行ったことは相手に通知されず、ミュートされていることを知ることもできません。
+
+設定>ミュート から、自分がミュートしているユーザー一覧を確認することができます。
diff --git a/src/docs/ko-KR/features/note.md b/src/docs/ko-KR/features/note.md
new file mode 100644
index 0000000000..e426e7c003
--- /dev/null
+++ b/src/docs/ko-KR/features/note.md
@@ -0,0 +1,51 @@
+# 노트
+ノートは、Misskeyに投稿される、文章、ファイル、アンケートなどを含むコンテンツで、Misskeyの中心的概念です。また、そのノートを作成する行為自体もノートと呼ばれます。
+
+ノートが作成されると、[タイムライン](./timeline)に追加され、自分の[フォロワー](./follow)やサーバーのユーザーが見れるようになります。
+
+ノートには、[リアクション](./reaction)を行うことができます。また、返信や引用もできます。
+
+ノートを[お気に入り](./favorite)登録することで、後で簡単に見返すことができます。
+
+## ノートを作成する
+ノートを作成するには、画面上にある鉛筆マークのボタンを押して、作成フォームを開きます。作成フォームに内容を入力し、「ノート」ボタンを押すことでノートが作成されます。 ノートには、画像、動画など任意のファイルや、[アンケート](./poll)を添付することができます。また、本文中には[MFM](./mfm)が使用でき、[メンション](./mention)や[ハッシュタグ](./hashtag)を含めることもできます。 他にも、CWや公開範囲といった設定も行えます(詳細は後述)。
+<div class="info">ℹ️ コンピューターのクリップボードに画像データがある状態で、フォーム内のテキストボックスにペーストするとその画像を添付することができます。</div>
+<div class="info">ℹ️ テキストボックス内で<kbd class="key">Ctrl + Enter</kbd>を押すことでも投稿できます。</div>
+
+## Renote
+既にあるノートを引用、もしくはそのノートを新しいノートとして共有する行為、またそれによって作成されたノートをRenoteと呼びます。 自分がフォローしているユーザーの、気に入ったノートを自分のフォロワーに共有したい場合や、過去の自分のノートを再度共有したい場合に使います。 同じノートに対して無制限にRenoteを行うことができますが、あまり連続して使用すると迷惑になる場合もあるので、注意しましょう。
+<div class="warn">⚠️ 公開範囲がフォロワーやダイレクトのノートはRenoteできません</div>
+
+Renoteを削除するには、Renoteの時刻表示の隣にある「...」を押し、「Renote解除」を選択します。
+
+## CW
+Contents Warningの略で、ノートの内容を、閲覧者の操作なしには表示しないようにできる機能です。主に長大な内容を隠すためや、ネタバレ防止などに使うことができます。 設定するには、フォームの「内容を隠す」ボタン(目のアイコン)を押します。すると新しい入力エリアが表れるので、そこに内容の要約を記入します。
+
+## 공개 범위
+ノートごとに、そのノートが公開される範囲を設定することができます。フォームの「ノート」ボタンの左にあるアイコンを押すと公開範囲を以下から選択できます。
+
+### 공개
+全ての人に対してノートが公開されるほか、サーバーの全てのタイムライン(ホームタイムライン、ローカルタイムライン、ソーシャルタイムライン、グローバルタイムライン)にノートが流れます。
+<div class="warn">⚠️ アカウントが<a href="./silence">サイレンス</a>状態の時は、この公開範囲は使用できません。</div>
+
+### 홈
+全ての人に対してノートが公開されますが、フォロワー以外のローカルタイムライン、ソーシャルタイムライン、グローバルタイムラインにはノートは流れません。
+
+### 팔로워
+自分のフォロワーに対してのみノートを公開します。フォロワーの全てのタイムラインに流れます。
+
+### 다이렉트
+指定したユーザーに対してのみノートを公開します。指定したユーザーの全てのタイムラインに流れます。
+
+### 「ローカルのみ」オプション
+このオプションを有効にすると、リモートにノートを連合しなくなります。
+
+### 公開範囲の比較
+<table>
+    <tr><th></th><th>공개</th><th>홈</th><th>팔로워</th><th>다이렉트</th></tr>
+    <tr><th>フォロワーのLTL/STL/GTL</th><td>✔</td><td>✔</td><td>✔</td><td></td></tr>
+    <tr><th>非フォロワーのLTL/STL/GTL</th><td>✔</td><td></td><td></td><td></td></tr>
+</table>
+
+## 프로필에 고정
+ノートをピン留めすると、ユーザーページに常にそのノートを表示しておくことができます。 ノートのメニューを開き、「ピン留め」を選択してピン留めできます。 複数のノートをピン留めできます。
diff --git a/src/docs/ko-KR/features/pages.md b/src/docs/ko-KR/features/pages.md
new file mode 100644
index 0000000000..54bc853715
--- /dev/null
+++ b/src/docs/ko-KR/features/pages.md
@@ -0,0 +1,10 @@
+# Pages
+
+## 변수
+変数を使うことで動的なページを作成できます。テキスト内で <b>{ 変数名 }</b> と書くとそこに変数の値を埋め込めます。例えば <b>Hello { thing } world!</b> というテキストで、変数(thing)の値が <b>ai</b> だった場合、テキストは <b>Hello ai world!</b> になります。
+
+変数の評価(値を算出すること)は上から下に行われるので、ある変数の中で自分より下の変数を参照することはできません。例えば上から <b>A、B、C</b> と3つの変数を定義したとき、<b>C</b>の中で<b>A</b>や<b>B</b>を参照することはできますが、<b>A</b>の中で<b>B</b>や<b>C</b>を参照することはできません。
+
+ユーザーからの入力を受け取るには、ページに「ユーザー入力」ブロックを設置し、「変数名」に入力を格納したい変数名を設定します(変数は自動で作成されます)。その変数を使ってユーザー入力に応じた動作を行えます。
+
+関数を使うと、値の算出処理を再利用可能な形にまとめることができます。関数を作るには、「関数」タイプの変数を作成します。関数にはスロット(引数)を設定することができ、スロットの値は関数内で変数として利用可能です。また、関数を引数に取る関数(高階関数と呼ばれます)も存在します。関数は予め定義しておくほかに、このような高階関数のスロットに即席でセットすることもできます。
diff --git a/src/docs/ko-KR/features/reaction.md b/src/docs/ko-KR/features/reaction.md
new file mode 100644
index 0000000000..260258f934
--- /dev/null
+++ b/src/docs/ko-KR/features/reaction.md
@@ -0,0 +1,11 @@
+# 리액션
+他の人のノートに、絵文字を付けて簡単にあなたの反応を伝えられる機能です。 リアクションするには、ノートの + アイコンをクリックしてピッカーを表示し、絵文字を選択します。 リアクションには[カスタム絵文字](./custom-emoji)も使用できます。
+
+## リアクションピッカーのカスタマイズ
+ピッカーに表示される絵文字を自分好みにカスタマイズすることができます。 設定の「リアクション」で設定します。
+
+## リモート投稿へのリアクションについて
+リアクションはMisskeyオリジナルの機能であるため、リモートインスタンスがMisskeyでない限りは、ほとんどの場合「Like」としてアクティビティが送信されます。一般的にはLikeは「お気に入り」として実装されているようです。
+
+## リモートからのリアクションについて
+リモートから「Like」アクティビティを受信したとき、Misskeyでは「👍」のリアクションとして解釈されます。
diff --git a/src/docs/ko-KR/features/silence.md b/src/docs/ko-KR/features/silence.md
new file mode 100644
index 0000000000..756aa98405
--- /dev/null
+++ b/src/docs/ko-KR/features/silence.md
@@ -0,0 +1,6 @@
+# 사일런스
+サイレンスは、アカウントに設定される状態のひとつです。
+
+アカウントがサイレンス状態になると、ノートの公開範囲をパブリックにできなくなります。 ホーム、フォロワー、ダイレクトは選択可能なため、サイレンスを受けた場合でもフォロワーやあなたのユーザーページを直接訪れた場合は投稿を閲覧できますが、GTL(連合タイムライン)やLTL(ローカルタイムライン)には投稿が流れません。
+
+アカウントのサイレンス状態は、サーバーのモデレーターによって有効化/無効化されます。
diff --git a/src/docs/ko-KR/features/theme.md b/src/docs/ko-KR/features/theme.md
new file mode 100644
index 0000000000..e01133b831
--- /dev/null
+++ b/src/docs/ko-KR/features/theme.md
@@ -0,0 +1,68 @@
+# 테마
+
+テーマを設定して、Misskeyクライアントの見た目を変更できます。
+
+## テーマの設定
+設定 > テーマ
+
+## テーマを作成する
+テーマコードはJSON5で記述されたテーマオブジェクトです。 テーマは以下のようなオブジェクトです。
+``` js
+{
+    id: '17587283-dd92-4a2c-a22c-be0637c9e22a',
+
+    name: 'Danboard',
+    author: 'syuilo',
+
+    base: 'light',
+
+    props: {
+        accent: 'rgb(218, 141, 49)',
+        bg: 'rgb(218, 212, 190)',
+        fg: 'rgb(115, 108, 92)',
+        panel: 'rgb(236, 232, 220)',
+        renote: 'rgb(100, 152, 106)',
+        link: 'rgb(100, 152, 106)',
+        mention: '@accent',
+        hashtag: 'rgb(100, 152, 106)',
+        header: 'rgba(239, 227, 213, 0.75)',
+        navBg: 'rgb(216, 206, 182)',
+        inputBorder: 'rgba(0, 0, 0, 0.1)',
+    },
+}
+
+```
+
+* `id` ... テーマの一意なID。UUIDをおすすめします。
+* `name` ... テーマ名
+* `author` ... テーマの作者
+* `desc` ... テーマの説明(オプション)
+* `base` ... 明るいテーマか、暗いテーマか
+    * `light`にすると明るいテーマになり、`dark`にすると暗いテーマになります。
+    * テーマはここで設定されたベーステーマを継承します。
+* `props` ... テーマのスタイル定義。これから説明します。
+
+### テーマのスタイル定義
+`props`下にはテーマのスタイルを定義します。 キーがCSSの変数名になり、バリューで中身を指定します。 なお、この`props`オブジェクトはベーステーマから継承されます。 ベーステーマは、このテーマの`base`が`light`なら[_light.json5](https://github.com/misskey-dev/misskey/blob/develop/src/client/themes/_light.json5)で、`dark`なら[_dark.json5](https://github.com/misskey-dev/misskey/blob/develop/src/client/themes/_dark.json5)です。 つまり、このテーマ内の`props`に`panel`というキーが無くても、そこにはベーステーマの`panel`があると見なされます。
+
+#### バリューで使える構文
+* 16進数で表された色
+    * 例: `#00ff00`
+* `rgb(r, g, b)`形式で表された色
+    * 例: `rgb(0, 255, 0)`
+* `rgb(r, g, b, a)`形式で表された透明度を含む色
+    * 例: `rgba(0, 255, 0, 0.5)`
+* 他のキーの値の参照
+    * `@{キー名}`と書くと他のキーの値の参照になります。`{キー名}`は参照したいキーの名前に置き換えます。
+    * 例: `@panel`
+* 定数(後述)の参照
+    * `${定数名}`と書くと定数の参照になります。`{定数名}`は参照したい定数の名前に置き換えます。
+    * 例: `$main`
+* 関数(後述)
+    * `:{関数名}<{引数}<{色}`
+
+#### 상수
+「CSS変数として出力はしたくないが、他のCSS変数の値として使いまわしたい」値があるときは、定数を使うと便利です。 キー名を`$`で始めると、そのキーはCSS変数として出力されません。
+
+#### 함수
+wip
diff --git a/src/docs/ko-KR/features/timeline.md b/src/docs/ko-KR/features/timeline.md
new file mode 100644
index 0000000000..6598c0656b
--- /dev/null
+++ b/src/docs/ko-KR/features/timeline.md
@@ -0,0 +1,31 @@
+# 타임라인
+タイムラインは、[ノート](./note)が時系列で表示される機能です。 タイムラインには以下で示す種類があり、種類によって表示されるノートも異なります。 なお、タイムラインの種類によってはサーバーにより無効になっている場合があります。
+
+## 홈
+自分のフォローしているユーザーの投稿が流れます。HTLと略されます。
+
+## 로컬
+全てのローカルユーザーの「ホーム」指定されていない投稿が流れます。LTLと略されます。
+
+## 소셜
+自分のフォローしているユーザーの投稿と、全てのローカルユーザーの「ホーム」指定されていない投稿が流れます。STLと略されます。
+
+## 글로벌
+全てのローカルユーザーの「ホーム」指定されていない投稿と、サーバーに届いた全てのリモートユーザーの「ホーム」指定されていない投稿が流れます。GTLと略されます。
+
+## 비교
+| ソース          |       |   | 타임라인 |    |     |
+| ------------ | ----- | - | ---- | -- | --- |
+| 유저           | 공개 범위 | 홈 | 로컬   | 소셜 | 글로벌 |
+| ローカル (フォロー)  | 게시    | ✔ | ✔    | ✔  | ✔   |
+|              | 홈     | ✔ |      | ✔  |     |
+|              | 팔로워   | ✔ | ✔    | ✔  | ✔   |
+| リモート (フォロー)  | 게시    | ✔ |      | ✔  | ✔   |
+|              | 홈     | ✔ |      | ✔  |     |
+|              | 팔로워   | ✔ |      | ✔  | ✔   |
+| ローカル (未フォロー) | 게시    |   | ✔    | ✔  | ✔   |
+|              | 홈     |   |      |    |     |
+|              | 팔로워   |   |      |    |     |
+| リモート (未フォロー) | 게시    |   |      |    | ✔   |
+|              | 홈     |   |      |    |     |
+|              | 팔로워   |   |      |    |     |
diff --git a/src/docs/ko-KR/features/widgets.md b/src/docs/ko-KR/features/widgets.md
new file mode 100644
index 0000000000..5372866d1e
--- /dev/null
+++ b/src/docs/ko-KR/features/widgets.md
@@ -0,0 +1,7 @@
+# 위젯
+ウィジェットは、MisskeyのUI上に設置できる小型の情報表示、操作が行えるパーツです。
+
+ウィジェットを編集するには、ウィジェット編集モードに切り替えます。切り替え方法はUIによって異なります。 ウィジェット編集モードでは、ウィジェットの追加、削除、並び替え、およびそれぞれのウィジェットの設定を行えます。
+
+## 利用可能なウィジェット一覧
+todo
diff --git a/src/docs/ko-KR/general/apps.md b/src/docs/ko-KR/general/apps.md
new file mode 100644
index 0000000000..1f4c85fe8f
--- /dev/null
+++ b/src/docs/ko-KR/general/apps.md
@@ -0,0 +1,6 @@
+# サードパーティアプリのリスト
+## クライアント
+todo
+
+## 連携サービス
+todo
diff --git a/src/docs/ko-KR/general/faq.md b/src/docs/ko-KR/general/faq.md
new file mode 100644
index 0000000000..ecb664e32e
--- /dev/null
+++ b/src/docs/ko-KR/general/faq.md
@@ -0,0 +1,22 @@
+# よくある質問
+ここでは利用上のよくある質問について掲載しています。 Misskeyのプロジェクト自体についてのよくある質問は[こちら](./misskey)に掲載されています。
+
+### iOS/Androidのアプリはありますか?
+公式にはそういったOSのネイティブアプリを開発していませんが、サードパーティ製のアプリがいくつかあります。 詳しくは[こちら](./apps)をご覧ください。
+
+ただ、サードパーティ製アプリはどうしても機能への対応が遅れてしまうため、とくに拘りがなければ公式のWebクライアントの利用をおすすめします。 なお、MisskeyのWebクライアントはPWAに対応しているので、ネイティブアプリのように動作させることも可能です。 詳しくは[こちら](todo)をご覧ください。
+
+## 他のサーバーのユーザーをフォローするときは?
+メニューから検索を選び、ユーザー名をホスト込みで入力します。例: `@syuilo@misskey.io`
+
+## Renoteを削除するには?
+Renoteの時刻表示の隣にある「...」を押し、「Renote解除」を選択します。 Renoteについては[こちら](../features/note)をご確認ください。
+
+## URLのプレビューを表示させたくない
+MFMには、そのURLのプレビューを無効にする構文があります。詳細は[MFMチートシート](/mfm-cheat-sheet)をご確認ください。
+
+## カスタム絵文字を追加したい
+運営者のみがカスタム絵文字を追加、編集、削除できます。それらを希望する場合は運営者に依頼してください。
+
+## Botを開発したい
+Misskey APIを利用してBotの開発が可能です。[こちら](../advanced/develop-bot)をご確認ください。
diff --git a/src/docs/ko-KR/general/glossary.md b/src/docs/ko-KR/general/glossary.md
new file mode 100644
index 0000000000..34c798b8e6
--- /dev/null
+++ b/src/docs/ko-KR/general/glossary.md
@@ -0,0 +1,83 @@
+# 用語集
+Misskeyに関する用語集です。
+
+## AcitivityPub
+(読み: あくてぃびてぃぱぶ) 分散型を実現するために用いられるプロトコル(仕様)。このプロトコルに則ってサーバー同士通信を行うことで、連合が行われ、Fediverseを形成しています。
+
+## AiScript
+(読み: あいすくりぷと) Misskey上で使用できるプログラミング言語です。詳細は[こちら。](../advanced/aiscript)
+
+## API
+(読み: えーぴーあい) Misskeyのサーバーが公開している、プログラムからMisskeyを扱うためのインターフェース。詳細は[こちら。](../advanced/api)
+
+## Bot
+(読み: ぼっと) プログラムによって動作しているアカウント。
+
+## CW
+(読み: こんてんつわーにんぐ) Contents Warningの略。ノートの内容を、操作なしには表示しないようにできる機能。主に長大な内容を隠すためや、ネタバレ防止などに使われます。
+
+## Fediverse
+(読み: ふぇでぃばーす) Misskeyを含む様々な分散型ソフトウェアのサーバーで構成されたネットワーク。
+
+## GTL
+グローバルタイムライン(Global TimeLine)の略。タイムラインの詳細は[こちら。](../features/timeline)
+
+## HTL
+ホームタイムライン(Home TimeLine)の略。タイムラインの詳細は[こちら。](../features/timeline)
+
+## LTL
+ローカルタイムライン(Local TimeLine)の略。タイムラインの詳細は[こちら。](../features/timeline)
+
+## MFM
+(読み: えむえふえむ) Misskey Flavored Markdownの略で、Misskey上で使用できるマークアップ言語です。詳細は[こちら。](../features/mfm)
+
+## NSFW
+(読み: のっとせーふふぉーわーく) Not Safe For Workの略。画像を「閲覧注意」扱いにし、操作なしには表示しないようにすることができる機能。
+
+## Renote
+(読み: りのーと) 既にあるノートを引用、もしくはそのノートを新しいノートとして共有する行為、またそれによって作成されたノート。詳細は[こちら。](../features/note)
+
+## STL
+ソーシャルタイムライン(Social TimeLine)の略。タイムラインの詳細は[こちら。](../features/timeline)
+
+## 藍
+(読み: あい) Misskeyの看板娘(公式キャラクター)です。
+
+## アクティブユーザー
+インスタンスにアカウントを作っているユーザーのうち、現在も実際にサービスを利用しているユーザーのこと。
+
+## 인스턴스
+todo
+
+## コントロールパネル
+インスタンスの設定画面のこと。
+
+## 서버
+todo
+
+## 사일런스
+ノートをパブリックな公開範囲で投稿できなくされている状態。モデレーターの判断でユーザーごとに設定されます。詳細は[こちら。](../features/silence)
+
+## 정지
+アカウントが使用不可に設定されている状態。
+
+## 드라이브
+Misskeyにアップロードしたファイルを管理する機能。詳細は[こちら。](../features/drive)
+
+## 노트
+Misskeyに投稿される、文章、ファイル、アンケートなどを含めることができるコンテンツ。詳細は[こちら。](../features/note)
+
+## ミスキスト
+Misskeyを使う人のこと。
+
+## 모더레이터
+スパムの凍結およびサイレンスや不適切な投稿の削除など、コミュニティ運営に関する権限を持つユーザー。
+
+## 리모트
+他サーバーのことを指します。リモートユーザーといったように接頭辞としても使われます。ローカルの逆です。
+
+## ì—°í•©
+サーバー上で作成された情報が他のサーバーに伝わること。
+
+## 로컬
+自サーバーのことを指します。ローカルユーザー、ローカルタイムラインといったように接頭辞としても使われます。リモートの逆です。
diff --git a/src/docs/ko-KR/general/links.md b/src/docs/ko-KR/general/links.md
new file mode 100644
index 0000000000..d6b16856fb
--- /dev/null
+++ b/src/docs/ko-KR/general/links.md
@@ -0,0 +1,5 @@
+# リンク集
+
+## ライブラリ
+- [misskey-dev/misskey.js](https://github.com/misskey-dev/misskey.js) - JavaScriptのMisskey SDK
+- [misskey-dev/mfm.js](https://github.com/misskey-dev/mfm.js) - JavaScriptのMFMパーサー実装
diff --git a/src/docs/ko-KR/general/misskey.md b/src/docs/ko-KR/general/misskey.md
new file mode 100644
index 0000000000..f4ddca5c2b
--- /dev/null
+++ b/src/docs/ko-KR/general/misskey.md
@@ -0,0 +1,87 @@
+# Misskey에 대하여
+
+Misskeyはオープンソースの分散型マイクロブログプラットフォームプロジェクトです。 開発は日本でsyuiloによって2014年から開始されました。 ドライブ、リアクションなどの豊富な機能や、高いカスタマイズ性を備えたUIを持つことが特徴です。
+
+## 歴史
+開発当初は掲示板がメインのサービスでしたが、ユーザーが短文を投稿し、それを時系列で流れるタイムライン機能を追加したところ人気が高まり、徐々にそれがメインとして開発が進むようになりました。 当初は分散型ではありませんでしたが、2018年にAcitivityPubを実装し分散型になったことで、より多くの方に認知され利用されるサービスになり、現在に至ります。
+<div class="info">ℹ️ Misskeyという名前は、syuiloが当時聴いていたMay'nというアーティストの楽曲、Brain Diverの歌詞に由来します。</div>
+
+誰でも開発に参加することができ、現在でも活発に開発が続いています。
+
+## 分散型とは何か?
+
+<b>分散(distributed)型</b>とは、<b>非中央集権(decentralized)</b>とも呼ばれ、コミュニティが多数のサーバーに分散して存在し、それらが相互に<b>通信(連合、federation)</b>することでコンテンツ共有<b>ネットワーク(Fediverse)</b>を形成していることが特徴のサービスです。 単一のサーバーしか存在しない、もしくは複数存在しても互いに独立している場合は中央集権なサービスと言われ、例えばTwitterやFacebookなどほとんどのサービスがそれに該当します。 分散型のメリットは、自分に合った運営者やテーマのサーバーを選択できることです。自分でサーバーを作成することもできます。連合するおかげで、どのサーバーを選んでも、同じコミュニティにアクセスできます。
+
+## 常にオープンソース
+Misskeyはこれまでもこれからも、オープンソースであり続けます。オープンソースとは、簡単に言うと<b>ソフトウェアのソースコード(プログラム)が公開されている</b>ことです。ソースコードの修正や再配布が可能であることを定義に含めることもあります。 Misskeyのすべてのソースコードは[AGPL](https://github.com/misskey-dev/misskey/blob/develop/LICENSE)というオープンソースライセンスの下に[公開](https://github.com/misskey-dev)されていて、誰でも自由に閲覧、使用、修正、改変、再配布をすることができます。 オープンソースは、自分で好きなように変えたり、有害な処理が含まれていないことを確認することができたり、誰でも開発に参加できるなどの、様々なメリットがあります。 上述の分散型を実現するためにも、オープンソースであるということは必要不可欠な要素です。 再び引き合いに出しますが、TwitterやFacebookなどの利益を得ているほとんどのサービスはオープンソースではありません。
+
+<div class="info">ℹ️ 技術的に言うと、MisskeyのソースコードはGitで管理されていて、リポジトリは<a href="https://github.com/misskey-dev" target="_blank">GitHub上でホスティングされています。</a></div>
+
+## 開発に参加する、プロジェクトを支援する
+Misskeyを気に入っていただけたら、ぜひプロジェクトを支援してください。プロジェクトに貢献するには、以下で紹介するようにいろいろな方法があります。方法によっては開発のスキルは不要なので、誰でも気軽に参加し貢献することができます。いつでもお待ちしています。
+
+### 機能を追加したり、バグを修正する
+ソフトウェアエンジニアのスキルをお持ちの方であれば、ソースコードを編集する形でプロジェクトに貢献することができます。 貢献についてのガイドは[こちら](https://github.com/misskey-dev/misskey/blob/develop/CONTRIBUTING.md)です。
+
+### 議論に参加する
+新しい機能、または既存の機能について意見を述べたり、不具合を報告したりすることでも貢献できます。 そのようなディスカッションは[GitHub](https://github.com/misskey-dev)上か、[フォーラム](https://forum.misskey.io/)等で行われます。
+
+### テキストを翻訳する
+Misskeyは様々な言語に対応しています(i18n -internationalizationの略- と呼ばれます)。元の言語は基本的に日本語ですが、有志によって他の言語へと翻訳されています。 その翻訳作業に加わっていただくことでもMisskeyに貢献できます。 Misskeyは[Crowdinというサービスを使用して翻訳の管理を行っています。](https://crowdin.com/project/misskey)
+
+### 感想を投稿する
+不具合報告等だけではなく、Misskeyの良い点、楽しい点といったポジティブな意見もぜひ共有してください。開発の励みになり、それは間接的ですがプロジェクトへの貢献です。
+
+### ミスキストを増やす
+ミスキストとは、Misskeyを使用する人のことです。 知り合いに紹介するなどしてMisskeyを広めていただければ、ミスキストが増え開発のモチベーションが上がります。
+
+### 寄付をする
+Misskeyはビジネスではなく、利用は無料であるため、収益は皆様からの寄付のみです。(インスタンスによっては広告収入を得ているような場合もありますが、それは運営者の収入であり直接開発者への収入にはなりません) 寄付をしていただければ、今後も開発を続けることが可能になり、プロジェクトへの貢献になります。 寄付は基本的には[Patreon](https://www.patreon.com/syuilo)で受け付けています。 一定額寄付していただけると、Misskeyの[情報ページ](/about-misskey)に名前を記載することができます。
+
+また、サーバーの運営者も、基本的には収益を得ていません。サーバーの運営にはコストがかかるので、運営者の支援をすることもご検討ください。 開発には直接関係しませんが、サーバーがあってこそのプロジェクトなので、運営が維持されるというのは開発と同じくらい重要なことです。
+
+## クレジット
+Misskeyの開発者や、Misskeyに寄付をしてくださった方の一覧は[こちら](/about-misskey)で見ることができます。
+
+## よくある質問
+### プロジェクトは何を目指していますか?
+強いて言うと、漠然的になりますが広く使われる汎用的なプラットフォームになることを目指しています。 Misskeyは他のプロジェクトとは違い、何らかの思想(例えば、反中央集権)やビジョンに基づいて開発が行われているわけではなく、その点ではフラットです。 それが逆に、特定の方向性に縛られないフレキシブルさを生み出すことに繋がっていると感じています。
+<!-- TODO: ここにロードマップへのリンク -->
+
+### 企業によって開発されていますか?
+いいえ。Misskeyの開発は個人で行われており、商業的でもないため、特定の企業の関りはありません。 開発メンバーも基本的にはボランティアです。 また、開発に対し企業のスポンサーがつくこともありますが、その場合でもやはり開発は個人のコミュニティが主体です。
+
+### 誰が運営していますか?
+Misskeyは分散型なため、各サーバーにそれぞれ異なった運営者がいます。従って、特定の個人や企業によって、Misskeyの全てが運営されているわけではありません。 また、開発チームが運営を行うわけでもないため、運営に関する連絡は、お使いのサーバーの運営者に行ってください。 サーバーの運営者は、[このページ](/about)で確認することができます。 あなたがサーバーを作成すれば、あなたが運営者になります。
+
+### どのサーバーを選べばいいですか?
+[サーバー一覧が公開されています。](https://join.misskey.page/ja-JP/instances) サーバーによってコミュニティのテーマ(特定のこと、ものが好き 等)が決められている場合があるので、自分に合ったテーマのサーバーがあれば、そこを選ぶと良いかもしれません。 他にも、サーバーの規模、ユーザー層、国および言語、運営者が信頼できるかどうか、などの観点があります。 なお、Misskey公式のサーバーというものはありません。自身で新しくサーバーを作成するという選択肢もあります。
+
+基本的にどのサーバーを選んだとしても、他の全てのサーバーのユーザーと繋がることができます。
+
+### サーバーを建てるにはどうしたらいいですか?
+Misskeyサーバーの作成に興味を持っていただきありがとうございます。 2021年現在、Misskeyのホスティングサービスは存在しないため、サーバーの作成にはある程度の知識が必要です。 サーバーの作成方法については[こちら](todo)をご覧ください。
+
+### どのような技術を使用していますか?
+Misskeyは開発が進むにつれ使用する技術も大きく変わってきました。開発当初はMySQL + PHP + jQueryといった構成でしたが、現在は以下のようになっています。
+- サーバーサイド: Node.js
+- データベース: PostgreSQL、Redis
+- UIフレームワーク: Vue.js
+- プログラミング言語: TypeScript
+
+また、MFMやAiScriptなどの、Misskeyから派生して独自の技術も開発しています。
+
+### Mastodonのフォークですか?
+いいえ。MisskeyはMastodonやその他のプロジェクトとは全く別のプロジェクトです。 開発に関しても、Misskeyの方が昔から開発されています。ただし、分散型になったのはMastodonの登場より後です。 同じAcitivityPubという分散のためのプロトコルを実装しているという点以外、両者に特に関りがあるわけでもありません。
+
+### iOS/Androidのアプリはありますか?
+公式にはそういったOSのネイティブアプリを開発していませんが、サードパーティ製のアプリがいくつかあります。 詳しくは[こちら](./apps)をご覧ください。
+
+ただ、サードパーティ製アプリはどうしても機能への対応が遅れてしまうため、とくに拘りがなければ公式のWebクライアントの利用をおすすめします。 なお、MisskeyのWebクライアントはPWAに対応しているので、ネイティブアプリのように動作させることも可能です。 詳しくは[こちら](todo)をご覧ください。
+
+### Misskeyのロゴ、アイコンはどこで入手できますか?
+(準備中)
+
+### 時折目にする猫耳の可愛い女の子は?
+Misskeyの守り神、藍ちゃんです。アイチャンカワイイヤッター!
+<div class="info">ℹ️ 藍ちゃんについては<a href="https://xn--931a.moe/" target="_blank">こちら</a>です。</div>
diff --git a/src/docs/ko-KR/general/report-issue.md b/src/docs/ko-KR/general/report-issue.md
new file mode 100644
index 0000000000..63527e32af
--- /dev/null
+++ b/src/docs/ko-KR/general/report-issue.md
@@ -0,0 +1,8 @@
+# 不具合の報告
+不具合と思われる状況に遭遇したときは、まず[トラブルシューティング](./troubleshooting)をご一読ください。 それでも問題が解決しないときは、以下の情報を含めて[フォーラム](https://forum.misskey.io/)に投稿してください。 投稿することで、解決策が見つかったり、不具合と判断されれば開発チームによって修正が行われます。
+
+## 含める情報
+- Misskeyのバージョン([情報ページ](/about)で確認できます)
+- お使いのブラウザの種類とバージョン
+- お使いのOSの種類とバージョン
+- 問題の再現手順
diff --git a/src/docs/ko-KR/general/troubleshooting.md b/src/docs/ko-KR/general/troubleshooting.md
new file mode 100644
index 0000000000..d3c1c01957
--- /dev/null
+++ b/src/docs/ko-KR/general/troubleshooting.md
@@ -0,0 +1,36 @@
+# 트러블 슈팅
+<div class="info">ℹ️ <a href="./faq">よくある質問</a>も合わせてお役立てください。</div>
+
+問題が発生したときは、まずこちらをご確認ください。 該当する項目が無い、もしくは手順を試しても効果がない場合は、サーバーの管理者に連絡するか[不具合を報告](./report-issue)してください。
+
+## クライアントが起動しない
+ほとんどの場合、お使いのブラウザまたはOSのバージョンが古いことが原因です。 ブラウザおよびOSのバージョンを最新のものに更新してから、再度試してみてください。
+
+これは稀ですが、それでも起動しない場合は、キャッシュが原因の場合があります。ブラウザのキャッシュをクリアして、再度試してみてください。
+
+## ページが読み込めない
+クライアントが起動するもののページが読み込めないというエラーが出る場合は、ネットワークに問題がないか確認してください。また、サーバーがダウンしていないか確認してください。
+
+これは稀ですが、キャッシュが原因の場合があります。ブラウザのキャッシュをクリアして、再度試してみてください。
+
+まだ問題がある場合は、サーバーの問題と思われるのでサーバーの管理者に連絡してください。
+
+## クライアントの動作が遅い
+以下を試してみてください:
+
+- クライアント設定で「UIのアニメーションを減らす」を有効にする
+- クライアント設定で「モーダルにぼかし効果を使用」を無効にする
+- お使いのブラウザの設定でハードウェアアクセラレーションを有効にする
+- お使いのデバイスのスペックを上げる
+
+## 通知やアンテナ等の点滅が消えない
+点滅は、未読のコンテンツがあることを示しています。通常点滅が消えない場合は、コンテンツを遡ると未読なコンテンツが残っています。 すべて既読にしたと思われるのに、それでもなお点滅が続く場合(おそらく不具合と思われます)は設定から強制的にすべて既読扱いにすることができます。
+
+## Renoteができない
+フォロワー限定のノートはRenoteすることはできません。
+
+## UI上で特定の要素が表示されない
+広告ブロッカーを使用しているとそのような不具合が発生することがあります。Misskeyではオフにしてご利用ください。
+
+## UI上で未翻訳の部分がある
+ほとんどの場合、単に翻訳が間に合っていないだけで、不具合ではありません。翻訳が終わるまでお待ちください。 [翻訳に参加](./misskey)していただくことも可能です。
diff --git a/src/docs/nl-NL/admin/disable-timelines.md b/src/docs/nl-NL/admin/disable-timelines.md
new file mode 100644
index 0000000000..b081e35ab0
--- /dev/null
+++ b/src/docs/nl-NL/admin/disable-timelines.md
@@ -0,0 +1,8 @@
+# LTL/STL/GTLの無効化
+Misskeyでは、LTL/STL/GTLをそれぞれ無効化することができます。有効/無効を切り替えるには、インスタンスコントロールパネルで設定します。
+
+LTLやSTLは、そのインスタンス全員の投稿が見れるため、新規のユーザーにとってはユーザーを探す必要がなくなり、興味のあるユーザーを見つけやすいという利点があります。 しかし同時に、フォロー機能が活用されなくなったり、不適切な投稿が目につきやすくなったり、チャットのようになることで内輪感が生じて逆に新規ユーザーが参加しにくくなるといったデメリットも持ち合わせています。 サーバーによってメリット/デメリットどちらが優勢かは異なるので、オプションとして無効にできるようになっています。 もしデメリットの方が上回っていると感じたら、それらのタイムラインを無効化することも検討してください。
+
+<div class="warn">⚠️ 無効化を行うと、ユーザーが困惑し、短期的に見て利用者が減る可能性があります。そのため、無効化の際は影響を慎重に検討し、事前に説明してフォローを整える期間を一定程度設けることを推奨します。</div>
+
+なお、管理者/モデレーターは、これらのタイムラインの無効化状態は適用されず、引き続き利用することが可能です。
diff --git a/src/docs/nl-NL/admin/faq.md b/src/docs/nl-NL/admin/faq.md
new file mode 100644
index 0000000000..317b4e0655
--- /dev/null
+++ b/src/docs/nl-NL/admin/faq.md
@@ -0,0 +1,5 @@
+# よくある質問
+ここでは、サーバー管理者向けのよくある質問を掲載しています。
+
+## デフォルトテーマを設定したい
+現在、デフォルトテーマ設定機能は実装されていません。
diff --git a/src/docs/nl-NL/advanced/aiscript.md b/src/docs/nl-NL/advanced/aiscript.md
new file mode 100644
index 0000000000..604d17daa8
--- /dev/null
+++ b/src/docs/nl-NL/advanced/aiscript.md
@@ -0,0 +1,7 @@
+# AiScript
+AiScriptは、Misskeyで使用できるスクリプト言語です。
+
+<div class="info">ℹ️ AiScript実装はMisskeyとは別リポジトリで、<a href="https://github.com/syuilo/aiscript" target="_blank">オープンソースで公開されています。</a></div>
+
+## 使い方
+AiScriptの構文や組み込み関数などのドキュメントは、[こちら](https://github.com/syuilo/aiscript/tree/master/docs)で公開されています。
diff --git a/src/docs/nl-NL/advanced/api.md b/src/docs/nl-NL/advanced/api.md
new file mode 100644
index 0000000000..76019b6145
--- /dev/null
+++ b/src/docs/nl-NL/advanced/api.md
@@ -0,0 +1,58 @@
+# Misskey API
+
+MisskeyAPIを使ってMisskeyクライアント、Misskey連携Webサービス、Bot等(以下「アプリケーション」と呼びます)を開発できます。 ストリーミングAPIもあるので、リアルタイム性のあるアプリケーションを作ることも可能です。
+
+APIを使い始めるには、まずアクセストークンを取得する必要があります。 このドキュメントでは、アクセストークンを取得する手順を説明した後、基本的なAPIの使い方を説明します。
+
+## アクセストークンの取得
+基本的に、APIはリクエストにはアクセストークンが必要となります。 APIにリクエストするのが自分自身なのか、不特定の利用者に使ってもらうアプリケーションなのかによって取得手順は異なります。
+
+* 前者の場合: [「自分自身のアクセストークンを手動発行する」](#自分自身のアクセストークンを手動発行する)に進む
+* 後者の場合: [「アプリケーション利用者にアクセストークンの発行をリクエストする」](#アプリケーション利用者にアクセストークンの発行をリクエストする)に進む
+
+### 自分自身のアクセストークンを手動発行する
+「設定 > API」で、自分のアクセストークンを発行できます。
+
+[「APIの使い方」へ進む](#APIの使い方)
+
+### アプリケーション利用者にアクセストークンの発行をリクエストする
+アプリケーション利用者のアクセストークンを取得するには、以下の手順で発行をリクエストします。
+
+#### Step 1
+
+UUIDを生成する。以後これをセッションIDと呼びます。
+
+> このセッションIDは毎回生成し、使いまわさないようにしてください。
+
+#### Step 2
+
+`{_URL_}/miauth/{session}`をユーザーのブラウザで表示させる。`{session}`の部分は、セッションIDに置き換えてください。
+> 例: `{_URL_}/miauth/c1f6d42b-468b-4fd2-8274-e58abdedef6f`
+
+表示する際、URLにクエリパラメータとしていくつかのオプションを設定できます:
+* `name` ... アプリケーション名
+    * > 例: `MissDeck`
+* `icon` ... アプリケーションのアイコン画像URL
+    * > 例: `https://missdeck.example.com/icon.png`
+* `callback` ... 認証が終わった後にリダイレクトするURL
+    * > 例: `https://missdeck.example.com/callback`
+    * リダイレクト時には、`session`というクエリパラメータでセッションIDが付きます
+* `permission` ... アプリケーションが要求する権限
+    * > 例: `write:notes,write:following,read:drive`
+    * 要求する権限を`,`で区切って列挙します
+    * どのような権限があるかは[APIリファレンス](/api-doc)で確認できます
+
+#### Step 3
+ユーザーが発行を許可した後、`{_URL_}/api/miauth/{session}/check`にPOSTリクエストすると、レスポンスとしてアクセストークンを含むJSONが返ります。
+
+レスポンスに含まれるプロパティ:
+* `token` ... ユーザーのアクセストークン
+* `user` ... ユーザーの情報
+
+[「APIの使い方」へ進む](#APIの使い方)
+
+## APIの使い方
+**APIはすべてPOSTで、リクエスト/レスポンスともにJSON形式です。RESTではありません。** アクセストークンは、`i`というパラメータ名でリクエストに含めます。
+
+* [APIリファレンス](/api-doc)
+* [ストリーミングAPI](./stream)
diff --git a/src/docs/nl-NL/advanced/create-plugin.md b/src/docs/nl-NL/advanced/create-plugin.md
new file mode 100644
index 0000000000..0d2fa19178
--- /dev/null
+++ b/src/docs/nl-NL/advanced/create-plugin.md
@@ -0,0 +1,74 @@
+# プラグインの作成
+Misskey Webクライアントのプラグイン機能を使うと、クライアントを拡張し、様々な機能を追加できます。 ここではプラグインの作成にあたってのメタデータ定義や、AiScript APIリファレンスを掲載します。
+
+## メタデータ
+プラグインは、AiScriptのメタデータ埋め込み機能を使って、デフォルトとしてプラグインのメタデータを定義する必要があります。 メタデータは次のプロパティを含むオブジェクトです。
+
+### name
+プラグイン名
+
+### author
+プラグイン作者
+
+### version
+プラグインバージョン。数値を指定してください。
+
+### description
+プラグインの説明
+
+### permissions
+プラグインが要求する権限。MisskeyAPIにリクエストする際に用いられます。
+
+### config
+プラグインの設定情報を表すオブジェクト。 キーに設定名、値に以下のプロパティを含めます。
+
+#### type
+設定値の種類を表す文字列。以下から選択します。 string number boolean
+
+#### label
+ユーザーに表示する設定名
+
+#### description
+設定の説明
+
+#### default
+設定のデフォルト値
+
+## APIリファレンス
+AiScript標準で組み込まれているAPIは掲載しません。
+
+### Mk:dialog(title text type)
+ダイアログを表示します。typeには以下の値が設定できます。 info success warn error question 省略すると info になります。
+
+### Mk:confirm(title text type)
+確認ダイアログを表示します。typeには以下の値が設定できます。 info success warn error question 省略すると question になります。 ユーザーが"OK"を選択した場合は true を、"キャンセル"を選択した場合は false が返ります。
+
+### Mk:api(endpoint params)
+Misskey APIにリクエストします。第一引数にエンドポイント名、第二引数にパラメータオブジェクトを渡します。
+
+### Mk:save(key value)
+任意の値に任意の名前を付けて永続化します。永続化した値は、AiScriptコンテキストが終了しても残り、Mk:loadで読み取ることができます。
+
+### Mk:load(key)
+Mk:saveで永続化した指定の名前の値を読み取ります。
+
+### Plugin:register_post_form_action(title fn)
+投稿フォームにアクションを追加します。第一引数にアクション名、第二引数にアクションが選択された際のコールバック関数を渡します。 コールバック関数には、第一引数に投稿フォームオブジェクトが渡されます。
+
+### Plugin:register_note_action(title fn)
+ノートメニューに項目を追加します。第一引数に項目名、第二引数に項目が選択された際のコールバック関数を渡します。 コールバック関数には、第一引数に対象のノートオブジェクトが渡されます。
+
+### Plugin:register_user_action(title fn)
+ユーザーメニューに項目を追加します。第一引数に項目名、第二引数に項目が選択された際のコールバック関数を渡します。 コールバック関数には、第一引数に対象のユーザーオブジェクトが渡されます。
+
+### Plugin:register_note_view_interruptor(fn)
+UIに表示されるノート情報を書き換えます。 コールバック関数には、第一引数に対象のノートオブジェクトが渡されます。 コールバック関数の返り値でノートが書き換えられます。
+
+### Plugin:register_note_post_interruptor(fn)
+ノート投稿時にノート情報を書き換えます。 コールバック関数には、第一引数に対象のノートオブジェクトが渡されます。 コールバック関数の返り値でノートが書き換えられます。
+
+### Plugin:open_url(url)
+第一引数に渡されたURLをブラウザの新しいタブで開きます。
+
+### Plugin:config
+プラグインの設定が格納されるオブジェクト。プラグイン定義のconfigで設定したキーで値が入ります。
diff --git a/src/docs/nl-NL/advanced/develop-bot.md b/src/docs/nl-NL/advanced/develop-bot.md
new file mode 100644
index 0000000000..7f825e9bc4
--- /dev/null
+++ b/src/docs/nl-NL/advanced/develop-bot.md
@@ -0,0 +1,6 @@
+# Botの作成
+[Misskey API](./api)を利用してBotの開発が可能です。 また、いくつかのBot実装が公開されているため、ぜひ参考にしてください。
+
+- [syuilo/ai](https://github.com/syuilo/ai) ... Node.js上で動く、TypeScript製Bot実装
+
+Botを作成したときは、プロフィール設定からBotフラグをオンにしておくことを強くおすすめします。
diff --git a/src/docs/nl-NL/advanced/reversi-bot.md b/src/docs/nl-NL/advanced/reversi-bot.md
new file mode 100644
index 0000000000..7ab2a7212e
--- /dev/null
+++ b/src/docs/nl-NL/advanced/reversi-bot.md
@@ -0,0 +1,160 @@
+# MisskeyリバーシBotの開発
+Misskeyのリバーシ機能に対応したBotの開発方法をここに記します。
+
+1. `games/reversi`ストリームに以下のパラメータを付けて接続する:
+    * `i`: botアカウントのAPIキー
+
+2. 対局への招待が来たら、ストリームから`invited`イベントが流れてくる
+    * イベントの中身に、`parent`という名前で対局へ誘ってきたユーザーの情報が含まれている
+
+3. `games/reversi/match`へ、`user_id`として`parent`の`id`が含まれたリクエストを送信する
+
+4. 上手くいくとゲーム情報が返ってくるので、`games/reversi-game`ストリームへ、以下のパラメータを付けて接続する:
+    * `i`: botアカウントのAPIキー
+    * `game`: `game`の`id`
+
+5. この間、相手がゲームの設定を変更するとその都度`update-settings`イベントが流れてくるので、必要であれば何かしらの処理を行う
+
+6. 設定に満足したら、`{ type: 'accept' }`メッセージをストリームに送信する
+
+7. ゲームが開始すると、`started`イベントが流れてくる
+    * イベントの中身にはゲーム情報が含まれている
+
+8. 石を打つには、ストリームに`{ type: 'set', pos: <位置> }`を送信する(位置の計算方法は後述)
+
+9. 相手または自分が石を打つと、ストリームから`set`イベントが流れてくる
+    * `color`として石の色が含まれている
+    * `pos`として位置情報が含まれている
+
+## 位置の計算法
+8x8のマップを考える場合、各マスの位置(インデックスと呼びます)は次のようになっています:
+```
++--+--+--+--+--+--+--+--+
+| 0| 1| 2| 3| 4| 5| 6| 7|
++--+--+--+--+--+--+--+--+
+| 8| 9|10|11|12|13|14|15|
++--+--+--+--+--+--+--+--+
+|16|17|18|19|20|21|22|23|
+...
+```
+
+### X,Y座標 から インデックス に変換する
+```
+pos = x + (y * mapWidth)
+```
+`mapWidth`は、ゲーム情報の`map`から、次のようにして計算できます:
+```
+mapWidth = map[0].length
+```
+
+### インデックス から X,Y座標 に変換する
+```
+x = pos % mapWidth
+y = Math.floor(pos / mapWidth)
+```
+
+## マップ情報
+マップ情報は、ゲーム情報の`map`に入っています。 文字列の配列になっており、ひとつひとつの文字がマス情報を表しています。 それをもとにマップのデザインを知る事が出来ます:
+* `(スペース)` ... マス無し
+* `-` ... マス
+* `b` ... 初期配置される黒石
+* `w` ... 初期配置される白石
+
+例えば、4*4の次のような単純なマップがあるとします:
+```text
++---+---+---+---+
+|   |   |   |   |
++---+---+---+---+
+|   | ○ | ● |   |
++---+---+---+---+
+|   | ● | ○ |   |
++---+---+---+---+
+|   |   |   |   |
++---+---+---+---+
+```
+
+この場合、マップデータはこのようになります:
+```javascript
+['----', '-wb-', '-bw-', '----']
+```
+
+## ユーザーにフォームを提示して対話可能Botを作成する
+ユーザーとのコミュニケーションを行うため、ゲームの設定画面でユーザーにフォームを提示することができます。 例えば、Botの強さをユーザーが設定できるようにする、といったシナリオが考えられます。
+
+フォームを提示するには、`reversi-game`ストリームに次のメッセージを送信します:
+```javascript
+{
+  type: 'init-form',
+  body: [フォームコントロールの配列]
+}
+```
+
+フォームコントロールの配列については今から説明します。 フォームコントロールは、次のようなオブジェクトです:
+```javascript
+{
+  id: 'switch1',
+  type: 'switch',
+  label: 'Enable hoge',
+  value: false
+}
+```
+`id` ... コントロールのID。 `type` ... コントロールの種類。後述します。 `label` ... コントロールと一緒に表記するテキスト。 `value` ... コントロールのデフォルト値。
+
+### フォームの操作を受け取る
+ユーザーがフォームを操作すると、ストリームから`update-form`イベントが流れてきます。 イベントの中身には、コントロールのIDと、ユーザーが設定した値が含まれています。 例えば、上で示したスイッチをユーザーがオンにしたとすると、次のイベントが流れてきます:
+```javascript
+{
+  id: 'switch1',
+  value: true
+}
+```
+
+### フォームコントロールの種類
+#### スイッチ
+type: `switch` スイッチを表示します。何かの機能をオン/オフさせたい場合に有用です。
+
+##### プロパティ
+`label` ... スイッチに表記するテキスト。
+
+#### ラジオボタン
+type: `radio` ラジオボタンを表示します。選択肢を提示するのに有用です。例えば、Botの強さを設定させるなどです。
+
+##### プロパティ
+`items` ... ラジオボタンの選択肢。例:
+```javascript
+items: [{
+  label: 'å¼±',
+  value: 1
+}, {
+  label: '中',
+  value: 2
+}, {
+  label: 'å¼·',
+  value: 3
+}]
+```
+
+#### スライダー
+type: `slider` スライダーを表示します。
+
+##### プロパティ
+`min` ... スライダーの下限。 `max` ... スライダーの上限。 `step` ... 入力欄で刻むステップ値。
+
+#### テキストボックス
+type: `textbox` テキストボックスを表示します。ユーザーになにか入力させる一般的な用途に利用できます。
+
+## ユーザーにメッセージを表示する
+設定画面でユーザーと対話する、フォーム以外のもうひとつの方法がこれです。ユーザーになにかメッセージを表示することができます。 例えば、ユーザーがBotの対応していないモードやマップを選択したとき、警告を表示するなどです。 メッセージを表示するには、次のメッセージをストリームに送信します:
+```javascript
+{
+  type: 'message',
+  body: {
+    text: 'メッセージ内容',
+    type: 'メッセージの種類'
+  }
+}
+```
+メッセージの種類: `success`, `info`, `warning`, `error`。
+
+## 投了する
+投了をするには、<a href="./api/endpoints/games/reversi/games/surrender">このエンドポイント</a>にリクエストします。
diff --git a/src/docs/nl-NL/advanced/stream.md b/src/docs/nl-NL/advanced/stream.md
new file mode 100644
index 0000000000..0e5edd2b0c
--- /dev/null
+++ b/src/docs/nl-NL/advanced/stream.md
@@ -0,0 +1,350 @@
+# ストリーミングAPI
+
+ストリーミングAPIを使うと、リアルタイムで様々な情報(例えばタイムラインに新しい投稿が流れてきた、メッセージが届いた、フォローされた、など)を受け取ったり、様々な操作を行ったりすることができます。
+
+## ストリームに接続する
+
+ストリーミングAPIを利用するには、まずMisskeyサーバーに**websocket**接続する必要があります。
+
+以下のURLに、`i`というパラメータ名で認証情報を含めて、websocket接続してください。例:
+```
+%WS_URL%/streaming?i=xxxxxxxxxxxxxxx
+```
+
+認証情報は、自分のAPIキーや、アプリケーションからストリームに接続する際はユーザーのアクセストークンのことを指します。
+
+<div class="info">ℹ️ 認証情報の取得については、<a href="./api">こちらのドキュメント</a>をご確認ください。</div>
+
+---
+
+認証情報は省略することもできますが、その場合非ログインでの利用ということになり、受信できる情報や可能な操作は限られます。例:
+
+```
+%WS_URL%/streaming
+```
+
+---
+
+ストリームに接続すると、後述するAPI操作や、投稿の購読を行ったりすることができます。 しかしまだこの段階では、例えばタイムラインへの新しい投稿を受信したりすることはできません。 それを行うには、ストリーム上で、後述する**チャンネル**に接続する必要があります。
+
+**ストリームでのやり取りはすべてJSONです。**
+
+## チャンネル
+MisskeyのストリーミングAPIにはチャンネルという概念があります。これは、送受信する情報を分離するための仕組みです。 Misskeyのストリームに接続しただけでは、まだリアルタイムでタイムラインの投稿を受信したりはできません。 ストリーム上でチャンネルに接続することで、様々な情報を受け取ったり情報を送信したりすることができるようになります。
+
+ひとつのストリーム上で、同時に複数のチャンネルに接続することができます。
+
+### チャンネルに接続する
+チャンネルに接続するには、次のようなデータをJSONでストリームに送信します:
+
+```json
+{
+    type: 'connect',
+    body: {
+        channel: 'xxxxxxxx',
+        id: 'foobar',
+        params: {
+            ...
+        }
+    }
+}
+```
+
+ここで、
+* `channel`には接続したいチャンネル名を設定します。チャンネルの種類については後述します。
+* `id`にはそのチャンネルとやり取りするための任意のIDを設定します。ストリームでは様々なメッセージが流れるので、そのメッセージがどのチャンネルからのものなのか識別する必要があるからです。このIDは、UUIDや、乱数のようなもので構いません。
+* `params`はチャンネルに接続する際のパラメータです。チャンネルによって接続時に必要とされるパラメータは異なります。パラメータ不要のチャンネルに接続する際は、このプロパティは省略可能です。
+
+<div class="info">ℹ️ IDはチャンネルごとではなく「チャンネルの接続ごと」です。なぜなら、同じチャンネルに異なるパラメータで複数接続するケースもあるからです。</div>
+
+### チャンネルからのメッセージを受け取る
+例えばタイムラインのチャンネルなら、新しい投稿があった時にメッセージを発します。そのメッセージを受け取ることで、タイムラインに新しい投稿がされたことをリアルタイムで知ることができます。
+
+チャンネルがメッセージを発すると、次のようなデータがJSONでストリームに流れてきます:
+```json
+{
+    type: 'channel',
+    body: {
+        id: 'foobar',
+        type: 'something',
+        body: {
+            some: 'thing'
+        }
+    }
+}
+```
+
+ここで、
+* `id`には前述したそのチャンネルに接続する際に設定したIDが設定されています。これで、このメッセージがどのチャンネルからのものなのか知ることができます。
+* `type`にはメッセージの種類が設定されます。チャンネルによって、どのような種類のメッセージが流れてくるかは異なります。
+* `body`にはメッセージの内容が設定されます。チャンネルによって、どのような内容のメッセージが流れてくるかは異なります。
+
+### チャンネルに向けてメッセージを送信する
+チャンネルによっては、メッセージを受け取るだけでなく、こちらから何かメッセージを送信し、何らかの操作を行える場合があります。
+
+チャンネルにメッセージを送信するには、次のようなデータをJSONでストリームに送信します:
+```json
+{
+    type: 'channel',
+    body: {
+        id: 'foobar',
+        type: 'something',
+        body: {
+            some: 'thing'
+        }
+    }
+}
+```
+
+ここで、
+* `id`には前述したそのチャンネルに接続する際に設定したIDを設定します。これで、このメッセージがどのチャンネルに向けたものなのか識別させることができます。
+* `type`にはメッセージの種類を設定します。チャンネルによって、どのような種類のメッセージを受け付けるかは異なります。
+* `body`にはメッセージの内容を設定します。チャンネルによって、どのような内容のメッセージを受け付けるかは異なります。
+
+### チャンネルから切断する
+チャンネルから切断するには、次のようなデータをJSONでストリームに送信します:
+
+```json
+{
+    type: 'disconnect',
+    body: {
+        id: 'foobar'
+    }
+}
+```
+
+ここで、
+* `id`には前述したそのチャンネルに接続する際に設定したIDを設定します。
+
+## ストリームを経由してAPIリクエストする
+
+ストリームを経由してAPIリクエストすると、HTTPリクエストを発生させずにAPIを利用できます。そのため、コードを簡潔にできたり、パフォーマンスの向上を見込めるかもしれません。
+
+ストリームを経由してAPIリクエストするには、次のようなデータをJSONでストリームに送信します:
+```json
+{
+    type: 'api',
+    body: {
+        id: 'xxxxxxxxxxxxxxxx',
+        endpoint: 'notes/create',
+        data: {
+            text: 'yee haw!'
+        }
+    }
+}
+```
+
+ここで、
+* `id`には、APIのレスポンスを識別するための、APIリクエストごとの一意なIDを設定する必要があります。UUIDや、簡単な乱数のようなもので構いません。
+* `endpoint`には、あなたがリクエストしたいAPIのエンドポイントを指定します。
+* `data`には、エンドポイントのパラメータを含めます。
+
+<div class="info">ℹ️ APIのエンドポイントやパラメータについてはAPIリファレンスをご確認ください。</div>
+
+### レスポンスの受信
+
+APIへリクエストすると、レスポンスがストリームから次のような形式で流れてきます。
+
+```json
+{
+    type: 'api:xxxxxxxxxxxxxxxx',
+    body: {
+        ...
+    }
+}
+```
+
+ここで、
+* `xxxxxxxxxxxxxxxx`の部分には、リクエストの際に設定された`id`が含まれています。これにより、どのリクエストに対するレスポンスなのか判別することができます。
+* `body`には、レスポンスが含まれています。
+
+## 投稿のキャプチャ
+
+Misskeyは投稿のキャプチャと呼ばれる仕組みを提供しています。これは、指定した投稿のイベントをストリームで受け取る機能です。
+
+例えばタイムラインを取得してユーザーに表示したとします。ここで誰かがそのタイムラインに含まれるどれかの投稿に対してリアクションしたとします。
+
+しかし、クライアントからするとある投稿にリアクションが付いたことなどは知る由がないため、リアルタイムでリアクションをタイムライン上の投稿に反映して表示するといったことができません。
+
+この問題を解決するために、Misskeyは投稿のキャプチャ機構を用意しています。投稿をキャプチャすると、その投稿に関するイベントを受け取ることができるため、リアルタイムでリアクションを反映させたりすることが可能になります。
+
+### 投稿をキャプチャする
+
+投稿をキャプチャするには、ストリームに次のようなメッセージを送信します:
+
+```json
+{
+    type: 'subNote',
+    body: {
+        id: 'xxxxxxxxxxxxxxxx'
+    }
+}
+```
+
+ここで、
+* `id`にキャプチャしたい投稿の`id`を設定します。
+
+このメッセージを送信すると、Misskeyにキャプチャを要請したことになり、以後、その投稿に関するイベントが流れてくるようになります。
+
+例えば投稿にリアクションが付いたとすると、次のようなメッセージが流れてきます:
+
+```json
+{
+    type: 'noteUpdated',
+    body: {
+        id: 'xxxxxxxxxxxxxxxx',
+        type: 'reacted',
+        body: {
+            reaction: 'like',
+            userId: 'yyyyyyyyyyyyyyyy'
+        }
+    }
+}
+```
+
+ここで、
+* `body`内の`id`に、イベントを発生させた投稿のIDが設定されます。
+* `body`内の`type`に、イベントの種類が設定されます。
+* `body`内の`body`に、イベントの詳細が設定されます。
+
+#### イベントの種類
+
+##### `reacted`
+その投稿にリアクションがされた時に発生します。
+
+* `reaction`に、リアクションの種類が設定されます。
+* `userId`に、リアクションを行ったユーザーのIDが設定されます。
+
+例:
+```json
+{
+    type: 'noteUpdated',
+    body: {
+        id: 'xxxxxxxxxxxxxxxx',
+        type: 'reacted',
+        body: {
+            reaction: 'like',
+            userId: 'yyyyyyyyyyyyyyyy'
+        }
+    }
+}
+```
+
+##### `deleted`
+その投稿が削除された時に発生します。
+
+* `deletedAt`に、削除日時が設定されます。
+
+例:
+```json
+{
+    type: 'noteUpdated',
+    body: {
+        id: 'xxxxxxxxxxxxxxxx',
+        type: 'deleted',
+        body: {
+            deletedAt: '2018-10-22T02:17:09.703Z'
+        }
+    }
+}
+```
+
+##### `pollVoted`
+その投稿に添付されたアンケートに投票された時に発生します。
+
+* `choice`に、選択肢IDが設定されます。
+* `userId`に、投票を行ったユーザーのIDが設定されます。
+
+例:
+```json
+{
+    type: 'noteUpdated',
+    body: {
+        id: 'xxxxxxxxxxxxxxxx',
+        type: 'pollVoted',
+        body: {
+            choice: 2,
+            userId: 'yyyyyyyyyyyyyyyy'
+        }
+    }
+}
+```
+
+### 投稿のキャプチャを解除する
+
+その投稿がもう画面に表示されなくなったりして、その投稿に関するイベントをもう受け取る必要がなくなったときは、キャプチャの解除を申請してください。
+
+次のメッセージを送信します:
+
+```json
+{
+    type: 'unsubNote',
+    body: {
+        id: 'xxxxxxxxxxxxxxxx'
+    }
+}
+```
+
+ここで、
+* `id`にキャプチャを解除したい投稿の`id`を設定します。
+
+このメッセージを送信すると、以後、その投稿に関するイベントは流れてこないようになります。
+
+# チャンネル一覧
+## `main`
+アカウントに関する基本的な情報が流れてきます。このチャンネルにパラメータはありません。
+
+### 流れてくるイベント一覧
+
+#### `renote`
+自分の投稿がRenoteされた時に発生するイベントです。自分自身の投稿をRenoteしたときは発生しません。
+
+#### `mention`
+誰かからメンションされたときに発生するイベントです。
+
+#### `readAllNotifications`
+自分宛ての通知がすべて既読になったことを表すイベントです。このイベントを利用して、「通知があることを示すアイコン」のようなものをオフにしたりする等のケースが想定されます。
+
+#### `meUpdated`
+自分の情報が更新されたことを表すイベントです。
+
+#### `follow`
+自分が誰かをフォローしたときに発生するイベントです。
+
+#### `unfollow`
+自分が誰かのフォローを解除したときに発生するイベントです。
+
+#### `followed`
+自分が誰かにフォローされたときに発生するイベントです。
+
+## `homeTimeline`
+ホームタイムラインの投稿情報が流れてきます。このチャンネルにパラメータはありません。
+
+### 流れてくるイベント一覧
+
+#### `note`
+タイムラインに新しい投稿が流れてきたときに発生するイベントです。
+
+## `localTimeline`
+ローカルタイムラインの投稿情報が流れてきます。このチャンネルにパラメータはありません。
+
+### 流れてくるイベント一覧
+
+#### `note`
+ローカルタイムラインに新しい投稿が流れてきたときに発生するイベントです。
+
+## `hybridTimeline`
+ソーシャルタイムラインの投稿情報が流れてきます。このチャンネルにパラメータはありません。
+
+### 流れてくるイベント一覧
+
+#### `note`
+ソーシャルタイムラインに新しい投稿が流れてきたときに発生するイベントです。
+
+## `globalTimeline`
+グローバルタイムラインの投稿情報が流れてきます。このチャンネルにパラメータはありません。
+
+### 流れてくるイベント一覧
+
+#### `note`
+グローバルタイムラインに新しい投稿が流れてきたときに発生するイベントです。
diff --git a/src/docs/nl-NL/features/antenna.md b/src/docs/nl-NL/features/antenna.md
new file mode 100644
index 0000000000..94ad9e4aea
--- /dev/null
+++ b/src/docs/nl-NL/features/antenna.md
@@ -0,0 +1,4 @@
+# アンテナ
+アンテナは、自由に条件を設定して、合致するノートを自動で収集することができる機能です。
+
+条件を設定したアンテナが作成された状態で、条件に合致するノートが投稿されると、リアルタイムでそのアンテナのタイムラインにノートが追加されます。
diff --git a/src/docs/nl-NL/features/custom-emoji.md b/src/docs/nl-NL/features/custom-emoji.md
new file mode 100644
index 0000000000..ed2e92be16
--- /dev/null
+++ b/src/docs/nl-NL/features/custom-emoji.md
@@ -0,0 +1,2 @@
+# カスタム絵文字
+カスタム絵文字は、インスタンスで用意された画像を絵文字のように使える機能です。 ノート、リアクション、チャット、自己紹介、名前などの場所で使うことができます。 カスタム絵文字をそれらの場所で使うには、絵文字ピッカーボタン(ある場合)を押すか、`:`を入力して絵文字サジェストを表示します。 テキスト内に`:foo:`のような形式の文字列が見つかると、`foo`の部分がカスタム絵文字名と解釈され、表示時には対応したカスタム絵文字に置き換わります。
diff --git a/src/docs/nl-NL/features/deck.md b/src/docs/nl-NL/features/deck.md
new file mode 100644
index 0000000000..8057e262fd
--- /dev/null
+++ b/src/docs/nl-NL/features/deck.md
@@ -0,0 +1,18 @@
+# デッキ
+
+デッキは利用可能なUIのひとつです。「カラム」と呼ばれるビューを複数並べて表示させることで、カスタマイズ性が高く、情報量の多いUIが構築できることが特徴です。
+
+## カラムの追加
+デッキの背景を右クリックし、「カラムを追加」して任意のカラムを追加できます。
+
+## カラムの移動
+カラムは、ドラッグアンドドロップで他のカラムと位置を入れ替えることが出来るほか、カラムメニュー(カラムのヘッダー右クリック)から位置を移動させることもできます。
+
+## カラムの水平分割
+カラムは左右だけでなく、上下に並べることもできます。 カラムメニューを開き、「左に重ねる」を選択すると、左のカラムの下に現在のカラムが移動します。 上下分割を解除するには、カラムメニューの「右に出す」を選択します。
+
+## カラムの設定
+カラムメニューの「編集」を選択するとカラムの設定を編集できます。カラムの名前を変えたり、幅を変えたりできます。
+
+## デッキの設定
+デッキに関する設定は、[settings/deck](/settings/deck)で行えます。
diff --git a/src/docs/nl-NL/features/drive.md b/src/docs/nl-NL/features/drive.md
new file mode 100644
index 0000000000..b82a41082a
--- /dev/null
+++ b/src/docs/nl-NL/features/drive.md
@@ -0,0 +1,17 @@
+# ドライブ
+ドライブは、Misskey上でファイルを管理できる機能です。
+
+[ドライブのページ](/my/drive)から任意のファイルをアップロードできるほか、アバターに設定した画像や、ノートに添付したファイルなどもすべてドライブにアップロードされます。
+
+<div class="warn">⚠️ ドライブからファイルを削除すると、そのファイルが添付されたノートも消えます。</div>
+
+ドライブにアップロードされたファイルは、いつでもダウンロードすることができるほか、ノート作成時に「ドライブからファイルを添付」することでファイルを再利用することもできます。
+
+ドライブ内にフォルダを作り、複数のファイルをまとめて整理することもできます。
+
+## 閲覧注意 (NSFW)
+<div class="info">ℹ️ この項目が閲覧注意なわけではありません</div>
+
+閲覧注意またはNSFW (Not safe for work) は、ドライブのファイルに設定することができるフラグです。 閲覧注意フラグを設定されたファイルは、表示される際に閲覧者の操作なしには表示されなくなります。 このフラグは、例えば職場や公共の場で閲覧するのに適切でないと思われる画像などに設定し、そのような画像が突然表示されてしまうことを防ぐ目的で使われます。
+
+このフラグは手動でオンオフを切り替えられるほか、モデレーターの判断で設定される場合もあります。
diff --git a/src/docs/nl-NL/features/favorite.md b/src/docs/nl-NL/features/favorite.md
new file mode 100644
index 0000000000..a0e5f8bf78
--- /dev/null
+++ b/src/docs/nl-NL/features/favorite.md
@@ -0,0 +1,4 @@
+# お気に入り
+[ノート](./node)をお気に入りとして登録できる機能です。 お気に入り登録したノートは、[お気に入りページ](./my/favorites)で一覧することができます。 お気に入りに登録したことは相手に通知されず、お気に入りは自分しか見ることができません。
+
+ノートをお気に入り登録するには、ノートメニューの「お気に入り」を押します。お気に入り解除するには、ノートメニューの「お気に入り解除」を押します。
diff --git a/src/docs/nl-NL/features/follow.md b/src/docs/nl-NL/features/follow.md
new file mode 100644
index 0000000000..3c1ea7bbe0
--- /dev/null
+++ b/src/docs/nl-NL/features/follow.md
@@ -0,0 +1,2 @@
+# フォロー
+ユーザーをフォローすると、タイムラインにそのユーザーの投稿が表示されるようになります。ただし、他のユーザーに対する返信は含まれません。 ユーザーをフォローするには、ユーザーページの「フォロー」ボタンをクリックします。フォローを解除するには、もう一度クリックします。
diff --git a/src/docs/nl-NL/features/keyboard-shortcut.md b/src/docs/nl-NL/features/keyboard-shortcut.md
new file mode 100644
index 0000000000..8659ace982
--- /dev/null
+++ b/src/docs/nl-NL/features/keyboard-shortcut.md
@@ -0,0 +1,66 @@
+# キーボードショートカット
+
+## グローバル
+これらのショートカットは基本的にどこでも使えます。
+<table>
+    <thead>
+        <tr><th>ショートカット</th><th>効果</th><th>由来</th></tr>
+    </thead>
+    <tbody>
+        <tr><td><kbd class="key">P</kbd>, <kbd class="key">N</kbd></td><td>新規投稿</td><td><b>P</b>ost, <b>N</b>ew, <b>N</b>ote</td></tr>
+        <tr><td><kbd class="key">T</kbd></td><td>タイムラインの最も新しい投稿にフォーカス</td><td><b>T</b>imeline, <b>T</b>op</td></tr>
+        <tr><td><kbd class="group"><kbd class="key">Shift</kbd> + <kbd class="key">N</kbd></kbd></td><td>通知を表示/隠す</td><td><b>N</b>otifications</td></tr>
+        <tr><td><kbd class="key">S</kbd></td><td>検索</td><td><b>S</b>earch</td></tr>
+        <tr><td><kbd class="key">H</kbd>, <kbd class="key">?</kbd></td><td>ヘルプを表示</td><td><b>H</b>elp</td></tr>
+    </tbody>
+</table>
+
+## 投稿にフォーカスされた状態
+<table>
+    <thead>
+        <tr><th>ショートカット</th><th>効果</th><th>由来</th></tr>
+    </thead>
+    <tbody>
+        <tr><td><kbd class="key">↑</kbd>, <kbd class="key">K</kbd>, <kbd class="group"><kbd class="key">Shift</kbd> + <kbd class="key">Tab</kbd></kbd></td><td>上の投稿にフォーカスを移動</td><td>-</td></tr>
+        <tr><td><kbd class="key">↓</kbd>, <kbd class="key">J</kbd>, <kbd class="key">Tab</kbd></td><td>下の投稿にフォーカスを移動</td><td>-</td></tr>
+        <tr><td><kbd class="key">R</kbd></td><td>返信フォームを開く</td><td><b>R</b>eply</td></tr>
+        <tr><td><kbd class="key">Q</kbd></td><td>Renoteフォームを開く</td><td><b>Q</b>uote</td></tr>
+        <tr><td><kbd class="group"><kbd class="key">Ctrl</kbd> + <kbd class="key">Q</kbd></kbd></td><td>即刻Renoteする(フォームを開かずに)</td><td>-</td></tr>
+        <tr><td><kbd class="key">E</kbd>, <kbd class="key">A</kbd>, <kbd class="key">+</kbd></td><td>リアクションフォームを開く</td><td><b>E</b>mote, re<b>A</b>ction</td></tr>
+        <tr><td><kbd class="key">0</kbd>~<kbd class="key">9</kbd></td><td>数字に対応したリアクションをする(対応については後述)</td><td>-</td></tr>
+        <tr><td><kbd class="key">F</kbd>, <kbd class="key">B</kbd></td><td>お気に入りに登録</td><td><b>F</b>avorite, <b>B</b>ookmark</td></tr>
+        <tr><td><kbd class="key">Del</kbd>, <kbd class="group"><kbd class="key">Ctrl</kbd> + <kbd class="key">D</kbd></kbd></td><td>投稿を削除</td><td><b>D</b>elete</tr>
+        <tr><td><kbd class="key">M</kbd>, <kbd class="key">O</kbd></td><td>投稿に対するメニューを開く</td><td><b>M</b>ore, <b>O</b>ther</td></tr>
+        <tr><td><kbd class="key">S</kbd></td><td>CWで隠された部分を表示 or 隠す</td><td><b>S</b>how, <b>S</b>ee</td></tr>
+        <tr><td><kbd class="key">Esc</kbd></td><td>フォーカスを外す</td><td>-</td></tr>
+    </tbody>
+</table>
+
+## Renoteフォーム
+<table>
+    <thead>
+        <tr><th>ショートカット</th><th>効果</th><th>由来</th></tr>
+    </thead>
+    <tbody>
+        <tr><td><kbd class="key">Enter</kbd></td><td>Renoteする</td><td>-</td></tr>
+        <tr><td><kbd class="key">Q</kbd></td><td>フォームを展開する</td><td><b>Q</b>uote</td></tr>
+        <tr><td><kbd class="key">Esc</kbd></td><td>フォームを閉じる</td><td>-</td></tr>
+    </tbody>
+</table>
+
+## リアクションフォーム
+デフォルトで「👍」にフォーカスが当たっている状態です。
+<table>
+    <thead>
+        <tr><th>ショートカット</th><th>効果</th><th>由来</th></tr>
+    </thead>
+    <tbody>
+        <tr><td><kbd class="key">↑</kbd>, <kbd class="key">K</kbd></td><td>上のリアクションにフォーカスを移動</td><td>-</td></tr>
+        <tr><td><kbd class="key">↓</kbd>, <kbd class="key">J</kbd></td><td>下のリアクションにフォーカスを移動</td><td>-</td></tr>
+        <tr><td><kbd class="key">←</kbd>, <kbd class="key">H</kbd>, <kbd class="group"><kbd class="key">Shift</kbd> + <kbd class="key">Tab</kbd></kbd></td><td>左のリアクションにフォーカスを移動</td><td>-</td></tr>
+        <tr><td><kbd class="key">→</kbd>, <kbd class="key">L</kbd>, <kbd class="key">Tab</kbd></td><td>右のリアクションにフォーカスを移動</td><td>-</td></tr>
+        <tr><td><kbd class="key">Enter</kbd>, <kbd class="key">Space</kbd>, <kbd class="key">+</kbd></td><td>リアクション確定</td><td>-</td></tr>
+        <tr><td><kbd class="key">0</kbd>~<kbd class="key">9</kbd></td><td>数字に対応したリアクションで確定</td><td>-</td></tr>
+        <tr><td><kbd class="key">Esc</kbd></td><td>リアクションするのをやめる</td><td>-</td></tr>
+    </tbody>
+</table>
diff --git a/src/docs/nl-NL/features/mfm.md b/src/docs/nl-NL/features/mfm.md
new file mode 100644
index 0000000000..5be2df4f30
--- /dev/null
+++ b/src/docs/nl-NL/features/mfm.md
@@ -0,0 +1,12 @@
+# MFM
+MFMは、Misskey Flavored Markdownの略で、Misskeyの様々な場所で使用できる専用のマークアップ言語です。 MFMで使用可能な構文は[MFMチートシート](/mfm-cheat-sheet)で確認できます。
+
+## MFMが使用可能な場所の例
+- ノート本文
+- CW注釈
+- ユーザーの名前
+- ユーザーの自己紹介
+
+## 開発者向け情報
+MFMのパーサー実装はライブラリとして公開されており、簡単にクライアントにMFMを組み込むことが可能です。
+- [misskey-dev/mfm.js](https://github.com/misskey-dev/mfm.js) - JavaScriptパーサー実装
diff --git a/src/docs/nl-NL/features/mute.md b/src/docs/nl-NL/features/mute.md
new file mode 100644
index 0000000000..6a9608662a
--- /dev/null
+++ b/src/docs/nl-NL/features/mute.md
@@ -0,0 +1,13 @@
+# ミュート
+
+ユーザーをミュートすると、そのユーザーに関する次のコンテンツがMisskeyに表示されなくなります:
+
+* タイムラインや投稿の検索結果内の、そのユーザーの投稿(およびそれらの投稿に対する返信やRenote)
+* そのユーザーからの通知
+* メッセージ履歴一覧内の、そのユーザーとのメッセージ履歴
+
+ユーザーをミュートするには、対象のユーザーのユーザーページに表示されている「ミュート」ボタンを押します。
+
+ミュートを行ったことは相手に通知されず、ミュートされていることを知ることもできません。
+
+設定>ミュート から、自分がミュートしているユーザー一覧を確認することができます。
diff --git a/src/docs/nl-NL/features/note.md b/src/docs/nl-NL/features/note.md
new file mode 100644
index 0000000000..62440b25f9
--- /dev/null
+++ b/src/docs/nl-NL/features/note.md
@@ -0,0 +1,51 @@
+# ノート
+ノートは、Misskeyに投稿される、文章、ファイル、アンケートなどを含むコンテンツで、Misskeyの中心的概念です。また、そのノートを作成する行為自体もノートと呼ばれます。
+
+ノートが作成されると、[タイムライン](./timeline)に追加され、自分の[フォロワー](./follow)やサーバーのユーザーが見れるようになります。
+
+ノートには、[リアクション](./reaction)を行うことができます。また、返信や引用もできます。
+
+ノートを[お気に入り](./favorite)登録することで、後で簡単に見返すことができます。
+
+## ノートを作成する
+ノートを作成するには、画面上にある鉛筆マークのボタンを押して、作成フォームを開きます。作成フォームに内容を入力し、「ノート」ボタンを押すことでノートが作成されます。 ノートには、画像、動画など任意のファイルや、[アンケート](./poll)を添付することができます。また、本文中には[MFM](./mfm)が使用でき、[メンション](./mention)や[ハッシュタグ](./hashtag)を含めることもできます。 他にも、CWや公開範囲といった設定も行えます(詳細は後述)。
+<div class="info">ℹ️ コンピューターのクリップボードに画像データがある状態で、フォーム内のテキストボックスにペーストするとその画像を添付することができます。</div>
+<div class="info">ℹ️ テキストボックス内で<kbd class="key">Ctrl + Enter</kbd>を押すことでも投稿できます。</div>
+
+## Renote
+既にあるノートを引用、もしくはそのノートを新しいノートとして共有する行為、またそれによって作成されたノートをRenoteと呼びます。 自分がフォローしているユーザーの、気に入ったノートを自分のフォロワーに共有したい場合や、過去の自分のノートを再度共有したい場合に使います。 同じノートに対して無制限にRenoteを行うことができますが、あまり連続して使用すると迷惑になる場合もあるので、注意しましょう。
+<div class="warn">⚠️ 公開範囲がフォロワーやダイレクトのノートはRenoteできません</div>
+
+Renoteを削除するには、Renoteの時刻表示の隣にある「...」を押し、「Renote解除」を選択します。
+
+## CW
+Contents Warningの略で、ノートの内容を、閲覧者の操作なしには表示しないようにできる機能です。主に長大な内容を隠すためや、ネタバレ防止などに使うことができます。 設定するには、フォームの「内容を隠す」ボタン(目のアイコン)を押します。すると新しい入力エリアが表れるので、そこに内容の要約を記入します。
+
+## 公開範囲
+ノートごとに、そのノートが公開される範囲を設定することができます。フォームの「ノート」ボタンの左にあるアイコンを押すと公開範囲を以下から選択できます。
+
+### パブリック
+全ての人に対してノートが公開されるほか、サーバーの全てのタイムライン(ホームタイムライン、ローカルタイムライン、ソーシャルタイムライン、グローバルタイムライン)にノートが流れます。
+<div class="warn">⚠️ アカウントが<a href="./silence">サイレンス</a>状態の時は、この公開範囲は使用できません。</div>
+
+### ホーム
+全ての人に対してノートが公開されますが、フォロワー以外のローカルタイムライン、ソーシャルタイムライン、グローバルタイムラインにはノートは流れません。
+
+### フォロワー
+自分のフォロワーに対してのみノートを公開します。フォロワーの全てのタイムラインに流れます。
+
+### ダイレクト
+指定したユーザーに対してのみノートを公開します。指定したユーザーの全てのタイムラインに流れます。
+
+### 「ローカルのみ」オプション
+このオプションを有効にすると、リモートにノートを連合しなくなります。
+
+### 公開範囲の比較
+<table>
+    <tr><th></th><th>パブリック</th><th>ホーム</th><th>フォロワー</th><th>ダイレクト</th></tr>
+    <tr><th>フォロワーのLTL/STL/GTL</th><td>✔</td><td>✔</td><td>✔</td><td></td></tr>
+    <tr><th>非フォロワーのLTL/STL/GTL</th><td>✔</td><td></td><td></td><td></td></tr>
+</table>
+
+## ピン留め
+ノートをピン留めすると、ユーザーページに常にそのノートを表示しておくことができます。 ノートのメニューを開き、「ピン留め」を選択してピン留めできます。 複数のノートをピン留めできます。
diff --git a/src/docs/nl-NL/features/pages.md b/src/docs/nl-NL/features/pages.md
new file mode 100644
index 0000000000..a7311b95e6
--- /dev/null
+++ b/src/docs/nl-NL/features/pages.md
@@ -0,0 +1,10 @@
+# Pages
+
+## 変数
+変数を使うことで動的なページを作成できます。テキスト内で <b>{ 変数名 }</b> と書くとそこに変数の値を埋め込めます。例えば <b>Hello { thing } world!</b> というテキストで、変数(thing)の値が <b>ai</b> だった場合、テキストは <b>Hello ai world!</b> になります。
+
+変数の評価(値を算出すること)は上から下に行われるので、ある変数の中で自分より下の変数を参照することはできません。例えば上から <b>A、B、C</b> と3つの変数を定義したとき、<b>C</b>の中で<b>A</b>や<b>B</b>を参照することはできますが、<b>A</b>の中で<b>B</b>や<b>C</b>を参照することはできません。
+
+ユーザーからの入力を受け取るには、ページに「ユーザー入力」ブロックを設置し、「変数名」に入力を格納したい変数名を設定します(変数は自動で作成されます)。その変数を使ってユーザー入力に応じた動作を行えます。
+
+関数を使うと、値の算出処理を再利用可能な形にまとめることができます。関数を作るには、「関数」タイプの変数を作成します。関数にはスロット(引数)を設定することができ、スロットの値は関数内で変数として利用可能です。また、関数を引数に取る関数(高階関数と呼ばれます)も存在します。関数は予め定義しておくほかに、このような高階関数のスロットに即席でセットすることもできます。
diff --git a/src/docs/nl-NL/features/reaction.md b/src/docs/nl-NL/features/reaction.md
new file mode 100644
index 0000000000..4d479fd416
--- /dev/null
+++ b/src/docs/nl-NL/features/reaction.md
@@ -0,0 +1,11 @@
+# リアクション
+他の人のノートに、絵文字を付けて簡単にあなたの反応を伝えられる機能です。 リアクションするには、ノートの + アイコンをクリックしてピッカーを表示し、絵文字を選択します。 リアクションには[カスタム絵文字](./custom-emoji)も使用できます。
+
+## リアクションピッカーのカスタマイズ
+ピッカーに表示される絵文字を自分好みにカスタマイズすることができます。 設定の「リアクション」で設定します。
+
+## リモート投稿へのリアクションについて
+リアクションはMisskeyオリジナルの機能であるため、リモートインスタンスがMisskeyでない限りは、ほとんどの場合「Like」としてアクティビティが送信されます。一般的にはLikeは「お気に入り」として実装されているようです。
+
+## リモートからのリアクションについて
+リモートから「Like」アクティビティを受信したとき、Misskeyでは「👍」のリアクションとして解釈されます。
diff --git a/src/docs/nl-NL/features/silence.md b/src/docs/nl-NL/features/silence.md
new file mode 100644
index 0000000000..7e26feab0d
--- /dev/null
+++ b/src/docs/nl-NL/features/silence.md
@@ -0,0 +1,6 @@
+# サイレンス
+サイレンスは、アカウントに設定される状態のひとつです。
+
+アカウントがサイレンス状態になると、ノートの公開範囲をパブリックにできなくなります。 ホーム、フォロワー、ダイレクトは選択可能なため、サイレンスを受けた場合でもフォロワーやあなたのユーザーページを直接訪れた場合は投稿を閲覧できますが、GTL(連合タイムライン)やLTL(ローカルタイムライン)には投稿が流れません。
+
+アカウントのサイレンス状態は、サーバーのモデレーターによって有効化/無効化されます。
diff --git a/src/docs/nl-NL/features/theme.md b/src/docs/nl-NL/features/theme.md
new file mode 100644
index 0000000000..a406f3433c
--- /dev/null
+++ b/src/docs/nl-NL/features/theme.md
@@ -0,0 +1,68 @@
+# テーマ
+
+テーマを設定して、Misskeyクライアントの見た目を変更できます。
+
+## テーマの設定
+設定 > テーマ
+
+## テーマを作成する
+テーマコードはJSON5で記述されたテーマオブジェクトです。 テーマは以下のようなオブジェクトです。
+``` js
+{
+    id: '17587283-dd92-4a2c-a22c-be0637c9e22a',
+
+    name: 'Danboard',
+    author: 'syuilo',
+
+    base: 'light',
+
+    props: {
+        accent: 'rgb(218, 141, 49)',
+        bg: 'rgb(218, 212, 190)',
+        fg: 'rgb(115, 108, 92)',
+        panel: 'rgb(236, 232, 220)',
+        renote: 'rgb(100, 152, 106)',
+        link: 'rgb(100, 152, 106)',
+        mention: '@accent',
+        hashtag: 'rgb(100, 152, 106)',
+        header: 'rgba(239, 227, 213, 0.75)',
+        navBg: 'rgb(216, 206, 182)',
+        inputBorder: 'rgba(0, 0, 0, 0.1)',
+    },
+}
+
+```
+
+* `id` ... テーマの一意なID。UUIDをおすすめします。
+* `name` ... テーマ名
+* `author` ... テーマの作者
+* `desc` ... テーマの説明(オプション)
+* `base` ... 明るいテーマか、暗いテーマか
+    * `light`にすると明るいテーマになり、`dark`にすると暗いテーマになります。
+    * テーマはここで設定されたベーステーマを継承します。
+* `props` ... テーマのスタイル定義。これから説明します。
+
+### テーマのスタイル定義
+`props`下にはテーマのスタイルを定義します。 キーがCSSの変数名になり、バリューで中身を指定します。 なお、この`props`オブジェクトはベーステーマから継承されます。 ベーステーマは、このテーマの`base`が`light`なら[_light.json5](https://github.com/misskey-dev/misskey/blob/develop/src/client/themes/_light.json5)で、`dark`なら[_dark.json5](https://github.com/misskey-dev/misskey/blob/develop/src/client/themes/_dark.json5)です。 つまり、このテーマ内の`props`に`panel`というキーが無くても、そこにはベーステーマの`panel`があると見なされます。
+
+#### バリューで使える構文
+* 16進数で表された色
+    * 例: `#00ff00`
+* `rgb(r, g, b)`形式で表された色
+    * 例: `rgb(0, 255, 0)`
+* `rgb(r, g, b, a)`形式で表された透明度を含む色
+    * 例: `rgba(0, 255, 0, 0.5)`
+* 他のキーの値の参照
+    * `@{キー名}`と書くと他のキーの値の参照になります。`{キー名}`は参照したいキーの名前に置き換えます。
+    * 例: `@panel`
+* 定数(後述)の参照
+    * `${定数名}`と書くと定数の参照になります。`{定数名}`は参照したい定数の名前に置き換えます。
+    * 例: `$main`
+* 関数(後述)
+    * `:{関数名}<{引数}<{色}`
+
+#### 定数
+「CSS変数として出力はしたくないが、他のCSS変数の値として使いまわしたい」値があるときは、定数を使うと便利です。 キー名を`$`で始めると、そのキーはCSS変数として出力されません。
+
+#### 関数
+wip
diff --git a/src/docs/nl-NL/features/timeline.md b/src/docs/nl-NL/features/timeline.md
new file mode 100644
index 0000000000..f431014f84
--- /dev/null
+++ b/src/docs/nl-NL/features/timeline.md
@@ -0,0 +1,31 @@
+# タイムライン
+タイムラインは、[ノート](./note)が時系列で表示される機能です。 タイムラインには以下で示す種類があり、種類によって表示されるノートも異なります。 なお、タイムラインの種類によってはサーバーにより無効になっている場合があります。
+
+## ホーム
+自分のフォローしているユーザーの投稿が流れます。HTLと略されます。
+
+## ローカル
+全てのローカルユーザーの「ホーム」指定されていない投稿が流れます。LTLと略されます。
+
+## ソーシャル
+自分のフォローしているユーザーの投稿と、全てのローカルユーザーの「ホーム」指定されていない投稿が流れます。STLと略されます。
+
+## グローバル
+全てのローカルユーザーの「ホーム」指定されていない投稿と、サーバーに届いた全てのリモートユーザーの「ホーム」指定されていない投稿が流れます。GTLと略されます。
+
+## 比較
+| ソース          |       |     | タイムライン |       |       |
+| ------------ | ----- | --- | ------ | ----- | ----- |
+| ユーザー         | 公開範囲  | ホーム | ローカル   | ソーシャル | グローバル |
+| ローカル (フォロー)  | 公開    | ✔   | ✔      | ✔     | ✔     |
+|              | ホーム   | ✔   |        | ✔     |       |
+|              | フォロワー | ✔   | ✔      | ✔     | ✔     |
+| リモート (フォロー)  | 公開    | ✔   |        | ✔     | ✔     |
+|              | ホーム   | ✔   |        | ✔     |       |
+|              | フォロワー | ✔   |        | ✔     | ✔     |
+| ローカル (未フォロー) | 公開    |     | ✔      | ✔     | ✔     |
+|              | ホーム   |     |        |       |       |
+|              | フォロワー |     |        |       |       |
+| リモート (未フォロー) | 公開    |     |        |       | ✔     |
+|              | ホーム   |     |        |       |       |
+|              | フォロワー |     |        |       |       |
diff --git a/src/docs/nl-NL/features/widgets.md b/src/docs/nl-NL/features/widgets.md
new file mode 100644
index 0000000000..a7c2c1d1d6
--- /dev/null
+++ b/src/docs/nl-NL/features/widgets.md
@@ -0,0 +1,7 @@
+# ウィジェット
+ウィジェットは、MisskeyのUI上に設置できる小型の情報表示、操作が行えるパーツです。
+
+ウィジェットを編集するには、ウィジェット編集モードに切り替えます。切り替え方法はUIによって異なります。 ウィジェット編集モードでは、ウィジェットの追加、削除、並び替え、およびそれぞれのウィジェットの設定を行えます。
+
+## 利用可能なウィジェット一覧
+todo
diff --git a/src/docs/nl-NL/general/apps.md b/src/docs/nl-NL/general/apps.md
new file mode 100644
index 0000000000..1f4c85fe8f
--- /dev/null
+++ b/src/docs/nl-NL/general/apps.md
@@ -0,0 +1,6 @@
+# サードパーティアプリのリスト
+## クライアント
+todo
+
+## 連携サービス
+todo
diff --git a/src/docs/nl-NL/general/faq.md b/src/docs/nl-NL/general/faq.md
new file mode 100644
index 0000000000..ecb664e32e
--- /dev/null
+++ b/src/docs/nl-NL/general/faq.md
@@ -0,0 +1,22 @@
+# よくある質問
+ここでは利用上のよくある質問について掲載しています。 Misskeyのプロジェクト自体についてのよくある質問は[こちら](./misskey)に掲載されています。
+
+### iOS/Androidのアプリはありますか?
+公式にはそういったOSのネイティブアプリを開発していませんが、サードパーティ製のアプリがいくつかあります。 詳しくは[こちら](./apps)をご覧ください。
+
+ただ、サードパーティ製アプリはどうしても機能への対応が遅れてしまうため、とくに拘りがなければ公式のWebクライアントの利用をおすすめします。 なお、MisskeyのWebクライアントはPWAに対応しているので、ネイティブアプリのように動作させることも可能です。 詳しくは[こちら](todo)をご覧ください。
+
+## 他のサーバーのユーザーをフォローするときは?
+メニューから検索を選び、ユーザー名をホスト込みで入力します。例: `@syuilo@misskey.io`
+
+## Renoteを削除するには?
+Renoteの時刻表示の隣にある「...」を押し、「Renote解除」を選択します。 Renoteについては[こちら](../features/note)をご確認ください。
+
+## URLのプレビューを表示させたくない
+MFMには、そのURLのプレビューを無効にする構文があります。詳細は[MFMチートシート](/mfm-cheat-sheet)をご確認ください。
+
+## カスタム絵文字を追加したい
+運営者のみがカスタム絵文字を追加、編集、削除できます。それらを希望する場合は運営者に依頼してください。
+
+## Botを開発したい
+Misskey APIを利用してBotの開発が可能です。[こちら](../advanced/develop-bot)をご確認ください。
diff --git a/src/docs/nl-NL/general/glossary.md b/src/docs/nl-NL/general/glossary.md
new file mode 100644
index 0000000000..1f403a06d2
--- /dev/null
+++ b/src/docs/nl-NL/general/glossary.md
@@ -0,0 +1,83 @@
+# 用語集
+Misskeyに関する用語集です。
+
+## AcitivityPub
+(読み: あくてぃびてぃぱぶ) 分散型を実現するために用いられるプロトコル(仕様)。このプロトコルに則ってサーバー同士通信を行うことで、連合が行われ、Fediverseを形成しています。
+
+## AiScript
+(読み: あいすくりぷと) Misskey上で使用できるプログラミング言語です。詳細は[こちら。](../advanced/aiscript)
+
+## API
+(読み: えーぴーあい) Misskeyのサーバーが公開している、プログラムからMisskeyを扱うためのインターフェース。詳細は[こちら。](../advanced/api)
+
+## Bot
+(読み: ぼっと) プログラムによって動作しているアカウント。
+
+## CW
+(読み: こんてんつわーにんぐ) Contents Warningの略。ノートの内容を、操作なしには表示しないようにできる機能。主に長大な内容を隠すためや、ネタバレ防止などに使われます。
+
+## Fediverse
+(読み: ふぇでぃばーす) Misskeyを含む様々な分散型ソフトウェアのサーバーで構成されたネットワーク。
+
+## GTL
+グローバルタイムライン(Global TimeLine)の略。タイムラインの詳細は[こちら。](../features/timeline)
+
+## HTL
+ホームタイムライン(Home TimeLine)の略。タイムラインの詳細は[こちら。](../features/timeline)
+
+## LTL
+ローカルタイムライン(Local TimeLine)の略。タイムラインの詳細は[こちら。](../features/timeline)
+
+## MFM
+(読み: えむえふえむ) Misskey Flavored Markdownの略で、Misskey上で使用できるマークアップ言語です。詳細は[こちら。](../features/mfm)
+
+## NSFW
+(読み: のっとせーふふぉーわーく) Not Safe For Workの略。画像を「閲覧注意」扱いにし、操作なしには表示しないようにすることができる機能。
+
+## Renote
+(読み: りのーと) 既にあるノートを引用、もしくはそのノートを新しいノートとして共有する行為、またそれによって作成されたノート。詳細は[こちら。](../features/note)
+
+## STL
+ソーシャルタイムライン(Social TimeLine)の略。タイムラインの詳細は[こちら。](../features/timeline)
+
+## 藍
+(読み: あい) Misskeyの看板娘(公式キャラクター)です。
+
+## アクティブユーザー
+インスタンスにアカウントを作っているユーザーのうち、現在も実際にサービスを利用しているユーザーのこと。
+
+## インスタンス
+todo
+
+## コントロールパネル
+インスタンスの設定画面のこと。
+
+## サーバー
+todo
+
+## サイレンス
+ノートをパブリックな公開範囲で投稿できなくされている状態。モデレーターの判断でユーザーごとに設定されます。詳細は[こちら。](../features/silence)
+
+## 凍結
+アカウントが使用不可に設定されている状態。
+
+## ドライブ
+Misskeyにアップロードしたファイルを管理する機能。詳細は[こちら。](../features/drive)
+
+## ノート
+Misskeyに投稿される、文章、ファイル、アンケートなどを含めることができるコンテンツ。詳細は[こちら。](../features/note)
+
+## ミスキスト
+Misskeyを使う人のこと。
+
+## モデレーター
+スパムの凍結およびサイレンスや不適切な投稿の削除など、コミュニティ運営に関する権限を持つユーザー。
+
+## リモート
+他サーバーのことを指します。リモートユーザーといったように接頭辞としても使われます。ローカルの逆です。
+
+## 連合
+サーバー上で作成された情報が他のサーバーに伝わること。
+
+## ローカル
+自サーバーのことを指します。ローカルユーザー、ローカルタイムラインといったように接頭辞としても使われます。リモートの逆です。
diff --git a/src/docs/nl-NL/general/links.md b/src/docs/nl-NL/general/links.md
new file mode 100644
index 0000000000..d6b16856fb
--- /dev/null
+++ b/src/docs/nl-NL/general/links.md
@@ -0,0 +1,5 @@
+# リンク集
+
+## ライブラリ
+- [misskey-dev/misskey.js](https://github.com/misskey-dev/misskey.js) - JavaScriptのMisskey SDK
+- [misskey-dev/mfm.js](https://github.com/misskey-dev/mfm.js) - JavaScriptのMFMパーサー実装
diff --git a/src/docs/nl-NL/general/misskey.md b/src/docs/nl-NL/general/misskey.md
new file mode 100644
index 0000000000..1e64a10e28
--- /dev/null
+++ b/src/docs/nl-NL/general/misskey.md
@@ -0,0 +1,87 @@
+# Misskeyについて
+
+Misskeyはオープンソースの分散型マイクロブログプラットフォームプロジェクトです。 開発は日本でsyuiloによって2014年から開始されました。 ドライブ、リアクションなどの豊富な機能や、高いカスタマイズ性を備えたUIを持つことが特徴です。
+
+## 歴史
+開発当初は掲示板がメインのサービスでしたが、ユーザーが短文を投稿し、それを時系列で流れるタイムライン機能を追加したところ人気が高まり、徐々にそれがメインとして開発が進むようになりました。 当初は分散型ではありませんでしたが、2018年にAcitivityPubを実装し分散型になったことで、より多くの方に認知され利用されるサービスになり、現在に至ります。
+<div class="info">ℹ️ Misskeyという名前は、syuiloが当時聴いていたMay'nというアーティストの楽曲、Brain Diverの歌詞に由来します。</div>
+
+誰でも開発に参加することができ、現在でも活発に開発が続いています。
+
+## 分散型とは何か?
+
+<b>分散(distributed)型</b>とは、<b>非中央集権(decentralized)</b>とも呼ばれ、コミュニティが多数のサーバーに分散して存在し、それらが相互に<b>通信(連合、federation)</b>することでコンテンツ共有<b>ネットワーク(Fediverse)</b>を形成していることが特徴のサービスです。 単一のサーバーしか存在しない、もしくは複数存在しても互いに独立している場合は中央集権なサービスと言われ、例えばTwitterやFacebookなどほとんどのサービスがそれに該当します。 分散型のメリットは、自分に合った運営者やテーマのサーバーを選択できることです。自分でサーバーを作成することもできます。連合するおかげで、どのサーバーを選んでも、同じコミュニティにアクセスできます。
+
+## 常にオープンソース
+Misskeyはこれまでもこれからも、オープンソースであり続けます。オープンソースとは、簡単に言うと<b>ソフトウェアのソースコード(プログラム)が公開されている</b>ことです。ソースコードの修正や再配布が可能であることを定義に含めることもあります。 Misskeyのすべてのソースコードは[AGPL](https://github.com/misskey-dev/misskey/blob/develop/LICENSE)というオープンソースライセンスの下に[公開](https://github.com/misskey-dev)されていて、誰でも自由に閲覧、使用、修正、改変、再配布をすることができます。 オープンソースは、自分で好きなように変えたり、有害な処理が含まれていないことを確認することができたり、誰でも開発に参加できるなどの、様々なメリットがあります。 上述の分散型を実現するためにも、オープンソースであるということは必要不可欠な要素です。 再び引き合いに出しますが、TwitterやFacebookなどの利益を得ているほとんどのサービスはオープンソースではありません。
+
+<div class="info">ℹ️ 技術的に言うと、MisskeyのソースコードはGitで管理されていて、リポジトリは<a href="https://github.com/misskey-dev" target="_blank">GitHub上でホスティングされています。</a></div>
+
+## 開発に参加する、プロジェクトを支援する
+Misskeyを気に入っていただけたら、ぜひプロジェクトを支援してください。プロジェクトに貢献するには、以下で紹介するようにいろいろな方法があります。方法によっては開発のスキルは不要なので、誰でも気軽に参加し貢献することができます。いつでもお待ちしています。
+
+### 機能を追加したり、バグを修正する
+ソフトウェアエンジニアのスキルをお持ちの方であれば、ソースコードを編集する形でプロジェクトに貢献することができます。 貢献についてのガイドは[こちら](https://github.com/misskey-dev/misskey/blob/develop/CONTRIBUTING.md)です。
+
+### 議論に参加する
+新しい機能、または既存の機能について意見を述べたり、不具合を報告したりすることでも貢献できます。 そのようなディスカッションは[GitHub](https://github.com/misskey-dev)上か、[フォーラム](https://forum.misskey.io/)等で行われます。
+
+### テキストを翻訳する
+Misskeyは様々な言語に対応しています(i18n -internationalizationの略- と呼ばれます)。元の言語は基本的に日本語ですが、有志によって他の言語へと翻訳されています。 その翻訳作業に加わっていただくことでもMisskeyに貢献できます。 Misskeyは[Crowdinというサービスを使用して翻訳の管理を行っています。](https://crowdin.com/project/misskey)
+
+### 感想を投稿する
+不具合報告等だけではなく、Misskeyの良い点、楽しい点といったポジティブな意見もぜひ共有してください。開発の励みになり、それは間接的ですがプロジェクトへの貢献です。
+
+### ミスキストを増やす
+ミスキストとは、Misskeyを使用する人のことです。 知り合いに紹介するなどしてMisskeyを広めていただければ、ミスキストが増え開発のモチベーションが上がります。
+
+### 寄付をする
+Misskeyはビジネスではなく、利用は無料であるため、収益は皆様からの寄付のみです。(インスタンスによっては広告収入を得ているような場合もありますが、それは運営者の収入であり直接開発者への収入にはなりません) 寄付をしていただければ、今後も開発を続けることが可能になり、プロジェクトへの貢献になります。 寄付は基本的には[Patreon](https://www.patreon.com/syuilo)で受け付けています。 一定額寄付していただけると、Misskeyの[情報ページ](/about-misskey)に名前を記載することができます。
+
+また、サーバーの運営者も、基本的には収益を得ていません。サーバーの運営にはコストがかかるので、運営者の支援をすることもご検討ください。 開発には直接関係しませんが、サーバーがあってこそのプロジェクトなので、運営が維持されるというのは開発と同じくらい重要なことです。
+
+## クレジット
+Misskeyの開発者や、Misskeyに寄付をしてくださった方の一覧は[こちら](/about-misskey)で見ることができます。
+
+## よくある質問
+### プロジェクトは何を目指していますか?
+強いて言うと、漠然的になりますが広く使われる汎用的なプラットフォームになることを目指しています。 Misskeyは他のプロジェクトとは違い、何らかの思想(例えば、反中央集権)やビジョンに基づいて開発が行われているわけではなく、その点ではフラットです。 それが逆に、特定の方向性に縛られないフレキシブルさを生み出すことに繋がっていると感じています。
+<!-- TODO: ここにロードマップへのリンク -->
+
+### 企業によって開発されていますか?
+いいえ。Misskeyの開発は個人で行われており、商業的でもないため、特定の企業の関りはありません。 開発メンバーも基本的にはボランティアです。 また、開発に対し企業のスポンサーがつくこともありますが、その場合でもやはり開発は個人のコミュニティが主体です。
+
+### 誰が運営していますか?
+Misskeyは分散型なため、各サーバーにそれぞれ異なった運営者がいます。従って、特定の個人や企業によって、Misskeyの全てが運営されているわけではありません。 また、開発チームが運営を行うわけでもないため、運営に関する連絡は、お使いのサーバーの運営者に行ってください。 サーバーの運営者は、[このページ](/about)で確認することができます。 あなたがサーバーを作成すれば、あなたが運営者になります。
+
+### どのサーバーを選べばいいですか?
+[サーバー一覧が公開されています。](https://join.misskey.page/ja-JP/instances) サーバーによってコミュニティのテーマ(特定のこと、ものが好き 等)が決められている場合があるので、自分に合ったテーマのサーバーがあれば、そこを選ぶと良いかもしれません。 他にも、サーバーの規模、ユーザー層、国および言語、運営者が信頼できるかどうか、などの観点があります。 なお、Misskey公式のサーバーというものはありません。自身で新しくサーバーを作成するという選択肢もあります。
+
+基本的にどのサーバーを選んだとしても、他の全てのサーバーのユーザーと繋がることができます。
+
+### サーバーを建てるにはどうしたらいいですか?
+Misskeyサーバーの作成に興味を持っていただきありがとうございます。 2021年現在、Misskeyのホスティングサービスは存在しないため、サーバーの作成にはある程度の知識が必要です。 サーバーの作成方法については[こちら](todo)をご覧ください。
+
+### どのような技術を使用していますか?
+Misskeyは開発が進むにつれ使用する技術も大きく変わってきました。開発当初はMySQL + PHP + jQueryといった構成でしたが、現在は以下のようになっています。
+- サーバーサイド: Node.js
+- データベース: PostgreSQL、Redis
+- UIフレームワーク: Vue.js
+- プログラミング言語: TypeScript
+
+また、MFMやAiScriptなどの、Misskeyから派生して独自の技術も開発しています。
+
+### Mastodonのフォークですか?
+いいえ。MisskeyはMastodonやその他のプロジェクトとは全く別のプロジェクトです。 開発に関しても、Misskeyの方が昔から開発されています。ただし、分散型になったのはMastodonの登場より後です。 同じAcitivityPubという分散のためのプロトコルを実装しているという点以外、両者に特に関りがあるわけでもありません。
+
+### iOS/Androidのアプリはありますか?
+公式にはそういったOSのネイティブアプリを開発していませんが、サードパーティ製のアプリがいくつかあります。 詳しくは[こちら](./apps)をご覧ください。
+
+ただ、サードパーティ製アプリはどうしても機能への対応が遅れてしまうため、とくに拘りがなければ公式のWebクライアントの利用をおすすめします。 なお、MisskeyのWebクライアントはPWAに対応しているので、ネイティブアプリのように動作させることも可能です。 詳しくは[こちら](todo)をご覧ください。
+
+### Misskeyのロゴ、アイコンはどこで入手できますか?
+(準備中)
+
+### 時折目にする猫耳の可愛い女の子は?
+Misskeyの守り神、藍ちゃんです。アイチャンカワイイヤッター!
+<div class="info">ℹ️ 藍ちゃんについては<a href="https://xn--931a.moe/" target="_blank">こちら</a>です。</div>
diff --git a/src/docs/nl-NL/general/report-issue.md b/src/docs/nl-NL/general/report-issue.md
new file mode 100644
index 0000000000..63527e32af
--- /dev/null
+++ b/src/docs/nl-NL/general/report-issue.md
@@ -0,0 +1,8 @@
+# 不具合の報告
+不具合と思われる状況に遭遇したときは、まず[トラブルシューティング](./troubleshooting)をご一読ください。 それでも問題が解決しないときは、以下の情報を含めて[フォーラム](https://forum.misskey.io/)に投稿してください。 投稿することで、解決策が見つかったり、不具合と判断されれば開発チームによって修正が行われます。
+
+## 含める情報
+- Misskeyのバージョン([情報ページ](/about)で確認できます)
+- お使いのブラウザの種類とバージョン
+- お使いのOSの種類とバージョン
+- 問題の再現手順
diff --git a/src/docs/nl-NL/general/troubleshooting.md b/src/docs/nl-NL/general/troubleshooting.md
new file mode 100644
index 0000000000..4a35091299
--- /dev/null
+++ b/src/docs/nl-NL/general/troubleshooting.md
@@ -0,0 +1,36 @@
+# トラブルシューティング
+<div class="info">ℹ️ <a href="./faq">よくある質問</a>も合わせてお役立てください。</div>
+
+問題が発生したときは、まずこちらをご確認ください。 該当する項目が無い、もしくは手順を試しても効果がない場合は、サーバーの管理者に連絡するか[不具合を報告](./report-issue)してください。
+
+## クライアントが起動しない
+ほとんどの場合、お使いのブラウザまたはOSのバージョンが古いことが原因です。 ブラウザおよびOSのバージョンを最新のものに更新してから、再度試してみてください。
+
+これは稀ですが、それでも起動しない場合は、キャッシュが原因の場合があります。ブラウザのキャッシュをクリアして、再度試してみてください。
+
+## ページが読み込めない
+クライアントが起動するもののページが読み込めないというエラーが出る場合は、ネットワークに問題がないか確認してください。また、サーバーがダウンしていないか確認してください。
+
+これは稀ですが、キャッシュが原因の場合があります。ブラウザのキャッシュをクリアして、再度試してみてください。
+
+まだ問題がある場合は、サーバーの問題と思われるのでサーバーの管理者に連絡してください。
+
+## クライアントの動作が遅い
+以下を試してみてください:
+
+- クライアント設定で「UIのアニメーションを減らす」を有効にする
+- クライアント設定で「モーダルにぼかし効果を使用」を無効にする
+- お使いのブラウザの設定でハードウェアアクセラレーションを有効にする
+- お使いのデバイスのスペックを上げる
+
+## 通知やアンテナ等の点滅が消えない
+点滅は、未読のコンテンツがあることを示しています。通常点滅が消えない場合は、コンテンツを遡ると未読なコンテンツが残っています。 すべて既読にしたと思われるのに、それでもなお点滅が続く場合(おそらく不具合と思われます)は設定から強制的にすべて既読扱いにすることができます。
+
+## Renoteができない
+フォロワー限定のノートはRenoteすることはできません。
+
+## UI上で特定の要素が表示されない
+広告ブロッカーを使用しているとそのような不具合が発生することがあります。Misskeyではオフにしてご利用ください。
+
+## UI上で未翻訳の部分がある
+ほとんどの場合、単に翻訳が間に合っていないだけで、不具合ではありません。翻訳が終わるまでお待ちください。 [翻訳に参加](./misskey)していただくことも可能です。
diff --git a/src/docs/no-NO/admin/disable-timelines.md b/src/docs/no-NO/admin/disable-timelines.md
new file mode 100644
index 0000000000..b081e35ab0
--- /dev/null
+++ b/src/docs/no-NO/admin/disable-timelines.md
@@ -0,0 +1,8 @@
+# LTL/STL/GTLの無効化
+Misskeyでは、LTL/STL/GTLをそれぞれ無効化することができます。有効/無効を切り替えるには、インスタンスコントロールパネルで設定します。
+
+LTLやSTLは、そのインスタンス全員の投稿が見れるため、新規のユーザーにとってはユーザーを探す必要がなくなり、興味のあるユーザーを見つけやすいという利点があります。 しかし同時に、フォロー機能が活用されなくなったり、不適切な投稿が目につきやすくなったり、チャットのようになることで内輪感が生じて逆に新規ユーザーが参加しにくくなるといったデメリットも持ち合わせています。 サーバーによってメリット/デメリットどちらが優勢かは異なるので、オプションとして無効にできるようになっています。 もしデメリットの方が上回っていると感じたら、それらのタイムラインを無効化することも検討してください。
+
+<div class="warn">⚠️ 無効化を行うと、ユーザーが困惑し、短期的に見て利用者が減る可能性があります。そのため、無効化の際は影響を慎重に検討し、事前に説明してフォローを整える期間を一定程度設けることを推奨します。</div>
+
+なお、管理者/モデレーターは、これらのタイムラインの無効化状態は適用されず、引き続き利用することが可能です。
diff --git a/src/docs/no-NO/admin/faq.md b/src/docs/no-NO/admin/faq.md
new file mode 100644
index 0000000000..317b4e0655
--- /dev/null
+++ b/src/docs/no-NO/admin/faq.md
@@ -0,0 +1,5 @@
+# よくある質問
+ここでは、サーバー管理者向けのよくある質問を掲載しています。
+
+## デフォルトテーマを設定したい
+現在、デフォルトテーマ設定機能は実装されていません。
diff --git a/src/docs/no-NO/advanced/aiscript.md b/src/docs/no-NO/advanced/aiscript.md
new file mode 100644
index 0000000000..604d17daa8
--- /dev/null
+++ b/src/docs/no-NO/advanced/aiscript.md
@@ -0,0 +1,7 @@
+# AiScript
+AiScriptは、Misskeyで使用できるスクリプト言語です。
+
+<div class="info">ℹ️ AiScript実装はMisskeyとは別リポジトリで、<a href="https://github.com/syuilo/aiscript" target="_blank">オープンソースで公開されています。</a></div>
+
+## 使い方
+AiScriptの構文や組み込み関数などのドキュメントは、[こちら](https://github.com/syuilo/aiscript/tree/master/docs)で公開されています。
diff --git a/src/docs/no-NO/advanced/api.md b/src/docs/no-NO/advanced/api.md
new file mode 100644
index 0000000000..76019b6145
--- /dev/null
+++ b/src/docs/no-NO/advanced/api.md
@@ -0,0 +1,58 @@
+# Misskey API
+
+MisskeyAPIを使ってMisskeyクライアント、Misskey連携Webサービス、Bot等(以下「アプリケーション」と呼びます)を開発できます。 ストリーミングAPIもあるので、リアルタイム性のあるアプリケーションを作ることも可能です。
+
+APIを使い始めるには、まずアクセストークンを取得する必要があります。 このドキュメントでは、アクセストークンを取得する手順を説明した後、基本的なAPIの使い方を説明します。
+
+## アクセストークンの取得
+基本的に、APIはリクエストにはアクセストークンが必要となります。 APIにリクエストするのが自分自身なのか、不特定の利用者に使ってもらうアプリケーションなのかによって取得手順は異なります。
+
+* 前者の場合: [「自分自身のアクセストークンを手動発行する」](#自分自身のアクセストークンを手動発行する)に進む
+* 後者の場合: [「アプリケーション利用者にアクセストークンの発行をリクエストする」](#アプリケーション利用者にアクセストークンの発行をリクエストする)に進む
+
+### 自分自身のアクセストークンを手動発行する
+「設定 > API」で、自分のアクセストークンを発行できます。
+
+[「APIの使い方」へ進む](#APIの使い方)
+
+### アプリケーション利用者にアクセストークンの発行をリクエストする
+アプリケーション利用者のアクセストークンを取得するには、以下の手順で発行をリクエストします。
+
+#### Step 1
+
+UUIDを生成する。以後これをセッションIDと呼びます。
+
+> このセッションIDは毎回生成し、使いまわさないようにしてください。
+
+#### Step 2
+
+`{_URL_}/miauth/{session}`をユーザーのブラウザで表示させる。`{session}`の部分は、セッションIDに置き換えてください。
+> 例: `{_URL_}/miauth/c1f6d42b-468b-4fd2-8274-e58abdedef6f`
+
+表示する際、URLにクエリパラメータとしていくつかのオプションを設定できます:
+* `name` ... アプリケーション名
+    * > 例: `MissDeck`
+* `icon` ... アプリケーションのアイコン画像URL
+    * > 例: `https://missdeck.example.com/icon.png`
+* `callback` ... 認証が終わった後にリダイレクトするURL
+    * > 例: `https://missdeck.example.com/callback`
+    * リダイレクト時には、`session`というクエリパラメータでセッションIDが付きます
+* `permission` ... アプリケーションが要求する権限
+    * > 例: `write:notes,write:following,read:drive`
+    * 要求する権限を`,`で区切って列挙します
+    * どのような権限があるかは[APIリファレンス](/api-doc)で確認できます
+
+#### Step 3
+ユーザーが発行を許可した後、`{_URL_}/api/miauth/{session}/check`にPOSTリクエストすると、レスポンスとしてアクセストークンを含むJSONが返ります。
+
+レスポンスに含まれるプロパティ:
+* `token` ... ユーザーのアクセストークン
+* `user` ... ユーザーの情報
+
+[「APIの使い方」へ進む](#APIの使い方)
+
+## APIの使い方
+**APIはすべてPOSTで、リクエスト/レスポンスともにJSON形式です。RESTではありません。** アクセストークンは、`i`というパラメータ名でリクエストに含めます。
+
+* [APIリファレンス](/api-doc)
+* [ストリーミングAPI](./stream)
diff --git a/src/docs/no-NO/advanced/create-plugin.md b/src/docs/no-NO/advanced/create-plugin.md
new file mode 100644
index 0000000000..0d2fa19178
--- /dev/null
+++ b/src/docs/no-NO/advanced/create-plugin.md
@@ -0,0 +1,74 @@
+# プラグインの作成
+Misskey Webクライアントのプラグイン機能を使うと、クライアントを拡張し、様々な機能を追加できます。 ここではプラグインの作成にあたってのメタデータ定義や、AiScript APIリファレンスを掲載します。
+
+## メタデータ
+プラグインは、AiScriptのメタデータ埋め込み機能を使って、デフォルトとしてプラグインのメタデータを定義する必要があります。 メタデータは次のプロパティを含むオブジェクトです。
+
+### name
+プラグイン名
+
+### author
+プラグイン作者
+
+### version
+プラグインバージョン。数値を指定してください。
+
+### description
+プラグインの説明
+
+### permissions
+プラグインが要求する権限。MisskeyAPIにリクエストする際に用いられます。
+
+### config
+プラグインの設定情報を表すオブジェクト。 キーに設定名、値に以下のプロパティを含めます。
+
+#### type
+設定値の種類を表す文字列。以下から選択します。 string number boolean
+
+#### label
+ユーザーに表示する設定名
+
+#### description
+設定の説明
+
+#### default
+設定のデフォルト値
+
+## APIリファレンス
+AiScript標準で組み込まれているAPIは掲載しません。
+
+### Mk:dialog(title text type)
+ダイアログを表示します。typeには以下の値が設定できます。 info success warn error question 省略すると info になります。
+
+### Mk:confirm(title text type)
+確認ダイアログを表示します。typeには以下の値が設定できます。 info success warn error question 省略すると question になります。 ユーザーが"OK"を選択した場合は true を、"キャンセル"を選択した場合は false が返ります。
+
+### Mk:api(endpoint params)
+Misskey APIにリクエストします。第一引数にエンドポイント名、第二引数にパラメータオブジェクトを渡します。
+
+### Mk:save(key value)
+任意の値に任意の名前を付けて永続化します。永続化した値は、AiScriptコンテキストが終了しても残り、Mk:loadで読み取ることができます。
+
+### Mk:load(key)
+Mk:saveで永続化した指定の名前の値を読み取ります。
+
+### Plugin:register_post_form_action(title fn)
+投稿フォームにアクションを追加します。第一引数にアクション名、第二引数にアクションが選択された際のコールバック関数を渡します。 コールバック関数には、第一引数に投稿フォームオブジェクトが渡されます。
+
+### Plugin:register_note_action(title fn)
+ノートメニューに項目を追加します。第一引数に項目名、第二引数に項目が選択された際のコールバック関数を渡します。 コールバック関数には、第一引数に対象のノートオブジェクトが渡されます。
+
+### Plugin:register_user_action(title fn)
+ユーザーメニューに項目を追加します。第一引数に項目名、第二引数に項目が選択された際のコールバック関数を渡します。 コールバック関数には、第一引数に対象のユーザーオブジェクトが渡されます。
+
+### Plugin:register_note_view_interruptor(fn)
+UIに表示されるノート情報を書き換えます。 コールバック関数には、第一引数に対象のノートオブジェクトが渡されます。 コールバック関数の返り値でノートが書き換えられます。
+
+### Plugin:register_note_post_interruptor(fn)
+ノート投稿時にノート情報を書き換えます。 コールバック関数には、第一引数に対象のノートオブジェクトが渡されます。 コールバック関数の返り値でノートが書き換えられます。
+
+### Plugin:open_url(url)
+第一引数に渡されたURLをブラウザの新しいタブで開きます。
+
+### Plugin:config
+プラグインの設定が格納されるオブジェクト。プラグイン定義のconfigで設定したキーで値が入ります。
diff --git a/src/docs/no-NO/advanced/develop-bot.md b/src/docs/no-NO/advanced/develop-bot.md
new file mode 100644
index 0000000000..7f825e9bc4
--- /dev/null
+++ b/src/docs/no-NO/advanced/develop-bot.md
@@ -0,0 +1,6 @@
+# Botの作成
+[Misskey API](./api)を利用してBotの開発が可能です。 また、いくつかのBot実装が公開されているため、ぜひ参考にしてください。
+
+- [syuilo/ai](https://github.com/syuilo/ai) ... Node.js上で動く、TypeScript製Bot実装
+
+Botを作成したときは、プロフィール設定からBotフラグをオンにしておくことを強くおすすめします。
diff --git a/src/docs/no-NO/advanced/reversi-bot.md b/src/docs/no-NO/advanced/reversi-bot.md
new file mode 100644
index 0000000000..7ab2a7212e
--- /dev/null
+++ b/src/docs/no-NO/advanced/reversi-bot.md
@@ -0,0 +1,160 @@
+# MisskeyリバーシBotの開発
+Misskeyのリバーシ機能に対応したBotの開発方法をここに記します。
+
+1. `games/reversi`ストリームに以下のパラメータを付けて接続する:
+    * `i`: botアカウントのAPIキー
+
+2. 対局への招待が来たら、ストリームから`invited`イベントが流れてくる
+    * イベントの中身に、`parent`という名前で対局へ誘ってきたユーザーの情報が含まれている
+
+3. `games/reversi/match`へ、`user_id`として`parent`の`id`が含まれたリクエストを送信する
+
+4. 上手くいくとゲーム情報が返ってくるので、`games/reversi-game`ストリームへ、以下のパラメータを付けて接続する:
+    * `i`: botアカウントのAPIキー
+    * `game`: `game`の`id`
+
+5. この間、相手がゲームの設定を変更するとその都度`update-settings`イベントが流れてくるので、必要であれば何かしらの処理を行う
+
+6. 設定に満足したら、`{ type: 'accept' }`メッセージをストリームに送信する
+
+7. ゲームが開始すると、`started`イベントが流れてくる
+    * イベントの中身にはゲーム情報が含まれている
+
+8. 石を打つには、ストリームに`{ type: 'set', pos: <位置> }`を送信する(位置の計算方法は後述)
+
+9. 相手または自分が石を打つと、ストリームから`set`イベントが流れてくる
+    * `color`として石の色が含まれている
+    * `pos`として位置情報が含まれている
+
+## 位置の計算法
+8x8のマップを考える場合、各マスの位置(インデックスと呼びます)は次のようになっています:
+```
++--+--+--+--+--+--+--+--+
+| 0| 1| 2| 3| 4| 5| 6| 7|
++--+--+--+--+--+--+--+--+
+| 8| 9|10|11|12|13|14|15|
++--+--+--+--+--+--+--+--+
+|16|17|18|19|20|21|22|23|
+...
+```
+
+### X,Y座標 から インデックス に変換する
+```
+pos = x + (y * mapWidth)
+```
+`mapWidth`は、ゲーム情報の`map`から、次のようにして計算できます:
+```
+mapWidth = map[0].length
+```
+
+### インデックス から X,Y座標 に変換する
+```
+x = pos % mapWidth
+y = Math.floor(pos / mapWidth)
+```
+
+## マップ情報
+マップ情報は、ゲーム情報の`map`に入っています。 文字列の配列になっており、ひとつひとつの文字がマス情報を表しています。 それをもとにマップのデザインを知る事が出来ます:
+* `(スペース)` ... マス無し
+* `-` ... マス
+* `b` ... 初期配置される黒石
+* `w` ... 初期配置される白石
+
+例えば、4*4の次のような単純なマップがあるとします:
+```text
++---+---+---+---+
+|   |   |   |   |
++---+---+---+---+
+|   | ○ | ● |   |
++---+---+---+---+
+|   | ● | ○ |   |
++---+---+---+---+
+|   |   |   |   |
++---+---+---+---+
+```
+
+この場合、マップデータはこのようになります:
+```javascript
+['----', '-wb-', '-bw-', '----']
+```
+
+## ユーザーにフォームを提示して対話可能Botを作成する
+ユーザーとのコミュニケーションを行うため、ゲームの設定画面でユーザーにフォームを提示することができます。 例えば、Botの強さをユーザーが設定できるようにする、といったシナリオが考えられます。
+
+フォームを提示するには、`reversi-game`ストリームに次のメッセージを送信します:
+```javascript
+{
+  type: 'init-form',
+  body: [フォームコントロールの配列]
+}
+```
+
+フォームコントロールの配列については今から説明します。 フォームコントロールは、次のようなオブジェクトです:
+```javascript
+{
+  id: 'switch1',
+  type: 'switch',
+  label: 'Enable hoge',
+  value: false
+}
+```
+`id` ... コントロールのID。 `type` ... コントロールの種類。後述します。 `label` ... コントロールと一緒に表記するテキスト。 `value` ... コントロールのデフォルト値。
+
+### フォームの操作を受け取る
+ユーザーがフォームを操作すると、ストリームから`update-form`イベントが流れてきます。 イベントの中身には、コントロールのIDと、ユーザーが設定した値が含まれています。 例えば、上で示したスイッチをユーザーがオンにしたとすると、次のイベントが流れてきます:
+```javascript
+{
+  id: 'switch1',
+  value: true
+}
+```
+
+### フォームコントロールの種類
+#### スイッチ
+type: `switch` スイッチを表示します。何かの機能をオン/オフさせたい場合に有用です。
+
+##### プロパティ
+`label` ... スイッチに表記するテキスト。
+
+#### ラジオボタン
+type: `radio` ラジオボタンを表示します。選択肢を提示するのに有用です。例えば、Botの強さを設定させるなどです。
+
+##### プロパティ
+`items` ... ラジオボタンの選択肢。例:
+```javascript
+items: [{
+  label: 'å¼±',
+  value: 1
+}, {
+  label: '中',
+  value: 2
+}, {
+  label: 'å¼·',
+  value: 3
+}]
+```
+
+#### スライダー
+type: `slider` スライダーを表示します。
+
+##### プロパティ
+`min` ... スライダーの下限。 `max` ... スライダーの上限。 `step` ... 入力欄で刻むステップ値。
+
+#### テキストボックス
+type: `textbox` テキストボックスを表示します。ユーザーになにか入力させる一般的な用途に利用できます。
+
+## ユーザーにメッセージを表示する
+設定画面でユーザーと対話する、フォーム以外のもうひとつの方法がこれです。ユーザーになにかメッセージを表示することができます。 例えば、ユーザーがBotの対応していないモードやマップを選択したとき、警告を表示するなどです。 メッセージを表示するには、次のメッセージをストリームに送信します:
+```javascript
+{
+  type: 'message',
+  body: {
+    text: 'メッセージ内容',
+    type: 'メッセージの種類'
+  }
+}
+```
+メッセージの種類: `success`, `info`, `warning`, `error`。
+
+## 投了する
+投了をするには、<a href="./api/endpoints/games/reversi/games/surrender">このエンドポイント</a>にリクエストします。
diff --git a/src/docs/no-NO/advanced/stream.md b/src/docs/no-NO/advanced/stream.md
new file mode 100644
index 0000000000..0e5edd2b0c
--- /dev/null
+++ b/src/docs/no-NO/advanced/stream.md
@@ -0,0 +1,350 @@
+# ストリーミングAPI
+
+ストリーミングAPIを使うと、リアルタイムで様々な情報(例えばタイムラインに新しい投稿が流れてきた、メッセージが届いた、フォローされた、など)を受け取ったり、様々な操作を行ったりすることができます。
+
+## ストリームに接続する
+
+ストリーミングAPIを利用するには、まずMisskeyサーバーに**websocket**接続する必要があります。
+
+以下のURLに、`i`というパラメータ名で認証情報を含めて、websocket接続してください。例:
+```
+%WS_URL%/streaming?i=xxxxxxxxxxxxxxx
+```
+
+認証情報は、自分のAPIキーや、アプリケーションからストリームに接続する際はユーザーのアクセストークンのことを指します。
+
+<div class="info">ℹ️ 認証情報の取得については、<a href="./api">こちらのドキュメント</a>をご確認ください。</div>
+
+---
+
+認証情報は省略することもできますが、その場合非ログインでの利用ということになり、受信できる情報や可能な操作は限られます。例:
+
+```
+%WS_URL%/streaming
+```
+
+---
+
+ストリームに接続すると、後述するAPI操作や、投稿の購読を行ったりすることができます。 しかしまだこの段階では、例えばタイムラインへの新しい投稿を受信したりすることはできません。 それを行うには、ストリーム上で、後述する**チャンネル**に接続する必要があります。
+
+**ストリームでのやり取りはすべてJSONです。**
+
+## チャンネル
+MisskeyのストリーミングAPIにはチャンネルという概念があります。これは、送受信する情報を分離するための仕組みです。 Misskeyのストリームに接続しただけでは、まだリアルタイムでタイムラインの投稿を受信したりはできません。 ストリーム上でチャンネルに接続することで、様々な情報を受け取ったり情報を送信したりすることができるようになります。
+
+ひとつのストリーム上で、同時に複数のチャンネルに接続することができます。
+
+### チャンネルに接続する
+チャンネルに接続するには、次のようなデータをJSONでストリームに送信します:
+
+```json
+{
+    type: 'connect',
+    body: {
+        channel: 'xxxxxxxx',
+        id: 'foobar',
+        params: {
+            ...
+        }
+    }
+}
+```
+
+ここで、
+* `channel`には接続したいチャンネル名を設定します。チャンネルの種類については後述します。
+* `id`にはそのチャンネルとやり取りするための任意のIDを設定します。ストリームでは様々なメッセージが流れるので、そのメッセージがどのチャンネルからのものなのか識別する必要があるからです。このIDは、UUIDや、乱数のようなもので構いません。
+* `params`はチャンネルに接続する際のパラメータです。チャンネルによって接続時に必要とされるパラメータは異なります。パラメータ不要のチャンネルに接続する際は、このプロパティは省略可能です。
+
+<div class="info">ℹ️ IDはチャンネルごとではなく「チャンネルの接続ごと」です。なぜなら、同じチャンネルに異なるパラメータで複数接続するケースもあるからです。</div>
+
+### チャンネルからのメッセージを受け取る
+例えばタイムラインのチャンネルなら、新しい投稿があった時にメッセージを発します。そのメッセージを受け取ることで、タイムラインに新しい投稿がされたことをリアルタイムで知ることができます。
+
+チャンネルがメッセージを発すると、次のようなデータがJSONでストリームに流れてきます:
+```json
+{
+    type: 'channel',
+    body: {
+        id: 'foobar',
+        type: 'something',
+        body: {
+            some: 'thing'
+        }
+    }
+}
+```
+
+ここで、
+* `id`には前述したそのチャンネルに接続する際に設定したIDが設定されています。これで、このメッセージがどのチャンネルからのものなのか知ることができます。
+* `type`にはメッセージの種類が設定されます。チャンネルによって、どのような種類のメッセージが流れてくるかは異なります。
+* `body`にはメッセージの内容が設定されます。チャンネルによって、どのような内容のメッセージが流れてくるかは異なります。
+
+### チャンネルに向けてメッセージを送信する
+チャンネルによっては、メッセージを受け取るだけでなく、こちらから何かメッセージを送信し、何らかの操作を行える場合があります。
+
+チャンネルにメッセージを送信するには、次のようなデータをJSONでストリームに送信します:
+```json
+{
+    type: 'channel',
+    body: {
+        id: 'foobar',
+        type: 'something',
+        body: {
+            some: 'thing'
+        }
+    }
+}
+```
+
+ここで、
+* `id`には前述したそのチャンネルに接続する際に設定したIDを設定します。これで、このメッセージがどのチャンネルに向けたものなのか識別させることができます。
+* `type`にはメッセージの種類を設定します。チャンネルによって、どのような種類のメッセージを受け付けるかは異なります。
+* `body`にはメッセージの内容を設定します。チャンネルによって、どのような内容のメッセージを受け付けるかは異なります。
+
+### チャンネルから切断する
+チャンネルから切断するには、次のようなデータをJSONでストリームに送信します:
+
+```json
+{
+    type: 'disconnect',
+    body: {
+        id: 'foobar'
+    }
+}
+```
+
+ここで、
+* `id`には前述したそのチャンネルに接続する際に設定したIDを設定します。
+
+## ストリームを経由してAPIリクエストする
+
+ストリームを経由してAPIリクエストすると、HTTPリクエストを発生させずにAPIを利用できます。そのため、コードを簡潔にできたり、パフォーマンスの向上を見込めるかもしれません。
+
+ストリームを経由してAPIリクエストするには、次のようなデータをJSONでストリームに送信します:
+```json
+{
+    type: 'api',
+    body: {
+        id: 'xxxxxxxxxxxxxxxx',
+        endpoint: 'notes/create',
+        data: {
+            text: 'yee haw!'
+        }
+    }
+}
+```
+
+ここで、
+* `id`には、APIのレスポンスを識別するための、APIリクエストごとの一意なIDを設定する必要があります。UUIDや、簡単な乱数のようなもので構いません。
+* `endpoint`には、あなたがリクエストしたいAPIのエンドポイントを指定します。
+* `data`には、エンドポイントのパラメータを含めます。
+
+<div class="info">ℹ️ APIのエンドポイントやパラメータについてはAPIリファレンスをご確認ください。</div>
+
+### レスポンスの受信
+
+APIへリクエストすると、レスポンスがストリームから次のような形式で流れてきます。
+
+```json
+{
+    type: 'api:xxxxxxxxxxxxxxxx',
+    body: {
+        ...
+    }
+}
+```
+
+ここで、
+* `xxxxxxxxxxxxxxxx`の部分には、リクエストの際に設定された`id`が含まれています。これにより、どのリクエストに対するレスポンスなのか判別することができます。
+* `body`には、レスポンスが含まれています。
+
+## 投稿のキャプチャ
+
+Misskeyは投稿のキャプチャと呼ばれる仕組みを提供しています。これは、指定した投稿のイベントをストリームで受け取る機能です。
+
+例えばタイムラインを取得してユーザーに表示したとします。ここで誰かがそのタイムラインに含まれるどれかの投稿に対してリアクションしたとします。
+
+しかし、クライアントからするとある投稿にリアクションが付いたことなどは知る由がないため、リアルタイムでリアクションをタイムライン上の投稿に反映して表示するといったことができません。
+
+この問題を解決するために、Misskeyは投稿のキャプチャ機構を用意しています。投稿をキャプチャすると、その投稿に関するイベントを受け取ることができるため、リアルタイムでリアクションを反映させたりすることが可能になります。
+
+### 投稿をキャプチャする
+
+投稿をキャプチャするには、ストリームに次のようなメッセージを送信します:
+
+```json
+{
+    type: 'subNote',
+    body: {
+        id: 'xxxxxxxxxxxxxxxx'
+    }
+}
+```
+
+ここで、
+* `id`にキャプチャしたい投稿の`id`を設定します。
+
+このメッセージを送信すると、Misskeyにキャプチャを要請したことになり、以後、その投稿に関するイベントが流れてくるようになります。
+
+例えば投稿にリアクションが付いたとすると、次のようなメッセージが流れてきます:
+
+```json
+{
+    type: 'noteUpdated',
+    body: {
+        id: 'xxxxxxxxxxxxxxxx',
+        type: 'reacted',
+        body: {
+            reaction: 'like',
+            userId: 'yyyyyyyyyyyyyyyy'
+        }
+    }
+}
+```
+
+ここで、
+* `body`内の`id`に、イベントを発生させた投稿のIDが設定されます。
+* `body`内の`type`に、イベントの種類が設定されます。
+* `body`内の`body`に、イベントの詳細が設定されます。
+
+#### イベントの種類
+
+##### `reacted`
+その投稿にリアクションがされた時に発生します。
+
+* `reaction`に、リアクションの種類が設定されます。
+* `userId`に、リアクションを行ったユーザーのIDが設定されます。
+
+例:
+```json
+{
+    type: 'noteUpdated',
+    body: {
+        id: 'xxxxxxxxxxxxxxxx',
+        type: 'reacted',
+        body: {
+            reaction: 'like',
+            userId: 'yyyyyyyyyyyyyyyy'
+        }
+    }
+}
+```
+
+##### `deleted`
+その投稿が削除された時に発生します。
+
+* `deletedAt`に、削除日時が設定されます。
+
+例:
+```json
+{
+    type: 'noteUpdated',
+    body: {
+        id: 'xxxxxxxxxxxxxxxx',
+        type: 'deleted',
+        body: {
+            deletedAt: '2018-10-22T02:17:09.703Z'
+        }
+    }
+}
+```
+
+##### `pollVoted`
+その投稿に添付されたアンケートに投票された時に発生します。
+
+* `choice`に、選択肢IDが設定されます。
+* `userId`に、投票を行ったユーザーのIDが設定されます。
+
+例:
+```json
+{
+    type: 'noteUpdated',
+    body: {
+        id: 'xxxxxxxxxxxxxxxx',
+        type: 'pollVoted',
+        body: {
+            choice: 2,
+            userId: 'yyyyyyyyyyyyyyyy'
+        }
+    }
+}
+```
+
+### 投稿のキャプチャを解除する
+
+その投稿がもう画面に表示されなくなったりして、その投稿に関するイベントをもう受け取る必要がなくなったときは、キャプチャの解除を申請してください。
+
+次のメッセージを送信します:
+
+```json
+{
+    type: 'unsubNote',
+    body: {
+        id: 'xxxxxxxxxxxxxxxx'
+    }
+}
+```
+
+ここで、
+* `id`にキャプチャを解除したい投稿の`id`を設定します。
+
+このメッセージを送信すると、以後、その投稿に関するイベントは流れてこないようになります。
+
+# チャンネル一覧
+## `main`
+アカウントに関する基本的な情報が流れてきます。このチャンネルにパラメータはありません。
+
+### 流れてくるイベント一覧
+
+#### `renote`
+自分の投稿がRenoteされた時に発生するイベントです。自分自身の投稿をRenoteしたときは発生しません。
+
+#### `mention`
+誰かからメンションされたときに発生するイベントです。
+
+#### `readAllNotifications`
+自分宛ての通知がすべて既読になったことを表すイベントです。このイベントを利用して、「通知があることを示すアイコン」のようなものをオフにしたりする等のケースが想定されます。
+
+#### `meUpdated`
+自分の情報が更新されたことを表すイベントです。
+
+#### `follow`
+自分が誰かをフォローしたときに発生するイベントです。
+
+#### `unfollow`
+自分が誰かのフォローを解除したときに発生するイベントです。
+
+#### `followed`
+自分が誰かにフォローされたときに発生するイベントです。
+
+## `homeTimeline`
+ホームタイムラインの投稿情報が流れてきます。このチャンネルにパラメータはありません。
+
+### 流れてくるイベント一覧
+
+#### `note`
+タイムラインに新しい投稿が流れてきたときに発生するイベントです。
+
+## `localTimeline`
+ローカルタイムラインの投稿情報が流れてきます。このチャンネルにパラメータはありません。
+
+### 流れてくるイベント一覧
+
+#### `note`
+ローカルタイムラインに新しい投稿が流れてきたときに発生するイベントです。
+
+## `hybridTimeline`
+ソーシャルタイムラインの投稿情報が流れてきます。このチャンネルにパラメータはありません。
+
+### 流れてくるイベント一覧
+
+#### `note`
+ソーシャルタイムラインに新しい投稿が流れてきたときに発生するイベントです。
+
+## `globalTimeline`
+グローバルタイムラインの投稿情報が流れてきます。このチャンネルにパラメータはありません。
+
+### 流れてくるイベント一覧
+
+#### `note`
+グローバルタイムラインに新しい投稿が流れてきたときに発生するイベントです。
diff --git a/src/docs/no-NO/features/antenna.md b/src/docs/no-NO/features/antenna.md
new file mode 100644
index 0000000000..94ad9e4aea
--- /dev/null
+++ b/src/docs/no-NO/features/antenna.md
@@ -0,0 +1,4 @@
+# アンテナ
+アンテナは、自由に条件を設定して、合致するノートを自動で収集することができる機能です。
+
+条件を設定したアンテナが作成された状態で、条件に合致するノートが投稿されると、リアルタイムでそのアンテナのタイムラインにノートが追加されます。
diff --git a/src/docs/no-NO/features/custom-emoji.md b/src/docs/no-NO/features/custom-emoji.md
new file mode 100644
index 0000000000..ed2e92be16
--- /dev/null
+++ b/src/docs/no-NO/features/custom-emoji.md
@@ -0,0 +1,2 @@
+# カスタム絵文字
+カスタム絵文字は、インスタンスで用意された画像を絵文字のように使える機能です。 ノート、リアクション、チャット、自己紹介、名前などの場所で使うことができます。 カスタム絵文字をそれらの場所で使うには、絵文字ピッカーボタン(ある場合)を押すか、`:`を入力して絵文字サジェストを表示します。 テキスト内に`:foo:`のような形式の文字列が見つかると、`foo`の部分がカスタム絵文字名と解釈され、表示時には対応したカスタム絵文字に置き換わります。
diff --git a/src/docs/no-NO/features/deck.md b/src/docs/no-NO/features/deck.md
new file mode 100644
index 0000000000..8057e262fd
--- /dev/null
+++ b/src/docs/no-NO/features/deck.md
@@ -0,0 +1,18 @@
+# デッキ
+
+デッキは利用可能なUIのひとつです。「カラム」と呼ばれるビューを複数並べて表示させることで、カスタマイズ性が高く、情報量の多いUIが構築できることが特徴です。
+
+## カラムの追加
+デッキの背景を右クリックし、「カラムを追加」して任意のカラムを追加できます。
+
+## カラムの移動
+カラムは、ドラッグアンドドロップで他のカラムと位置を入れ替えることが出来るほか、カラムメニュー(カラムのヘッダー右クリック)から位置を移動させることもできます。
+
+## カラムの水平分割
+カラムは左右だけでなく、上下に並べることもできます。 カラムメニューを開き、「左に重ねる」を選択すると、左のカラムの下に現在のカラムが移動します。 上下分割を解除するには、カラムメニューの「右に出す」を選択します。
+
+## カラムの設定
+カラムメニューの「編集」を選択するとカラムの設定を編集できます。カラムの名前を変えたり、幅を変えたりできます。
+
+## デッキの設定
+デッキに関する設定は、[settings/deck](/settings/deck)で行えます。
diff --git a/src/docs/no-NO/features/drive.md b/src/docs/no-NO/features/drive.md
new file mode 100644
index 0000000000..b82a41082a
--- /dev/null
+++ b/src/docs/no-NO/features/drive.md
@@ -0,0 +1,17 @@
+# ドライブ
+ドライブは、Misskey上でファイルを管理できる機能です。
+
+[ドライブのページ](/my/drive)から任意のファイルをアップロードできるほか、アバターに設定した画像や、ノートに添付したファイルなどもすべてドライブにアップロードされます。
+
+<div class="warn">⚠️ ドライブからファイルを削除すると、そのファイルが添付されたノートも消えます。</div>
+
+ドライブにアップロードされたファイルは、いつでもダウンロードすることができるほか、ノート作成時に「ドライブからファイルを添付」することでファイルを再利用することもできます。
+
+ドライブ内にフォルダを作り、複数のファイルをまとめて整理することもできます。
+
+## 閲覧注意 (NSFW)
+<div class="info">ℹ️ この項目が閲覧注意なわけではありません</div>
+
+閲覧注意またはNSFW (Not safe for work) は、ドライブのファイルに設定することができるフラグです。 閲覧注意フラグを設定されたファイルは、表示される際に閲覧者の操作なしには表示されなくなります。 このフラグは、例えば職場や公共の場で閲覧するのに適切でないと思われる画像などに設定し、そのような画像が突然表示されてしまうことを防ぐ目的で使われます。
+
+このフラグは手動でオンオフを切り替えられるほか、モデレーターの判断で設定される場合もあります。
diff --git a/src/docs/no-NO/features/favorite.md b/src/docs/no-NO/features/favorite.md
new file mode 100644
index 0000000000..a0e5f8bf78
--- /dev/null
+++ b/src/docs/no-NO/features/favorite.md
@@ -0,0 +1,4 @@
+# お気に入り
+[ノート](./node)をお気に入りとして登録できる機能です。 お気に入り登録したノートは、[お気に入りページ](./my/favorites)で一覧することができます。 お気に入りに登録したことは相手に通知されず、お気に入りは自分しか見ることができません。
+
+ノートをお気に入り登録するには、ノートメニューの「お気に入り」を押します。お気に入り解除するには、ノートメニューの「お気に入り解除」を押します。
diff --git a/src/docs/no-NO/features/follow.md b/src/docs/no-NO/features/follow.md
new file mode 100644
index 0000000000..3c1ea7bbe0
--- /dev/null
+++ b/src/docs/no-NO/features/follow.md
@@ -0,0 +1,2 @@
+# フォロー
+ユーザーをフォローすると、タイムラインにそのユーザーの投稿が表示されるようになります。ただし、他のユーザーに対する返信は含まれません。 ユーザーをフォローするには、ユーザーページの「フォロー」ボタンをクリックします。フォローを解除するには、もう一度クリックします。
diff --git a/src/docs/no-NO/features/keyboard-shortcut.md b/src/docs/no-NO/features/keyboard-shortcut.md
new file mode 100644
index 0000000000..8659ace982
--- /dev/null
+++ b/src/docs/no-NO/features/keyboard-shortcut.md
@@ -0,0 +1,66 @@
+# キーボードショートカット
+
+## グローバル
+これらのショートカットは基本的にどこでも使えます。
+<table>
+    <thead>
+        <tr><th>ショートカット</th><th>効果</th><th>由来</th></tr>
+    </thead>
+    <tbody>
+        <tr><td><kbd class="key">P</kbd>, <kbd class="key">N</kbd></td><td>新規投稿</td><td><b>P</b>ost, <b>N</b>ew, <b>N</b>ote</td></tr>
+        <tr><td><kbd class="key">T</kbd></td><td>タイムラインの最も新しい投稿にフォーカス</td><td><b>T</b>imeline, <b>T</b>op</td></tr>
+        <tr><td><kbd class="group"><kbd class="key">Shift</kbd> + <kbd class="key">N</kbd></kbd></td><td>通知を表示/隠す</td><td><b>N</b>otifications</td></tr>
+        <tr><td><kbd class="key">S</kbd></td><td>検索</td><td><b>S</b>earch</td></tr>
+        <tr><td><kbd class="key">H</kbd>, <kbd class="key">?</kbd></td><td>ヘルプを表示</td><td><b>H</b>elp</td></tr>
+    </tbody>
+</table>
+
+## 投稿にフォーカスされた状態
+<table>
+    <thead>
+        <tr><th>ショートカット</th><th>効果</th><th>由来</th></tr>
+    </thead>
+    <tbody>
+        <tr><td><kbd class="key">↑</kbd>, <kbd class="key">K</kbd>, <kbd class="group"><kbd class="key">Shift</kbd> + <kbd class="key">Tab</kbd></kbd></td><td>上の投稿にフォーカスを移動</td><td>-</td></tr>
+        <tr><td><kbd class="key">↓</kbd>, <kbd class="key">J</kbd>, <kbd class="key">Tab</kbd></td><td>下の投稿にフォーカスを移動</td><td>-</td></tr>
+        <tr><td><kbd class="key">R</kbd></td><td>返信フォームを開く</td><td><b>R</b>eply</td></tr>
+        <tr><td><kbd class="key">Q</kbd></td><td>Renoteフォームを開く</td><td><b>Q</b>uote</td></tr>
+        <tr><td><kbd class="group"><kbd class="key">Ctrl</kbd> + <kbd class="key">Q</kbd></kbd></td><td>即刻Renoteする(フォームを開かずに)</td><td>-</td></tr>
+        <tr><td><kbd class="key">E</kbd>, <kbd class="key">A</kbd>, <kbd class="key">+</kbd></td><td>リアクションフォームを開く</td><td><b>E</b>mote, re<b>A</b>ction</td></tr>
+        <tr><td><kbd class="key">0</kbd>~<kbd class="key">9</kbd></td><td>数字に対応したリアクションをする(対応については後述)</td><td>-</td></tr>
+        <tr><td><kbd class="key">F</kbd>, <kbd class="key">B</kbd></td><td>お気に入りに登録</td><td><b>F</b>avorite, <b>B</b>ookmark</td></tr>
+        <tr><td><kbd class="key">Del</kbd>, <kbd class="group"><kbd class="key">Ctrl</kbd> + <kbd class="key">D</kbd></kbd></td><td>投稿を削除</td><td><b>D</b>elete</tr>
+        <tr><td><kbd class="key">M</kbd>, <kbd class="key">O</kbd></td><td>投稿に対するメニューを開く</td><td><b>M</b>ore, <b>O</b>ther</td></tr>
+        <tr><td><kbd class="key">S</kbd></td><td>CWで隠された部分を表示 or 隠す</td><td><b>S</b>how, <b>S</b>ee</td></tr>
+        <tr><td><kbd class="key">Esc</kbd></td><td>フォーカスを外す</td><td>-</td></tr>
+    </tbody>
+</table>
+
+## Renoteフォーム
+<table>
+    <thead>
+        <tr><th>ショートカット</th><th>効果</th><th>由来</th></tr>
+    </thead>
+    <tbody>
+        <tr><td><kbd class="key">Enter</kbd></td><td>Renoteする</td><td>-</td></tr>
+        <tr><td><kbd class="key">Q</kbd></td><td>フォームを展開する</td><td><b>Q</b>uote</td></tr>
+        <tr><td><kbd class="key">Esc</kbd></td><td>フォームを閉じる</td><td>-</td></tr>
+    </tbody>
+</table>
+
+## リアクションフォーム
+デフォルトで「👍」にフォーカスが当たっている状態です。
+<table>
+    <thead>
+        <tr><th>ショートカット</th><th>効果</th><th>由来</th></tr>
+    </thead>
+    <tbody>
+        <tr><td><kbd class="key">↑</kbd>, <kbd class="key">K</kbd></td><td>上のリアクションにフォーカスを移動</td><td>-</td></tr>
+        <tr><td><kbd class="key">↓</kbd>, <kbd class="key">J</kbd></td><td>下のリアクションにフォーカスを移動</td><td>-</td></tr>
+        <tr><td><kbd class="key">←</kbd>, <kbd class="key">H</kbd>, <kbd class="group"><kbd class="key">Shift</kbd> + <kbd class="key">Tab</kbd></kbd></td><td>左のリアクションにフォーカスを移動</td><td>-</td></tr>
+        <tr><td><kbd class="key">→</kbd>, <kbd class="key">L</kbd>, <kbd class="key">Tab</kbd></td><td>右のリアクションにフォーカスを移動</td><td>-</td></tr>
+        <tr><td><kbd class="key">Enter</kbd>, <kbd class="key">Space</kbd>, <kbd class="key">+</kbd></td><td>リアクション確定</td><td>-</td></tr>
+        <tr><td><kbd class="key">0</kbd>~<kbd class="key">9</kbd></td><td>数字に対応したリアクションで確定</td><td>-</td></tr>
+        <tr><td><kbd class="key">Esc</kbd></td><td>リアクションするのをやめる</td><td>-</td></tr>
+    </tbody>
+</table>
diff --git a/src/docs/no-NO/features/mfm.md b/src/docs/no-NO/features/mfm.md
new file mode 100644
index 0000000000..5be2df4f30
--- /dev/null
+++ b/src/docs/no-NO/features/mfm.md
@@ -0,0 +1,12 @@
+# MFM
+MFMは、Misskey Flavored Markdownの略で、Misskeyの様々な場所で使用できる専用のマークアップ言語です。 MFMで使用可能な構文は[MFMチートシート](/mfm-cheat-sheet)で確認できます。
+
+## MFMが使用可能な場所の例
+- ノート本文
+- CW注釈
+- ユーザーの名前
+- ユーザーの自己紹介
+
+## 開発者向け情報
+MFMのパーサー実装はライブラリとして公開されており、簡単にクライアントにMFMを組み込むことが可能です。
+- [misskey-dev/mfm.js](https://github.com/misskey-dev/mfm.js) - JavaScriptパーサー実装
diff --git a/src/docs/no-NO/features/mute.md b/src/docs/no-NO/features/mute.md
new file mode 100644
index 0000000000..6a9608662a
--- /dev/null
+++ b/src/docs/no-NO/features/mute.md
@@ -0,0 +1,13 @@
+# ミュート
+
+ユーザーをミュートすると、そのユーザーに関する次のコンテンツがMisskeyに表示されなくなります:
+
+* タイムラインや投稿の検索結果内の、そのユーザーの投稿(およびそれらの投稿に対する返信やRenote)
+* そのユーザーからの通知
+* メッセージ履歴一覧内の、そのユーザーとのメッセージ履歴
+
+ユーザーをミュートするには、対象のユーザーのユーザーページに表示されている「ミュート」ボタンを押します。
+
+ミュートを行ったことは相手に通知されず、ミュートされていることを知ることもできません。
+
+設定>ミュート から、自分がミュートしているユーザー一覧を確認することができます。
diff --git a/src/docs/no-NO/features/note.md b/src/docs/no-NO/features/note.md
new file mode 100644
index 0000000000..62440b25f9
--- /dev/null
+++ b/src/docs/no-NO/features/note.md
@@ -0,0 +1,51 @@
+# ノート
+ノートは、Misskeyに投稿される、文章、ファイル、アンケートなどを含むコンテンツで、Misskeyの中心的概念です。また、そのノートを作成する行為自体もノートと呼ばれます。
+
+ノートが作成されると、[タイムライン](./timeline)に追加され、自分の[フォロワー](./follow)やサーバーのユーザーが見れるようになります。
+
+ノートには、[リアクション](./reaction)を行うことができます。また、返信や引用もできます。
+
+ノートを[お気に入り](./favorite)登録することで、後で簡単に見返すことができます。
+
+## ノートを作成する
+ノートを作成するには、画面上にある鉛筆マークのボタンを押して、作成フォームを開きます。作成フォームに内容を入力し、「ノート」ボタンを押すことでノートが作成されます。 ノートには、画像、動画など任意のファイルや、[アンケート](./poll)を添付することができます。また、本文中には[MFM](./mfm)が使用でき、[メンション](./mention)や[ハッシュタグ](./hashtag)を含めることもできます。 他にも、CWや公開範囲といった設定も行えます(詳細は後述)。
+<div class="info">ℹ️ コンピューターのクリップボードに画像データがある状態で、フォーム内のテキストボックスにペーストするとその画像を添付することができます。</div>
+<div class="info">ℹ️ テキストボックス内で<kbd class="key">Ctrl + Enter</kbd>を押すことでも投稿できます。</div>
+
+## Renote
+既にあるノートを引用、もしくはそのノートを新しいノートとして共有する行為、またそれによって作成されたノートをRenoteと呼びます。 自分がフォローしているユーザーの、気に入ったノートを自分のフォロワーに共有したい場合や、過去の自分のノートを再度共有したい場合に使います。 同じノートに対して無制限にRenoteを行うことができますが、あまり連続して使用すると迷惑になる場合もあるので、注意しましょう。
+<div class="warn">⚠️ 公開範囲がフォロワーやダイレクトのノートはRenoteできません</div>
+
+Renoteを削除するには、Renoteの時刻表示の隣にある「...」を押し、「Renote解除」を選択します。
+
+## CW
+Contents Warningの略で、ノートの内容を、閲覧者の操作なしには表示しないようにできる機能です。主に長大な内容を隠すためや、ネタバレ防止などに使うことができます。 設定するには、フォームの「内容を隠す」ボタン(目のアイコン)を押します。すると新しい入力エリアが表れるので、そこに内容の要約を記入します。
+
+## 公開範囲
+ノートごとに、そのノートが公開される範囲を設定することができます。フォームの「ノート」ボタンの左にあるアイコンを押すと公開範囲を以下から選択できます。
+
+### パブリック
+全ての人に対してノートが公開されるほか、サーバーの全てのタイムライン(ホームタイムライン、ローカルタイムライン、ソーシャルタイムライン、グローバルタイムライン)にノートが流れます。
+<div class="warn">⚠️ アカウントが<a href="./silence">サイレンス</a>状態の時は、この公開範囲は使用できません。</div>
+
+### ホーム
+全ての人に対してノートが公開されますが、フォロワー以外のローカルタイムライン、ソーシャルタイムライン、グローバルタイムラインにはノートは流れません。
+
+### フォロワー
+自分のフォロワーに対してのみノートを公開します。フォロワーの全てのタイムラインに流れます。
+
+### ダイレクト
+指定したユーザーに対してのみノートを公開します。指定したユーザーの全てのタイムラインに流れます。
+
+### 「ローカルのみ」オプション
+このオプションを有効にすると、リモートにノートを連合しなくなります。
+
+### 公開範囲の比較
+<table>
+    <tr><th></th><th>パブリック</th><th>ホーム</th><th>フォロワー</th><th>ダイレクト</th></tr>
+    <tr><th>フォロワーのLTL/STL/GTL</th><td>✔</td><td>✔</td><td>✔</td><td></td></tr>
+    <tr><th>非フォロワーのLTL/STL/GTL</th><td>✔</td><td></td><td></td><td></td></tr>
+</table>
+
+## ピン留め
+ノートをピン留めすると、ユーザーページに常にそのノートを表示しておくことができます。 ノートのメニューを開き、「ピン留め」を選択してピン留めできます。 複数のノートをピン留めできます。
diff --git a/src/docs/no-NO/features/pages.md b/src/docs/no-NO/features/pages.md
new file mode 100644
index 0000000000..a7311b95e6
--- /dev/null
+++ b/src/docs/no-NO/features/pages.md
@@ -0,0 +1,10 @@
+# Pages
+
+## 変数
+変数を使うことで動的なページを作成できます。テキスト内で <b>{ 変数名 }</b> と書くとそこに変数の値を埋め込めます。例えば <b>Hello { thing } world!</b> というテキストで、変数(thing)の値が <b>ai</b> だった場合、テキストは <b>Hello ai world!</b> になります。
+
+変数の評価(値を算出すること)は上から下に行われるので、ある変数の中で自分より下の変数を参照することはできません。例えば上から <b>A、B、C</b> と3つの変数を定義したとき、<b>C</b>の中で<b>A</b>や<b>B</b>を参照することはできますが、<b>A</b>の中で<b>B</b>や<b>C</b>を参照することはできません。
+
+ユーザーからの入力を受け取るには、ページに「ユーザー入力」ブロックを設置し、「変数名」に入力を格納したい変数名を設定します(変数は自動で作成されます)。その変数を使ってユーザー入力に応じた動作を行えます。
+
+関数を使うと、値の算出処理を再利用可能な形にまとめることができます。関数を作るには、「関数」タイプの変数を作成します。関数にはスロット(引数)を設定することができ、スロットの値は関数内で変数として利用可能です。また、関数を引数に取る関数(高階関数と呼ばれます)も存在します。関数は予め定義しておくほかに、このような高階関数のスロットに即席でセットすることもできます。
diff --git a/src/docs/no-NO/features/reaction.md b/src/docs/no-NO/features/reaction.md
new file mode 100644
index 0000000000..4d479fd416
--- /dev/null
+++ b/src/docs/no-NO/features/reaction.md
@@ -0,0 +1,11 @@
+# リアクション
+他の人のノートに、絵文字を付けて簡単にあなたの反応を伝えられる機能です。 リアクションするには、ノートの + アイコンをクリックしてピッカーを表示し、絵文字を選択します。 リアクションには[カスタム絵文字](./custom-emoji)も使用できます。
+
+## リアクションピッカーのカスタマイズ
+ピッカーに表示される絵文字を自分好みにカスタマイズすることができます。 設定の「リアクション」で設定します。
+
+## リモート投稿へのリアクションについて
+リアクションはMisskeyオリジナルの機能であるため、リモートインスタンスがMisskeyでない限りは、ほとんどの場合「Like」としてアクティビティが送信されます。一般的にはLikeは「お気に入り」として実装されているようです。
+
+## リモートからのリアクションについて
+リモートから「Like」アクティビティを受信したとき、Misskeyでは「👍」のリアクションとして解釈されます。
diff --git a/src/docs/no-NO/features/silence.md b/src/docs/no-NO/features/silence.md
new file mode 100644
index 0000000000..7e26feab0d
--- /dev/null
+++ b/src/docs/no-NO/features/silence.md
@@ -0,0 +1,6 @@
+# サイレンス
+サイレンスは、アカウントに設定される状態のひとつです。
+
+アカウントがサイレンス状態になると、ノートの公開範囲をパブリックにできなくなります。 ホーム、フォロワー、ダイレクトは選択可能なため、サイレンスを受けた場合でもフォロワーやあなたのユーザーページを直接訪れた場合は投稿を閲覧できますが、GTL(連合タイムライン)やLTL(ローカルタイムライン)には投稿が流れません。
+
+アカウントのサイレンス状態は、サーバーのモデレーターによって有効化/無効化されます。
diff --git a/src/docs/no-NO/features/theme.md b/src/docs/no-NO/features/theme.md
new file mode 100644
index 0000000000..a406f3433c
--- /dev/null
+++ b/src/docs/no-NO/features/theme.md
@@ -0,0 +1,68 @@
+# テーマ
+
+テーマを設定して、Misskeyクライアントの見た目を変更できます。
+
+## テーマの設定
+設定 > テーマ
+
+## テーマを作成する
+テーマコードはJSON5で記述されたテーマオブジェクトです。 テーマは以下のようなオブジェクトです。
+``` js
+{
+    id: '17587283-dd92-4a2c-a22c-be0637c9e22a',
+
+    name: 'Danboard',
+    author: 'syuilo',
+
+    base: 'light',
+
+    props: {
+        accent: 'rgb(218, 141, 49)',
+        bg: 'rgb(218, 212, 190)',
+        fg: 'rgb(115, 108, 92)',
+        panel: 'rgb(236, 232, 220)',
+        renote: 'rgb(100, 152, 106)',
+        link: 'rgb(100, 152, 106)',
+        mention: '@accent',
+        hashtag: 'rgb(100, 152, 106)',
+        header: 'rgba(239, 227, 213, 0.75)',
+        navBg: 'rgb(216, 206, 182)',
+        inputBorder: 'rgba(0, 0, 0, 0.1)',
+    },
+}
+
+```
+
+* `id` ... テーマの一意なID。UUIDをおすすめします。
+* `name` ... テーマ名
+* `author` ... テーマの作者
+* `desc` ... テーマの説明(オプション)
+* `base` ... 明るいテーマか、暗いテーマか
+    * `light`にすると明るいテーマになり、`dark`にすると暗いテーマになります。
+    * テーマはここで設定されたベーステーマを継承します。
+* `props` ... テーマのスタイル定義。これから説明します。
+
+### テーマのスタイル定義
+`props`下にはテーマのスタイルを定義します。 キーがCSSの変数名になり、バリューで中身を指定します。 なお、この`props`オブジェクトはベーステーマから継承されます。 ベーステーマは、このテーマの`base`が`light`なら[_light.json5](https://github.com/misskey-dev/misskey/blob/develop/src/client/themes/_light.json5)で、`dark`なら[_dark.json5](https://github.com/misskey-dev/misskey/blob/develop/src/client/themes/_dark.json5)です。 つまり、このテーマ内の`props`に`panel`というキーが無くても、そこにはベーステーマの`panel`があると見なされます。
+
+#### バリューで使える構文
+* 16進数で表された色
+    * 例: `#00ff00`
+* `rgb(r, g, b)`形式で表された色
+    * 例: `rgb(0, 255, 0)`
+* `rgb(r, g, b, a)`形式で表された透明度を含む色
+    * 例: `rgba(0, 255, 0, 0.5)`
+* 他のキーの値の参照
+    * `@{キー名}`と書くと他のキーの値の参照になります。`{キー名}`は参照したいキーの名前に置き換えます。
+    * 例: `@panel`
+* 定数(後述)の参照
+    * `${定数名}`と書くと定数の参照になります。`{定数名}`は参照したい定数の名前に置き換えます。
+    * 例: `$main`
+* 関数(後述)
+    * `:{関数名}<{引数}<{色}`
+
+#### 定数
+「CSS変数として出力はしたくないが、他のCSS変数の値として使いまわしたい」値があるときは、定数を使うと便利です。 キー名を`$`で始めると、そのキーはCSS変数として出力されません。
+
+#### 関数
+wip
diff --git a/src/docs/no-NO/features/timeline.md b/src/docs/no-NO/features/timeline.md
new file mode 100644
index 0000000000..f431014f84
--- /dev/null
+++ b/src/docs/no-NO/features/timeline.md
@@ -0,0 +1,31 @@
+# タイムライン
+タイムラインは、[ノート](./note)が時系列で表示される機能です。 タイムラインには以下で示す種類があり、種類によって表示されるノートも異なります。 なお、タイムラインの種類によってはサーバーにより無効になっている場合があります。
+
+## ホーム
+自分のフォローしているユーザーの投稿が流れます。HTLと略されます。
+
+## ローカル
+全てのローカルユーザーの「ホーム」指定されていない投稿が流れます。LTLと略されます。
+
+## ソーシャル
+自分のフォローしているユーザーの投稿と、全てのローカルユーザーの「ホーム」指定されていない投稿が流れます。STLと略されます。
+
+## グローバル
+全てのローカルユーザーの「ホーム」指定されていない投稿と、サーバーに届いた全てのリモートユーザーの「ホーム」指定されていない投稿が流れます。GTLと略されます。
+
+## 比較
+| ソース          |       |     | タイムライン |       |       |
+| ------------ | ----- | --- | ------ | ----- | ----- |
+| ユーザー         | 公開範囲  | ホーム | ローカル   | ソーシャル | グローバル |
+| ローカル (フォロー)  | 公開    | ✔   | ✔      | ✔     | ✔     |
+|              | ホーム   | ✔   |        | ✔     |       |
+|              | フォロワー | ✔   | ✔      | ✔     | ✔     |
+| リモート (フォロー)  | 公開    | ✔   |        | ✔     | ✔     |
+|              | ホーム   | ✔   |        | ✔     |       |
+|              | フォロワー | ✔   |        | ✔     | ✔     |
+| ローカル (未フォロー) | 公開    |     | ✔      | ✔     | ✔     |
+|              | ホーム   |     |        |       |       |
+|              | フォロワー |     |        |       |       |
+| リモート (未フォロー) | 公開    |     |        |       | ✔     |
+|              | ホーム   |     |        |       |       |
+|              | フォロワー |     |        |       |       |
diff --git a/src/docs/no-NO/features/widgets.md b/src/docs/no-NO/features/widgets.md
new file mode 100644
index 0000000000..a7c2c1d1d6
--- /dev/null
+++ b/src/docs/no-NO/features/widgets.md
@@ -0,0 +1,7 @@
+# ウィジェット
+ウィジェットは、MisskeyのUI上に設置できる小型の情報表示、操作が行えるパーツです。
+
+ウィジェットを編集するには、ウィジェット編集モードに切り替えます。切り替え方法はUIによって異なります。 ウィジェット編集モードでは、ウィジェットの追加、削除、並び替え、およびそれぞれのウィジェットの設定を行えます。
+
+## 利用可能なウィジェット一覧
+todo
diff --git a/src/docs/no-NO/general/apps.md b/src/docs/no-NO/general/apps.md
new file mode 100644
index 0000000000..1f4c85fe8f
--- /dev/null
+++ b/src/docs/no-NO/general/apps.md
@@ -0,0 +1,6 @@
+# サードパーティアプリのリスト
+## クライアント
+todo
+
+## 連携サービス
+todo
diff --git a/src/docs/no-NO/general/faq.md b/src/docs/no-NO/general/faq.md
new file mode 100644
index 0000000000..ecb664e32e
--- /dev/null
+++ b/src/docs/no-NO/general/faq.md
@@ -0,0 +1,22 @@
+# よくある質問
+ここでは利用上のよくある質問について掲載しています。 Misskeyのプロジェクト自体についてのよくある質問は[こちら](./misskey)に掲載されています。
+
+### iOS/Androidのアプリはありますか?
+公式にはそういったOSのネイティブアプリを開発していませんが、サードパーティ製のアプリがいくつかあります。 詳しくは[こちら](./apps)をご覧ください。
+
+ただ、サードパーティ製アプリはどうしても機能への対応が遅れてしまうため、とくに拘りがなければ公式のWebクライアントの利用をおすすめします。 なお、MisskeyのWebクライアントはPWAに対応しているので、ネイティブアプリのように動作させることも可能です。 詳しくは[こちら](todo)をご覧ください。
+
+## 他のサーバーのユーザーをフォローするときは?
+メニューから検索を選び、ユーザー名をホスト込みで入力します。例: `@syuilo@misskey.io`
+
+## Renoteを削除するには?
+Renoteの時刻表示の隣にある「...」を押し、「Renote解除」を選択します。 Renoteについては[こちら](../features/note)をご確認ください。
+
+## URLのプレビューを表示させたくない
+MFMには、そのURLのプレビューを無効にする構文があります。詳細は[MFMチートシート](/mfm-cheat-sheet)をご確認ください。
+
+## カスタム絵文字を追加したい
+運営者のみがカスタム絵文字を追加、編集、削除できます。それらを希望する場合は運営者に依頼してください。
+
+## Botを開発したい
+Misskey APIを利用してBotの開発が可能です。[こちら](../advanced/develop-bot)をご確認ください。
diff --git a/src/docs/no-NO/general/glossary.md b/src/docs/no-NO/general/glossary.md
new file mode 100644
index 0000000000..1f403a06d2
--- /dev/null
+++ b/src/docs/no-NO/general/glossary.md
@@ -0,0 +1,83 @@
+# 用語集
+Misskeyに関する用語集です。
+
+## AcitivityPub
+(読み: あくてぃびてぃぱぶ) 分散型を実現するために用いられるプロトコル(仕様)。このプロトコルに則ってサーバー同士通信を行うことで、連合が行われ、Fediverseを形成しています。
+
+## AiScript
+(読み: あいすくりぷと) Misskey上で使用できるプログラミング言語です。詳細は[こちら。](../advanced/aiscript)
+
+## API
+(読み: えーぴーあい) Misskeyのサーバーが公開している、プログラムからMisskeyを扱うためのインターフェース。詳細は[こちら。](../advanced/api)
+
+## Bot
+(読み: ぼっと) プログラムによって動作しているアカウント。
+
+## CW
+(読み: こんてんつわーにんぐ) Contents Warningの略。ノートの内容を、操作なしには表示しないようにできる機能。主に長大な内容を隠すためや、ネタバレ防止などに使われます。
+
+## Fediverse
+(読み: ふぇでぃばーす) Misskeyを含む様々な分散型ソフトウェアのサーバーで構成されたネットワーク。
+
+## GTL
+グローバルタイムライン(Global TimeLine)の略。タイムラインの詳細は[こちら。](../features/timeline)
+
+## HTL
+ホームタイムライン(Home TimeLine)の略。タイムラインの詳細は[こちら。](../features/timeline)
+
+## LTL
+ローカルタイムライン(Local TimeLine)の略。タイムラインの詳細は[こちら。](../features/timeline)
+
+## MFM
+(読み: えむえふえむ) Misskey Flavored Markdownの略で、Misskey上で使用できるマークアップ言語です。詳細は[こちら。](../features/mfm)
+
+## NSFW
+(読み: のっとせーふふぉーわーく) Not Safe For Workの略。画像を「閲覧注意」扱いにし、操作なしには表示しないようにすることができる機能。
+
+## Renote
+(読み: りのーと) 既にあるノートを引用、もしくはそのノートを新しいノートとして共有する行為、またそれによって作成されたノート。詳細は[こちら。](../features/note)
+
+## STL
+ソーシャルタイムライン(Social TimeLine)の略。タイムラインの詳細は[こちら。](../features/timeline)
+
+## 藍
+(読み: あい) Misskeyの看板娘(公式キャラクター)です。
+
+## アクティブユーザー
+インスタンスにアカウントを作っているユーザーのうち、現在も実際にサービスを利用しているユーザーのこと。
+
+## インスタンス
+todo
+
+## コントロールパネル
+インスタンスの設定画面のこと。
+
+## サーバー
+todo
+
+## サイレンス
+ノートをパブリックな公開範囲で投稿できなくされている状態。モデレーターの判断でユーザーごとに設定されます。詳細は[こちら。](../features/silence)
+
+## 凍結
+アカウントが使用不可に設定されている状態。
+
+## ドライブ
+Misskeyにアップロードしたファイルを管理する機能。詳細は[こちら。](../features/drive)
+
+## ノート
+Misskeyに投稿される、文章、ファイル、アンケートなどを含めることができるコンテンツ。詳細は[こちら。](../features/note)
+
+## ミスキスト
+Misskeyを使う人のこと。
+
+## モデレーター
+スパムの凍結およびサイレンスや不適切な投稿の削除など、コミュニティ運営に関する権限を持つユーザー。
+
+## リモート
+他サーバーのことを指します。リモートユーザーといったように接頭辞としても使われます。ローカルの逆です。
+
+## 連合
+サーバー上で作成された情報が他のサーバーに伝わること。
+
+## ローカル
+自サーバーのことを指します。ローカルユーザー、ローカルタイムラインといったように接頭辞としても使われます。リモートの逆です。
diff --git a/src/docs/no-NO/general/links.md b/src/docs/no-NO/general/links.md
new file mode 100644
index 0000000000..d6b16856fb
--- /dev/null
+++ b/src/docs/no-NO/general/links.md
@@ -0,0 +1,5 @@
+# リンク集
+
+## ライブラリ
+- [misskey-dev/misskey.js](https://github.com/misskey-dev/misskey.js) - JavaScriptのMisskey SDK
+- [misskey-dev/mfm.js](https://github.com/misskey-dev/mfm.js) - JavaScriptのMFMパーサー実装
diff --git a/src/docs/no-NO/general/misskey.md b/src/docs/no-NO/general/misskey.md
new file mode 100644
index 0000000000..1e64a10e28
--- /dev/null
+++ b/src/docs/no-NO/general/misskey.md
@@ -0,0 +1,87 @@
+# Misskeyについて
+
+Misskeyはオープンソースの分散型マイクロブログプラットフォームプロジェクトです。 開発は日本でsyuiloによって2014年から開始されました。 ドライブ、リアクションなどの豊富な機能や、高いカスタマイズ性を備えたUIを持つことが特徴です。
+
+## 歴史
+開発当初は掲示板がメインのサービスでしたが、ユーザーが短文を投稿し、それを時系列で流れるタイムライン機能を追加したところ人気が高まり、徐々にそれがメインとして開発が進むようになりました。 当初は分散型ではありませんでしたが、2018年にAcitivityPubを実装し分散型になったことで、より多くの方に認知され利用されるサービスになり、現在に至ります。
+<div class="info">ℹ️ Misskeyという名前は、syuiloが当時聴いていたMay'nというアーティストの楽曲、Brain Diverの歌詞に由来します。</div>
+
+誰でも開発に参加することができ、現在でも活発に開発が続いています。
+
+## 分散型とは何か?
+
+<b>分散(distributed)型</b>とは、<b>非中央集権(decentralized)</b>とも呼ばれ、コミュニティが多数のサーバーに分散して存在し、それらが相互に<b>通信(連合、federation)</b>することでコンテンツ共有<b>ネットワーク(Fediverse)</b>を形成していることが特徴のサービスです。 単一のサーバーしか存在しない、もしくは複数存在しても互いに独立している場合は中央集権なサービスと言われ、例えばTwitterやFacebookなどほとんどのサービスがそれに該当します。 分散型のメリットは、自分に合った運営者やテーマのサーバーを選択できることです。自分でサーバーを作成することもできます。連合するおかげで、どのサーバーを選んでも、同じコミュニティにアクセスできます。
+
+## 常にオープンソース
+Misskeyはこれまでもこれからも、オープンソースであり続けます。オープンソースとは、簡単に言うと<b>ソフトウェアのソースコード(プログラム)が公開されている</b>ことです。ソースコードの修正や再配布が可能であることを定義に含めることもあります。 Misskeyのすべてのソースコードは[AGPL](https://github.com/misskey-dev/misskey/blob/develop/LICENSE)というオープンソースライセンスの下に[公開](https://github.com/misskey-dev)されていて、誰でも自由に閲覧、使用、修正、改変、再配布をすることができます。 オープンソースは、自分で好きなように変えたり、有害な処理が含まれていないことを確認することができたり、誰でも開発に参加できるなどの、様々なメリットがあります。 上述の分散型を実現するためにも、オープンソースであるということは必要不可欠な要素です。 再び引き合いに出しますが、TwitterやFacebookなどの利益を得ているほとんどのサービスはオープンソースではありません。
+
+<div class="info">ℹ️ 技術的に言うと、MisskeyのソースコードはGitで管理されていて、リポジトリは<a href="https://github.com/misskey-dev" target="_blank">GitHub上でホスティングされています。</a></div>
+
+## 開発に参加する、プロジェクトを支援する
+Misskeyを気に入っていただけたら、ぜひプロジェクトを支援してください。プロジェクトに貢献するには、以下で紹介するようにいろいろな方法があります。方法によっては開発のスキルは不要なので、誰でも気軽に参加し貢献することができます。いつでもお待ちしています。
+
+### 機能を追加したり、バグを修正する
+ソフトウェアエンジニアのスキルをお持ちの方であれば、ソースコードを編集する形でプロジェクトに貢献することができます。 貢献についてのガイドは[こちら](https://github.com/misskey-dev/misskey/blob/develop/CONTRIBUTING.md)です。
+
+### 議論に参加する
+新しい機能、または既存の機能について意見を述べたり、不具合を報告したりすることでも貢献できます。 そのようなディスカッションは[GitHub](https://github.com/misskey-dev)上か、[フォーラム](https://forum.misskey.io/)等で行われます。
+
+### テキストを翻訳する
+Misskeyは様々な言語に対応しています(i18n -internationalizationの略- と呼ばれます)。元の言語は基本的に日本語ですが、有志によって他の言語へと翻訳されています。 その翻訳作業に加わっていただくことでもMisskeyに貢献できます。 Misskeyは[Crowdinというサービスを使用して翻訳の管理を行っています。](https://crowdin.com/project/misskey)
+
+### 感想を投稿する
+不具合報告等だけではなく、Misskeyの良い点、楽しい点といったポジティブな意見もぜひ共有してください。開発の励みになり、それは間接的ですがプロジェクトへの貢献です。
+
+### ミスキストを増やす
+ミスキストとは、Misskeyを使用する人のことです。 知り合いに紹介するなどしてMisskeyを広めていただければ、ミスキストが増え開発のモチベーションが上がります。
+
+### 寄付をする
+Misskeyはビジネスではなく、利用は無料であるため、収益は皆様からの寄付のみです。(インスタンスによっては広告収入を得ているような場合もありますが、それは運営者の収入であり直接開発者への収入にはなりません) 寄付をしていただければ、今後も開発を続けることが可能になり、プロジェクトへの貢献になります。 寄付は基本的には[Patreon](https://www.patreon.com/syuilo)で受け付けています。 一定額寄付していただけると、Misskeyの[情報ページ](/about-misskey)に名前を記載することができます。
+
+また、サーバーの運営者も、基本的には収益を得ていません。サーバーの運営にはコストがかかるので、運営者の支援をすることもご検討ください。 開発には直接関係しませんが、サーバーがあってこそのプロジェクトなので、運営が維持されるというのは開発と同じくらい重要なことです。
+
+## クレジット
+Misskeyの開発者や、Misskeyに寄付をしてくださった方の一覧は[こちら](/about-misskey)で見ることができます。
+
+## よくある質問
+### プロジェクトは何を目指していますか?
+強いて言うと、漠然的になりますが広く使われる汎用的なプラットフォームになることを目指しています。 Misskeyは他のプロジェクトとは違い、何らかの思想(例えば、反中央集権)やビジョンに基づいて開発が行われているわけではなく、その点ではフラットです。 それが逆に、特定の方向性に縛られないフレキシブルさを生み出すことに繋がっていると感じています。
+<!-- TODO: ここにロードマップへのリンク -->
+
+### 企業によって開発されていますか?
+いいえ。Misskeyの開発は個人で行われており、商業的でもないため、特定の企業の関りはありません。 開発メンバーも基本的にはボランティアです。 また、開発に対し企業のスポンサーがつくこともありますが、その場合でもやはり開発は個人のコミュニティが主体です。
+
+### 誰が運営していますか?
+Misskeyは分散型なため、各サーバーにそれぞれ異なった運営者がいます。従って、特定の個人や企業によって、Misskeyの全てが運営されているわけではありません。 また、開発チームが運営を行うわけでもないため、運営に関する連絡は、お使いのサーバーの運営者に行ってください。 サーバーの運営者は、[このページ](/about)で確認することができます。 あなたがサーバーを作成すれば、あなたが運営者になります。
+
+### どのサーバーを選べばいいですか?
+[サーバー一覧が公開されています。](https://join.misskey.page/ja-JP/instances) サーバーによってコミュニティのテーマ(特定のこと、ものが好き 等)が決められている場合があるので、自分に合ったテーマのサーバーがあれば、そこを選ぶと良いかもしれません。 他にも、サーバーの規模、ユーザー層、国および言語、運営者が信頼できるかどうか、などの観点があります。 なお、Misskey公式のサーバーというものはありません。自身で新しくサーバーを作成するという選択肢もあります。
+
+基本的にどのサーバーを選んだとしても、他の全てのサーバーのユーザーと繋がることができます。
+
+### サーバーを建てるにはどうしたらいいですか?
+Misskeyサーバーの作成に興味を持っていただきありがとうございます。 2021年現在、Misskeyのホスティングサービスは存在しないため、サーバーの作成にはある程度の知識が必要です。 サーバーの作成方法については[こちら](todo)をご覧ください。
+
+### どのような技術を使用していますか?
+Misskeyは開発が進むにつれ使用する技術も大きく変わってきました。開発当初はMySQL + PHP + jQueryといった構成でしたが、現在は以下のようになっています。
+- サーバーサイド: Node.js
+- データベース: PostgreSQL、Redis
+- UIフレームワーク: Vue.js
+- プログラミング言語: TypeScript
+
+また、MFMやAiScriptなどの、Misskeyから派生して独自の技術も開発しています。
+
+### Mastodonのフォークですか?
+いいえ。MisskeyはMastodonやその他のプロジェクトとは全く別のプロジェクトです。 開発に関しても、Misskeyの方が昔から開発されています。ただし、分散型になったのはMastodonの登場より後です。 同じAcitivityPubという分散のためのプロトコルを実装しているという点以外、両者に特に関りがあるわけでもありません。
+
+### iOS/Androidのアプリはありますか?
+公式にはそういったOSのネイティブアプリを開発していませんが、サードパーティ製のアプリがいくつかあります。 詳しくは[こちら](./apps)をご覧ください。
+
+ただ、サードパーティ製アプリはどうしても機能への対応が遅れてしまうため、とくに拘りがなければ公式のWebクライアントの利用をおすすめします。 なお、MisskeyのWebクライアントはPWAに対応しているので、ネイティブアプリのように動作させることも可能です。 詳しくは[こちら](todo)をご覧ください。
+
+### Misskeyのロゴ、アイコンはどこで入手できますか?
+(準備中)
+
+### 時折目にする猫耳の可愛い女の子は?
+Misskeyの守り神、藍ちゃんです。アイチャンカワイイヤッター!
+<div class="info">ℹ️ 藍ちゃんについては<a href="https://xn--931a.moe/" target="_blank">こちら</a>です。</div>
diff --git a/src/docs/no-NO/general/report-issue.md b/src/docs/no-NO/general/report-issue.md
new file mode 100644
index 0000000000..63527e32af
--- /dev/null
+++ b/src/docs/no-NO/general/report-issue.md
@@ -0,0 +1,8 @@
+# 不具合の報告
+不具合と思われる状況に遭遇したときは、まず[トラブルシューティング](./troubleshooting)をご一読ください。 それでも問題が解決しないときは、以下の情報を含めて[フォーラム](https://forum.misskey.io/)に投稿してください。 投稿することで、解決策が見つかったり、不具合と判断されれば開発チームによって修正が行われます。
+
+## 含める情報
+- Misskeyのバージョン([情報ページ](/about)で確認できます)
+- お使いのブラウザの種類とバージョン
+- お使いのOSの種類とバージョン
+- 問題の再現手順
diff --git a/src/docs/no-NO/general/troubleshooting.md b/src/docs/no-NO/general/troubleshooting.md
new file mode 100644
index 0000000000..4a35091299
--- /dev/null
+++ b/src/docs/no-NO/general/troubleshooting.md
@@ -0,0 +1,36 @@
+# トラブルシューティング
+<div class="info">ℹ️ <a href="./faq">よくある質問</a>も合わせてお役立てください。</div>
+
+問題が発生したときは、まずこちらをご確認ください。 該当する項目が無い、もしくは手順を試しても効果がない場合は、サーバーの管理者に連絡するか[不具合を報告](./report-issue)してください。
+
+## クライアントが起動しない
+ほとんどの場合、お使いのブラウザまたはOSのバージョンが古いことが原因です。 ブラウザおよびOSのバージョンを最新のものに更新してから、再度試してみてください。
+
+これは稀ですが、それでも起動しない場合は、キャッシュが原因の場合があります。ブラウザのキャッシュをクリアして、再度試してみてください。
+
+## ページが読み込めない
+クライアントが起動するもののページが読み込めないというエラーが出る場合は、ネットワークに問題がないか確認してください。また、サーバーがダウンしていないか確認してください。
+
+これは稀ですが、キャッシュが原因の場合があります。ブラウザのキャッシュをクリアして、再度試してみてください。
+
+まだ問題がある場合は、サーバーの問題と思われるのでサーバーの管理者に連絡してください。
+
+## クライアントの動作が遅い
+以下を試してみてください:
+
+- クライアント設定で「UIのアニメーションを減らす」を有効にする
+- クライアント設定で「モーダルにぼかし効果を使用」を無効にする
+- お使いのブラウザの設定でハードウェアアクセラレーションを有効にする
+- お使いのデバイスのスペックを上げる
+
+## 通知やアンテナ等の点滅が消えない
+点滅は、未読のコンテンツがあることを示しています。通常点滅が消えない場合は、コンテンツを遡ると未読なコンテンツが残っています。 すべて既読にしたと思われるのに、それでもなお点滅が続く場合(おそらく不具合と思われます)は設定から強制的にすべて既読扱いにすることができます。
+
+## Renoteができない
+フォロワー限定のノートはRenoteすることはできません。
+
+## UI上で特定の要素が表示されない
+広告ブロッカーを使用しているとそのような不具合が発生することがあります。Misskeyではオフにしてご利用ください。
+
+## UI上で未翻訳の部分がある
+ほとんどの場合、単に翻訳が間に合っていないだけで、不具合ではありません。翻訳が終わるまでお待ちください。 [翻訳に参加](./misskey)していただくことも可能です。
diff --git a/src/docs/pl-PL/admin/disable-timelines.md b/src/docs/pl-PL/admin/disable-timelines.md
new file mode 100644
index 0000000000..b081e35ab0
--- /dev/null
+++ b/src/docs/pl-PL/admin/disable-timelines.md
@@ -0,0 +1,8 @@
+# LTL/STL/GTLの無効化
+Misskeyでは、LTL/STL/GTLをそれぞれ無効化することができます。有効/無効を切り替えるには、インスタンスコントロールパネルで設定します。
+
+LTLやSTLは、そのインスタンス全員の投稿が見れるため、新規のユーザーにとってはユーザーを探す必要がなくなり、興味のあるユーザーを見つけやすいという利点があります。 しかし同時に、フォロー機能が活用されなくなったり、不適切な投稿が目につきやすくなったり、チャットのようになることで内輪感が生じて逆に新規ユーザーが参加しにくくなるといったデメリットも持ち合わせています。 サーバーによってメリット/デメリットどちらが優勢かは異なるので、オプションとして無効にできるようになっています。 もしデメリットの方が上回っていると感じたら、それらのタイムラインを無効化することも検討してください。
+
+<div class="warn">⚠️ 無効化を行うと、ユーザーが困惑し、短期的に見て利用者が減る可能性があります。そのため、無効化の際は影響を慎重に検討し、事前に説明してフォローを整える期間を一定程度設けることを推奨します。</div>
+
+なお、管理者/モデレーターは、これらのタイムラインの無効化状態は適用されず、引き続き利用することが可能です。
diff --git a/src/docs/pl-PL/admin/faq.md b/src/docs/pl-PL/admin/faq.md
new file mode 100644
index 0000000000..317b4e0655
--- /dev/null
+++ b/src/docs/pl-PL/admin/faq.md
@@ -0,0 +1,5 @@
+# よくある質問
+ここでは、サーバー管理者向けのよくある質問を掲載しています。
+
+## デフォルトテーマを設定したい
+現在、デフォルトテーマ設定機能は実装されていません。
diff --git a/src/docs/pl-PL/advanced/aiscript.md b/src/docs/pl-PL/advanced/aiscript.md
new file mode 100644
index 0000000000..604d17daa8
--- /dev/null
+++ b/src/docs/pl-PL/advanced/aiscript.md
@@ -0,0 +1,7 @@
+# AiScript
+AiScriptは、Misskeyで使用できるスクリプト言語です。
+
+<div class="info">ℹ️ AiScript実装はMisskeyとは別リポジトリで、<a href="https://github.com/syuilo/aiscript" target="_blank">オープンソースで公開されています。</a></div>
+
+## 使い方
+AiScriptの構文や組み込み関数などのドキュメントは、[こちら](https://github.com/syuilo/aiscript/tree/master/docs)で公開されています。
diff --git a/src/docs/pl-PL/advanced/api.md b/src/docs/pl-PL/advanced/api.md
new file mode 100644
index 0000000000..76019b6145
--- /dev/null
+++ b/src/docs/pl-PL/advanced/api.md
@@ -0,0 +1,58 @@
+# Misskey API
+
+MisskeyAPIを使ってMisskeyクライアント、Misskey連携Webサービス、Bot等(以下「アプリケーション」と呼びます)を開発できます。 ストリーミングAPIもあるので、リアルタイム性のあるアプリケーションを作ることも可能です。
+
+APIを使い始めるには、まずアクセストークンを取得する必要があります。 このドキュメントでは、アクセストークンを取得する手順を説明した後、基本的なAPIの使い方を説明します。
+
+## アクセストークンの取得
+基本的に、APIはリクエストにはアクセストークンが必要となります。 APIにリクエストするのが自分自身なのか、不特定の利用者に使ってもらうアプリケーションなのかによって取得手順は異なります。
+
+* 前者の場合: [「自分自身のアクセストークンを手動発行する」](#自分自身のアクセストークンを手動発行する)に進む
+* 後者の場合: [「アプリケーション利用者にアクセストークンの発行をリクエストする」](#アプリケーション利用者にアクセストークンの発行をリクエストする)に進む
+
+### 自分自身のアクセストークンを手動発行する
+「設定 > API」で、自分のアクセストークンを発行できます。
+
+[「APIの使い方」へ進む](#APIの使い方)
+
+### アプリケーション利用者にアクセストークンの発行をリクエストする
+アプリケーション利用者のアクセストークンを取得するには、以下の手順で発行をリクエストします。
+
+#### Step 1
+
+UUIDを生成する。以後これをセッションIDと呼びます。
+
+> このセッションIDは毎回生成し、使いまわさないようにしてください。
+
+#### Step 2
+
+`{_URL_}/miauth/{session}`をユーザーのブラウザで表示させる。`{session}`の部分は、セッションIDに置き換えてください。
+> 例: `{_URL_}/miauth/c1f6d42b-468b-4fd2-8274-e58abdedef6f`
+
+表示する際、URLにクエリパラメータとしていくつかのオプションを設定できます:
+* `name` ... アプリケーション名
+    * > 例: `MissDeck`
+* `icon` ... アプリケーションのアイコン画像URL
+    * > 例: `https://missdeck.example.com/icon.png`
+* `callback` ... 認証が終わった後にリダイレクトするURL
+    * > 例: `https://missdeck.example.com/callback`
+    * リダイレクト時には、`session`というクエリパラメータでセッションIDが付きます
+* `permission` ... アプリケーションが要求する権限
+    * > 例: `write:notes,write:following,read:drive`
+    * 要求する権限を`,`で区切って列挙します
+    * どのような権限があるかは[APIリファレンス](/api-doc)で確認できます
+
+#### Step 3
+ユーザーが発行を許可した後、`{_URL_}/api/miauth/{session}/check`にPOSTリクエストすると、レスポンスとしてアクセストークンを含むJSONが返ります。
+
+レスポンスに含まれるプロパティ:
+* `token` ... ユーザーのアクセストークン
+* `user` ... ユーザーの情報
+
+[「APIの使い方」へ進む](#APIの使い方)
+
+## APIの使い方
+**APIはすべてPOSTで、リクエスト/レスポンスともにJSON形式です。RESTではありません。** アクセストークンは、`i`というパラメータ名でリクエストに含めます。
+
+* [APIリファレンス](/api-doc)
+* [ストリーミングAPI](./stream)
diff --git a/src/docs/pl-PL/advanced/create-plugin.md b/src/docs/pl-PL/advanced/create-plugin.md
new file mode 100644
index 0000000000..31d89416de
--- /dev/null
+++ b/src/docs/pl-PL/advanced/create-plugin.md
@@ -0,0 +1,74 @@
+# プラグインの作成
+Misskey Webクライアントのプラグイン機能を使うと、クライアントを拡張し、様々な機能を追加できます。 ここではプラグインの作成にあたってのメタデータ定義や、AiScript APIリファレンスを掲載します。
+
+## Metadane
+プラグインは、AiScriptのメタデータ埋め込み機能を使って、デフォルトとしてプラグインのメタデータを定義する必要があります。 メタデータは次のプロパティを含むオブジェクトです。
+
+### name
+プラグイン名
+
+### author
+プラグイン作者
+
+### version
+プラグインバージョン。数値を指定してください。
+
+### description
+プラグインの説明
+
+### permissions
+プラグインが要求する権限。MisskeyAPIにリクエストする際に用いられます。
+
+### config
+プラグインの設定情報を表すオブジェクト。 キーに設定名、値に以下のプロパティを含めます。
+
+#### type
+設定値の種類を表す文字列。以下から選択します。 string number boolean
+
+#### label
+ユーザーに表示する設定名
+
+#### description
+設定の説明
+
+#### default
+設定のデフォルト値
+
+## APIリファレンス
+AiScript標準で組み込まれているAPIは掲載しません。
+
+### Mk:dialog(title text type)
+ダイアログを表示します。typeには以下の値が設定できます。 info success warn error question 省略すると info になります。
+
+### Mk:confirm(title text type)
+確認ダイアログを表示します。typeには以下の値が設定できます。 info success warn error question 省略すると question になります。 ユーザーが"OK"を選択した場合は true を、"キャンセル"を選択した場合は false が返ります。
+
+### Mk:api(endpoint params)
+Misskey APIにリクエストします。第一引数にエンドポイント名、第二引数にパラメータオブジェクトを渡します。
+
+### Mk:save(key value)
+任意の値に任意の名前を付けて永続化します。永続化した値は、AiScriptコンテキストが終了しても残り、Mk:loadで読み取ることができます。
+
+### Mk:load(key)
+Mk:saveで永続化した指定の名前の値を読み取ります。
+
+### Plugin:register_post_form_action(title fn)
+投稿フォームにアクションを追加します。第一引数にアクション名、第二引数にアクションが選択された際のコールバック関数を渡します。 コールバック関数には、第一引数に投稿フォームオブジェクトが渡されます。
+
+### Plugin:register_note_action(title fn)
+ノートメニューに項目を追加します。第一引数に項目名、第二引数に項目が選択された際のコールバック関数を渡します。 コールバック関数には、第一引数に対象のノートオブジェクトが渡されます。
+
+### Plugin:register_user_action(title fn)
+ユーザーメニューに項目を追加します。第一引数に項目名、第二引数に項目が選択された際のコールバック関数を渡します。 コールバック関数には、第一引数に対象のユーザーオブジェクトが渡されます。
+
+### Plugin:register_note_view_interruptor(fn)
+UIに表示されるノート情報を書き換えます。 コールバック関数には、第一引数に対象のノートオブジェクトが渡されます。 コールバック関数の返り値でノートが書き換えられます。
+
+### Plugin:register_note_post_interruptor(fn)
+ノート投稿時にノート情報を書き換えます。 コールバック関数には、第一引数に対象のノートオブジェクトが渡されます。 コールバック関数の返り値でノートが書き換えられます。
+
+### Plugin:open_url(url)
+第一引数に渡されたURLをブラウザの新しいタブで開きます。
+
+### Plugin:config
+プラグインの設定が格納されるオブジェクト。プラグイン定義のconfigで設定したキーで値が入ります。
diff --git a/src/docs/pl-PL/advanced/develop-bot.md b/src/docs/pl-PL/advanced/develop-bot.md
new file mode 100644
index 0000000000..7f825e9bc4
--- /dev/null
+++ b/src/docs/pl-PL/advanced/develop-bot.md
@@ -0,0 +1,6 @@
+# Botの作成
+[Misskey API](./api)を利用してBotの開発が可能です。 また、いくつかのBot実装が公開されているため、ぜひ参考にしてください。
+
+- [syuilo/ai](https://github.com/syuilo/ai) ... Node.js上で動く、TypeScript製Bot実装
+
+Botを作成したときは、プロフィール設定からBotフラグをオンにしておくことを強くおすすめします。
diff --git a/src/docs/pl-PL/advanced/reversi-bot.md b/src/docs/pl-PL/advanced/reversi-bot.md
new file mode 100644
index 0000000000..da76db7d1e
--- /dev/null
+++ b/src/docs/pl-PL/advanced/reversi-bot.md
@@ -0,0 +1,160 @@
+# MisskeyリバーシBotの開発
+Misskeyのリバーシ機能に対応したBotの開発方法をここに記します。
+
+1. `games/reversi`ストリームに以下のパラメータを付けて接続する:
+    * `i`: botアカウントのAPIキー
+
+2. 対局への招待が来たら、ストリームから`invited`イベントが流れてくる
+    * イベントの中身に、`parent`という名前で対局へ誘ってきたユーザーの情報が含まれている
+
+3. `games/reversi/match`へ、`user_id`として`parent`の`id`が含まれたリクエストを送信する
+
+4. 上手くいくとゲーム情報が返ってくるので、`games/reversi-game`ストリームへ、以下のパラメータを付けて接続する:
+    * `i`: botアカウントのAPIキー
+    * `game`: `game`の`id`
+
+5. この間、相手がゲームの設定を変更するとその都度`update-settings`イベントが流れてくるので、必要であれば何かしらの処理を行う
+
+6. 設定に満足したら、`{ type: 'accept' }`メッセージをストリームに送信する
+
+7. ゲームが開始すると、`started`イベントが流れてくる
+    * イベントの中身にはゲーム情報が含まれている
+
+8. 石を打つには、ストリームに`{ type: 'set', pos: <位置> }`を送信する(位置の計算方法は後述)
+
+9. 相手または自分が石を打つと、ストリームから`set`イベントが流れてくる
+    * `color`として石の色が含まれている
+    * `pos`として位置情報が含まれている
+
+## 位置の計算法
+8x8のマップを考える場合、各マスの位置(インデックスと呼びます)は次のようになっています:
+```
++--+--+--+--+--+--+--+--+
+| 0| 1| 2| 3| 4| 5| 6| 7|
++--+--+--+--+--+--+--+--+
+| 8| 9|10|11|12|13|14|15|
++--+--+--+--+--+--+--+--+
+|16|17|18|19|20|21|22|23|
+...
+```
+
+### X,Y座標 から インデックス に変換する
+```
+pos = x + (y * mapWidth)
+```
+`mapWidth`は、ゲーム情報の`map`から、次のようにして計算できます:
+```
+mapWidth = map[0].length
+```
+
+### インデックス から X,Y座標 に変換する
+```
+x = pos % mapWidth
+y = Math.floor(pos / mapWidth)
+```
+
+## マップ情報
+マップ情報は、ゲーム情報の`map`に入っています。 文字列の配列になっており、ひとつひとつの文字がマス情報を表しています。 それをもとにマップのデザインを知る事が出来ます:
+* `(スペース)` ... マス無し
+* `-` ... マス
+* `b` ... 初期配置される黒石
+* `w` ... 初期配置される白石
+
+例えば、4*4の次のような単純なマップがあるとします:
+```text
++---+---+---+---+
+|   |   |   |   |
++---+---+---+---+
+|   | ○ | ● |   |
++---+---+---+---+
+|   | ● | ○ |   |
++---+---+---+---+
+|   |   |   |   |
++---+---+---+---+
+```
+
+この場合、マップデータはこのようになります:
+```javascript
+['----', '-wb-', '-bw-', '----']
+```
+
+## ユーザーにフォームを提示して対話可能Botを作成する
+ユーザーとのコミュニケーションを行うため、ゲームの設定画面でユーザーにフォームを提示することができます。 例えば、Botの強さをユーザーが設定できるようにする、といったシナリオが考えられます。
+
+フォームを提示するには、`reversi-game`ストリームに次のメッセージを送信します:
+```javascript
+{
+  type: 'init-form',
+  body: [フォームコントロールの配列]
+}
+```
+
+フォームコントロールの配列については今から説明します。 フォームコントロールは、次のようなオブジェクトです:
+```javascript
+{
+  id: 'switch1',
+  type: 'switch',
+  label: 'Enable hoge',
+  value: false
+}
+```
+`id` ... コントロールのID。 `type` ... コントロールの種類。後述します。 `label` ... コントロールと一緒に表記するテキスト。 `value` ... コントロールのデフォルト値。
+
+### フォームの操作を受け取る
+ユーザーがフォームを操作すると、ストリームから`update-form`イベントが流れてきます。 イベントの中身には、コントロールのIDと、ユーザーが設定した値が含まれています。 例えば、上で示したスイッチをユーザーがオンにしたとすると、次のイベントが流れてきます:
+```javascript
+{
+  id: 'switch1',
+  value: true
+}
+```
+
+### フォームコントロールの種類
+#### Przełącznik
+type: `switch` スイッチを表示します。何かの機能をオン/オフさせたい場合に有用です。
+
+##### プロパティ
+`label` ... スイッチに表記するテキスト。
+
+#### ラジオボタン
+type: `radio` ラジオボタンを表示します。選択肢を提示するのに有用です。例えば、Botの強さを設定させるなどです。
+
+##### プロパティ
+`items` ... ラジオボタンの選択肢。例:
+```javascript
+items: [{
+  label: 'å¼±',
+  value: 1
+}, {
+  label: '中',
+  value: 2
+}, {
+  label: 'å¼·',
+  value: 3
+}]
+```
+
+#### スライダー
+type: `slider` スライダーを表示します。
+
+##### プロパティ
+`min` ... スライダーの下限。 `max` ... スライダーの上限。 `step` ... 入力欄で刻むステップ値。
+
+#### テキストボックス
+type: `textbox` テキストボックスを表示します。ユーザーになにか入力させる一般的な用途に利用できます。
+
+## ユーザーにメッセージを表示する
+設定画面でユーザーと対話する、フォーム以外のもうひとつの方法がこれです。ユーザーになにかメッセージを表示することができます。 例えば、ユーザーがBotの対応していないモードやマップを選択したとき、警告を表示するなどです。 メッセージを表示するには、次のメッセージをストリームに送信します:
+```javascript
+{
+  type: 'message',
+  body: {
+    text: 'メッセージ内容',
+    type: 'メッセージの種類'
+  }
+}
+```
+メッセージの種類: `success`, `info`, `warning`, `error`。
+
+## 投了する
+投了をするには、<a href="./api/endpoints/games/reversi/games/surrender">このエンドポイント</a>にリクエストします。
diff --git a/src/docs/pl-PL/advanced/stream.md b/src/docs/pl-PL/advanced/stream.md
new file mode 100644
index 0000000000..99653e2638
--- /dev/null
+++ b/src/docs/pl-PL/advanced/stream.md
@@ -0,0 +1,350 @@
+# ストリーミングAPI
+
+ストリーミングAPIを使うと、リアルタイムで様々な情報(例えばタイムラインに新しい投稿が流れてきた、メッセージが届いた、フォローされた、など)を受け取ったり、様々な操作を行ったりすることができます。
+
+## ストリームに接続する
+
+ストリーミングAPIを利用するには、まずMisskeyサーバーに**websocket**接続する必要があります。
+
+以下のURLに、`i`というパラメータ名で認証情報を含めて、websocket接続してください。例:
+```
+%WS_URL%/streaming?i=xxxxxxxxxxxxxxx
+```
+
+認証情報は、自分のAPIキーや、アプリケーションからストリームに接続する際はユーザーのアクセストークンのことを指します。
+
+<div class="info">ℹ️ 認証情報の取得については、<a href="./api">こちらのドキュメント</a>をご確認ください。</div>
+
+---
+
+認証情報は省略することもできますが、その場合非ログインでの利用ということになり、受信できる情報や可能な操作は限られます。例:
+
+```
+%WS_URL%/streaming
+```
+
+---
+
+ストリームに接続すると、後述するAPI操作や、投稿の購読を行ったりすることができます。 しかしまだこの段階では、例えばタイムラインへの新しい投稿を受信したりすることはできません。 それを行うには、ストリーム上で、後述する**チャンネル**に接続する必要があります。
+
+**ストリームでのやり取りはすべてJSONです。**
+
+## Kanały
+MisskeyのストリーミングAPIにはチャンネルという概念があります。これは、送受信する情報を分離するための仕組みです。 Misskeyのストリームに接続しただけでは、まだリアルタイムでタイムラインの投稿を受信したりはできません。 ストリーム上でチャンネルに接続することで、様々な情報を受け取ったり情報を送信したりすることができるようになります。
+
+ひとつのストリーム上で、同時に複数のチャンネルに接続することができます。
+
+### チャンネルに接続する
+チャンネルに接続するには、次のようなデータをJSONでストリームに送信します:
+
+```json
+{
+    type: 'connect',
+    body: {
+        channel: 'xxxxxxxx',
+        id: 'foobar',
+        params: {
+            ...
+        }
+    }
+}
+```
+
+ここで、
+* `channel`には接続したいチャンネル名を設定します。チャンネルの種類については後述します。
+* `id`にはそのチャンネルとやり取りするための任意のIDを設定します。ストリームでは様々なメッセージが流れるので、そのメッセージがどのチャンネルからのものなのか識別する必要があるからです。このIDは、UUIDや、乱数のようなもので構いません。
+* `params`はチャンネルに接続する際のパラメータです。チャンネルによって接続時に必要とされるパラメータは異なります。パラメータ不要のチャンネルに接続する際は、このプロパティは省略可能です。
+
+<div class="info">ℹ️ IDはチャンネルごとではなく「チャンネルの接続ごと」です。なぜなら、同じチャンネルに異なるパラメータで複数接続するケースもあるからです。</div>
+
+### チャンネルからのメッセージを受け取る
+例えばタイムラインのチャンネルなら、新しい投稿があった時にメッセージを発します。そのメッセージを受け取ることで、タイムラインに新しい投稿がされたことをリアルタイムで知ることができます。
+
+チャンネルがメッセージを発すると、次のようなデータがJSONでストリームに流れてきます:
+```json
+{
+    type: 'channel',
+    body: {
+        id: 'foobar',
+        type: 'something',
+        body: {
+            some: 'thing'
+        }
+    }
+}
+```
+
+ここで、
+* `id`には前述したそのチャンネルに接続する際に設定したIDが設定されています。これで、このメッセージがどのチャンネルからのものなのか知ることができます。
+* `type`にはメッセージの種類が設定されます。チャンネルによって、どのような種類のメッセージが流れてくるかは異なります。
+* `body`にはメッセージの内容が設定されます。チャンネルによって、どのような内容のメッセージが流れてくるかは異なります。
+
+### チャンネルに向けてメッセージを送信する
+チャンネルによっては、メッセージを受け取るだけでなく、こちらから何かメッセージを送信し、何らかの操作を行える場合があります。
+
+チャンネルにメッセージを送信するには、次のようなデータをJSONでストリームに送信します:
+```json
+{
+    type: 'channel',
+    body: {
+        id: 'foobar',
+        type: 'something',
+        body: {
+            some: 'thing'
+        }
+    }
+}
+```
+
+ここで、
+* `id`には前述したそのチャンネルに接続する際に設定したIDを設定します。これで、このメッセージがどのチャンネルに向けたものなのか識別させることができます。
+* `type`にはメッセージの種類を設定します。チャンネルによって、どのような種類のメッセージを受け付けるかは異なります。
+* `body`にはメッセージの内容を設定します。チャンネルによって、どのような内容のメッセージを受け付けるかは異なります。
+
+### チャンネルから切断する
+チャンネルから切断するには、次のようなデータをJSONでストリームに送信します:
+
+```json
+{
+    type: 'disconnect',
+    body: {
+        id: 'foobar'
+    }
+}
+```
+
+ここで、
+* `id`には前述したそのチャンネルに接続する際に設定したIDを設定します。
+
+## ストリームを経由してAPIリクエストする
+
+ストリームを経由してAPIリクエストすると、HTTPリクエストを発生させずにAPIを利用できます。そのため、コードを簡潔にできたり、パフォーマンスの向上を見込めるかもしれません。
+
+ストリームを経由してAPIリクエストするには、次のようなデータをJSONでストリームに送信します:
+```json
+{
+    type: 'api',
+    body: {
+        id: 'xxxxxxxxxxxxxxxx',
+        endpoint: 'notes/create',
+        data: {
+            text: 'yee haw!'
+        }
+    }
+}
+```
+
+ここで、
+* `id`には、APIのレスポンスを識別するための、APIリクエストごとの一意なIDを設定する必要があります。UUIDや、簡単な乱数のようなもので構いません。
+* `endpoint`には、あなたがリクエストしたいAPIのエンドポイントを指定します。
+* `data`には、エンドポイントのパラメータを含めます。
+
+<div class="info">ℹ️ APIのエンドポイントやパラメータについてはAPIリファレンスをご確認ください。</div>
+
+### レスポンスの受信
+
+APIへリクエストすると、レスポンスがストリームから次のような形式で流れてきます。
+
+```json
+{
+    type: 'api:xxxxxxxxxxxxxxxx',
+    body: {
+        ...
+    }
+}
+```
+
+ここで、
+* `xxxxxxxxxxxxxxxx`の部分には、リクエストの際に設定された`id`が含まれています。これにより、どのリクエストに対するレスポンスなのか判別することができます。
+* `body`には、レスポンスが含まれています。
+
+## 投稿のキャプチャ
+
+Misskeyは投稿のキャプチャと呼ばれる仕組みを提供しています。これは、指定した投稿のイベントをストリームで受け取る機能です。
+
+例えばタイムラインを取得してユーザーに表示したとします。ここで誰かがそのタイムラインに含まれるどれかの投稿に対してリアクションしたとします。
+
+しかし、クライアントからするとある投稿にリアクションが付いたことなどは知る由がないため、リアルタイムでリアクションをタイムライン上の投稿に反映して表示するといったことができません。
+
+この問題を解決するために、Misskeyは投稿のキャプチャ機構を用意しています。投稿をキャプチャすると、その投稿に関するイベントを受け取ることができるため、リアルタイムでリアクションを反映させたりすることが可能になります。
+
+### 投稿をキャプチャする
+
+投稿をキャプチャするには、ストリームに次のようなメッセージを送信します:
+
+```json
+{
+    type: 'subNote',
+    body: {
+        id: 'xxxxxxxxxxxxxxxx'
+    }
+}
+```
+
+ここで、
+* `id`にキャプチャしたい投稿の`id`を設定します。
+
+このメッセージを送信すると、Misskeyにキャプチャを要請したことになり、以後、その投稿に関するイベントが流れてくるようになります。
+
+例えば投稿にリアクションが付いたとすると、次のようなメッセージが流れてきます:
+
+```json
+{
+    type: 'noteUpdated',
+    body: {
+        id: 'xxxxxxxxxxxxxxxx',
+        type: 'reacted',
+        body: {
+            reaction: 'like',
+            userId: 'yyyyyyyyyyyyyyyy'
+        }
+    }
+}
+```
+
+ここで、
+* `body`内の`id`に、イベントを発生させた投稿のIDが設定されます。
+* `body`内の`type`に、イベントの種類が設定されます。
+* `body`内の`body`に、イベントの詳細が設定されます。
+
+#### イベントの種類
+
+##### `reacted`
+その投稿にリアクションがされた時に発生します。
+
+* `reaction`に、リアクションの種類が設定されます。
+* `userId`に、リアクションを行ったユーザーのIDが設定されます。
+
+例:
+```json
+{
+    type: 'noteUpdated',
+    body: {
+        id: 'xxxxxxxxxxxxxxxx',
+        type: 'reacted',
+        body: {
+            reaction: 'like',
+            userId: 'yyyyyyyyyyyyyyyy'
+        }
+    }
+}
+```
+
+##### `deleted`
+その投稿が削除された時に発生します。
+
+* `deletedAt`に、削除日時が設定されます。
+
+例:
+```json
+{
+    type: 'noteUpdated',
+    body: {
+        id: 'xxxxxxxxxxxxxxxx',
+        type: 'deleted',
+        body: {
+            deletedAt: '2018-10-22T02:17:09.703Z'
+        }
+    }
+}
+```
+
+##### `pollVoted`
+その投稿に添付されたアンケートに投票された時に発生します。
+
+* `choice`に、選択肢IDが設定されます。
+* `userId`に、投票を行ったユーザーのIDが設定されます。
+
+例:
+```json
+{
+    type: 'noteUpdated',
+    body: {
+        id: 'xxxxxxxxxxxxxxxx',
+        type: 'pollVoted',
+        body: {
+            choice: 2,
+            userId: 'yyyyyyyyyyyyyyyy'
+        }
+    }
+}
+```
+
+### 投稿のキャプチャを解除する
+
+その投稿がもう画面に表示されなくなったりして、その投稿に関するイベントをもう受け取る必要がなくなったときは、キャプチャの解除を申請してください。
+
+次のメッセージを送信します:
+
+```json
+{
+    type: 'unsubNote',
+    body: {
+        id: 'xxxxxxxxxxxxxxxx'
+    }
+}
+```
+
+ここで、
+* `id`にキャプチャを解除したい投稿の`id`を設定します。
+
+このメッセージを送信すると、以後、その投稿に関するイベントは流れてこないようになります。
+
+# チャンネル一覧
+## `main`
+アカウントに関する基本的な情報が流れてきます。このチャンネルにパラメータはありません。
+
+### 流れてくるイベント一覧
+
+#### `renote`
+自分の投稿がRenoteされた時に発生するイベントです。自分自身の投稿をRenoteしたときは発生しません。
+
+#### `mention`
+誰かからメンションされたときに発生するイベントです。
+
+#### `readAllNotifications`
+自分宛ての通知がすべて既読になったことを表すイベントです。このイベントを利用して、「通知があることを示すアイコン」のようなものをオフにしたりする等のケースが想定されます。
+
+#### `meUpdated`
+自分の情報が更新されたことを表すイベントです。
+
+#### `follow`
+自分が誰かをフォローしたときに発生するイベントです。
+
+#### `unfollow`
+自分が誰かのフォローを解除したときに発生するイベントです。
+
+#### `followed`
+自分が誰かにフォローされたときに発生するイベントです。
+
+## `homeTimeline`
+ホームタイムラインの投稿情報が流れてきます。このチャンネルにパラメータはありません。
+
+### 流れてくるイベント一覧
+
+#### `note`
+タイムラインに新しい投稿が流れてきたときに発生するイベントです。
+
+## `localTimeline`
+ローカルタイムラインの投稿情報が流れてきます。このチャンネルにパラメータはありません。
+
+### 流れてくるイベント一覧
+
+#### `note`
+ローカルタイムラインに新しい投稿が流れてきたときに発生するイベントです。
+
+## `hybridTimeline`
+ソーシャルタイムラインの投稿情報が流れてきます。このチャンネルにパラメータはありません。
+
+### 流れてくるイベント一覧
+
+#### `note`
+ソーシャルタイムラインに新しい投稿が流れてきたときに発生するイベントです。
+
+## `globalTimeline`
+グローバルタイムラインの投稿情報が流れてきます。このチャンネルにパラメータはありません。
+
+### 流れてくるイベント一覧
+
+#### `note`
+グローバルタイムラインに新しい投稿が流れてきたときに発生するイベントです。
diff --git a/src/docs/pl-PL/features/antenna.md b/src/docs/pl-PL/features/antenna.md
new file mode 100644
index 0000000000..39f782c9a0
--- /dev/null
+++ b/src/docs/pl-PL/features/antenna.md
@@ -0,0 +1,4 @@
+# Anteny
+アンテナは、自由に条件を設定して、合致するノートを自動で収集することができる機能です。
+
+条件を設定したアンテナが作成された状態で、条件に合致するノートが投稿されると、リアルタイムでそのアンテナのタイムラインにノートが追加されます。
diff --git a/src/docs/pl-PL/features/custom-emoji.md b/src/docs/pl-PL/features/custom-emoji.md
new file mode 100644
index 0000000000..3f71205a67
--- /dev/null
+++ b/src/docs/pl-PL/features/custom-emoji.md
@@ -0,0 +1,2 @@
+# Niestandardowe emoji
+カスタム絵文字は、インスタンスで用意された画像を絵文字のように使える機能です。 ノート、リアクション、チャット、自己紹介、名前などの場所で使うことができます。 カスタム絵文字をそれらの場所で使うには、絵文字ピッカーボタン(ある場合)を押すか、`:`を入力して絵文字サジェストを表示します。 テキスト内に`:foo:`のような形式の文字列が見つかると、`foo`の部分がカスタム絵文字名と解釈され、表示時には対応したカスタム絵文字に置き換わります。
diff --git a/src/docs/pl-PL/features/deck.md b/src/docs/pl-PL/features/deck.md
new file mode 100644
index 0000000000..aa879d7dfa
--- /dev/null
+++ b/src/docs/pl-PL/features/deck.md
@@ -0,0 +1,18 @@
+# Tablica
+
+デッキは利用可能なUIのひとつです。「カラム」と呼ばれるビューを複数並べて表示させることで、カスタマイズ性が高く、情報量の多いUIが構築できることが特徴です。
+
+## カラムの追加
+デッキの背景を右クリックし、「カラムを追加」して任意のカラムを追加できます。
+
+## カラムの移動
+カラムは、ドラッグアンドドロップで他のカラムと位置を入れ替えることが出来るほか、カラムメニュー(カラムのヘッダー右クリック)から位置を移動させることもできます。
+
+## カラムの水平分割
+カラムは左右だけでなく、上下に並べることもできます。 カラムメニューを開き、「左に重ねる」を選択すると、左のカラムの下に現在のカラムが移動します。 上下分割を解除するには、カラムメニューの「右に出す」を選択します。
+
+## カラムの設定
+カラムメニューの「編集」を選択するとカラムの設定を編集できます。カラムの名前を変えたり、幅を変えたりできます。
+
+## デッキの設定
+デッキに関する設定は、[settings/deck](/settings/deck)で行えます。
diff --git a/src/docs/pl-PL/features/drive.md b/src/docs/pl-PL/features/drive.md
new file mode 100644
index 0000000000..c49ea4f65e
--- /dev/null
+++ b/src/docs/pl-PL/features/drive.md
@@ -0,0 +1,17 @@
+# Dysk
+ドライブは、Misskey上でファイルを管理できる機能です。
+
+[ドライブのページ](/my/drive)から任意のファイルをアップロードできるほか、アバターに設定した画像や、ノートに添付したファイルなどもすべてドライブにアップロードされます。
+
+<div class="warn">⚠️ ドライブからファイルを削除すると、そのファイルが添付されたノートも消えます。</div>
+
+ドライブにアップロードされたファイルは、いつでもダウンロードすることができるほか、ノート作成時に「ドライブからファイルを添付」することでファイルを再利用することもできます。
+
+ドライブ内にフォルダを作り、複数のファイルをまとめて整理することもできます。
+
+## 閲覧注意 (NSFW)
+<div class="info">ℹ️ この項目が閲覧注意なわけではありません</div>
+
+閲覧注意またはNSFW (Not safe for work) は、ドライブのファイルに設定することができるフラグです。 閲覧注意フラグを設定されたファイルは、表示される際に閲覧者の操作なしには表示されなくなります。 このフラグは、例えば職場や公共の場で閲覧するのに適切でないと思われる画像などに設定し、そのような画像が突然表示されてしまうことを防ぐ目的で使われます。
+
+このフラグは手動でオンオフを切り替えられるほか、モデレーターの判断で設定される場合もあります。
diff --git a/src/docs/pl-PL/features/favorite.md b/src/docs/pl-PL/features/favorite.md
new file mode 100644
index 0000000000..82d782b7c3
--- /dev/null
+++ b/src/docs/pl-PL/features/favorite.md
@@ -0,0 +1,4 @@
+# Dodaj do ulubionych
+[ノート](./node)をお気に入りとして登録できる機能です。 お気に入り登録したノートは、[お気に入りページ](./my/favorites)で一覧することができます。 お気に入りに登録したことは相手に通知されず、お気に入りは自分しか見ることができません。
+
+ノートをお気に入り登録するには、ノートメニューの「お気に入り」を押します。お気に入り解除するには、ノートメニューの「お気に入り解除」を押します。
diff --git a/src/docs/pl-PL/features/follow.md b/src/docs/pl-PL/features/follow.md
new file mode 100644
index 0000000000..3b5ce84dce
--- /dev/null
+++ b/src/docs/pl-PL/features/follow.md
@@ -0,0 +1,2 @@
+# Obserwowani
+ユーザーをフォローすると、タイムラインにそのユーザーの投稿が表示されるようになります。ただし、他のユーザーに対する返信は含まれません。 ユーザーをフォローするには、ユーザーページの「フォロー」ボタンをクリックします。フォローを解除するには、もう一度クリックします。
diff --git a/src/docs/pl-PL/features/keyboard-shortcut.md b/src/docs/pl-PL/features/keyboard-shortcut.md
new file mode 100644
index 0000000000..d351a66301
--- /dev/null
+++ b/src/docs/pl-PL/features/keyboard-shortcut.md
@@ -0,0 +1,66 @@
+# キーボードショートカット
+
+## Globalna
+これらのショートカットは基本的にどこでも使えます。
+<table>
+    <thead>
+        <tr><th>ショートカット</th><th>効果</th><th>由来</th></tr>
+    </thead>
+    <tbody>
+        <tr><td><kbd class="key">P</kbd>, <kbd class="key">N</kbd></td><td>新規投稿</td><td><b>P</b>ost, <b>N</b>ew, <b>N</b>ote</td></tr>
+        <tr><td><kbd class="key">T</kbd></td><td>タイムラインの最も新しい投稿にフォーカス</td><td><b>T</b>imeline, <b>T</b>op</td></tr>
+        <tr><td><kbd class="group"><kbd class="key">Shift</kbd> + <kbd class="key">N</kbd></kbd></td><td>通知を表示/隠す</td><td><b>N</b>otifications</td></tr>
+        <tr><td><kbd class="key">S</kbd></td><td>Szukaj</td><td><b>S</b>earch</td></tr>
+        <tr><td><kbd class="key">H</kbd>, <kbd class="key">?</kbd></td><td>ヘルプを表示</td><td><b>H</b>elp</td></tr>
+    </tbody>
+</table>
+
+## 投稿にフォーカスされた状態
+<table>
+    <thead>
+        <tr><th>ショートカット</th><th>効果</th><th>由来</th></tr>
+    </thead>
+    <tbody>
+        <tr><td><kbd class="key">↑</kbd>, <kbd class="key">K</kbd>, <kbd class="group"><kbd class="key">Shift</kbd> + <kbd class="key">Tab</kbd></kbd></td><td>上の投稿にフォーカスを移動</td><td>-</td></tr>
+        <tr><td><kbd class="key">↓</kbd>, <kbd class="key">J</kbd>, <kbd class="key">Tab</kbd></td><td>下の投稿にフォーカスを移動</td><td>-</td></tr>
+        <tr><td><kbd class="key">R</kbd></td><td>返信フォームを開く</td><td><b>R</b>eply</td></tr>
+        <tr><td><kbd class="key">Q</kbd></td><td>Renoteフォームを開く</td><td><b>Q</b>uote</td></tr>
+        <tr><td><kbd class="group"><kbd class="key">Ctrl</kbd> + <kbd class="key">Q</kbd></kbd></td><td>即刻Renoteする(フォームを開かずに)</td><td>-</td></tr>
+        <tr><td><kbd class="key">E</kbd>, <kbd class="key">A</kbd>, <kbd class="key">+</kbd></td><td>リアクションフォームを開く</td><td><b>E</b>mote, re<b>A</b>ction</td></tr>
+        <tr><td><kbd class="key">0</kbd>~<kbd class="key">9</kbd></td><td>数字に対応したリアクションをする(対応については後述)</td><td>-</td></tr>
+        <tr><td><kbd class="key">F</kbd>, <kbd class="key">B</kbd></td><td>お気に入りに登録</td><td><b>F</b>avorite, <b>B</b>ookmark</td></tr>
+        <tr><td><kbd class="key">Del</kbd>, <kbd class="group"><kbd class="key">Ctrl</kbd> + <kbd class="key">D</kbd></kbd></td><td>投稿を削除</td><td><b>D</b>elete</tr>
+        <tr><td><kbd class="key">M</kbd>, <kbd class="key">O</kbd></td><td>投稿に対するメニューを開く</td><td><b>M</b>ore, <b>O</b>ther</td></tr>
+        <tr><td><kbd class="key">S</kbd></td><td>CWで隠された部分を表示 or 隠す</td><td><b>S</b>how, <b>S</b>ee</td></tr>
+        <tr><td><kbd class="key">Esc</kbd></td><td>フォーカスを外す</td><td>-</td></tr>
+    </tbody>
+</table>
+
+## Renoteフォーム
+<table>
+    <thead>
+        <tr><th>ショートカット</th><th>効果</th><th>由来</th></tr>
+    </thead>
+    <tbody>
+        <tr><td><kbd class="key">Enter</kbd></td><td>Renoteする</td><td>-</td></tr>
+        <tr><td><kbd class="key">Q</kbd></td><td>フォームを展開する</td><td><b>Q</b>uote</td></tr>
+        <tr><td><kbd class="key">Esc</kbd></td><td>フォームを閉じる</td><td>-</td></tr>
+    </tbody>
+</table>
+
+## リアクションフォーム
+デフォルトで「👍」にフォーカスが当たっている状態です。
+<table>
+    <thead>
+        <tr><th>ショートカット</th><th>効果</th><th>由来</th></tr>
+    </thead>
+    <tbody>
+        <tr><td><kbd class="key">↑</kbd>, <kbd class="key">K</kbd></td><td>上のリアクションにフォーカスを移動</td><td>-</td></tr>
+        <tr><td><kbd class="key">↓</kbd>, <kbd class="key">J</kbd></td><td>下のリアクションにフォーカスを移動</td><td>-</td></tr>
+        <tr><td><kbd class="key">←</kbd>, <kbd class="key">H</kbd>, <kbd class="group"><kbd class="key">Shift</kbd> + <kbd class="key">Tab</kbd></kbd></td><td>左のリアクションにフォーカスを移動</td><td>-</td></tr>
+        <tr><td><kbd class="key">→</kbd>, <kbd class="key">L</kbd>, <kbd class="key">Tab</kbd></td><td>右のリアクションにフォーカスを移動</td><td>-</td></tr>
+        <tr><td><kbd class="key">Enter</kbd>, <kbd class="key">Space</kbd>, <kbd class="key">+</kbd></td><td>リアクション確定</td><td>-</td></tr>
+        <tr><td><kbd class="key">0</kbd>~<kbd class="key">9</kbd></td><td>数字に対応したリアクションで確定</td><td>-</td></tr>
+        <tr><td><kbd class="key">Esc</kbd></td><td>リアクションするのをやめる</td><td>-</td></tr>
+    </tbody>
+</table>
diff --git a/src/docs/pl-PL/features/mfm.md b/src/docs/pl-PL/features/mfm.md
new file mode 100644
index 0000000000..5be2df4f30
--- /dev/null
+++ b/src/docs/pl-PL/features/mfm.md
@@ -0,0 +1,12 @@
+# MFM
+MFMは、Misskey Flavored Markdownの略で、Misskeyの様々な場所で使用できる専用のマークアップ言語です。 MFMで使用可能な構文は[MFMチートシート](/mfm-cheat-sheet)で確認できます。
+
+## MFMが使用可能な場所の例
+- ノート本文
+- CW注釈
+- ユーザーの名前
+- ユーザーの自己紹介
+
+## 開発者向け情報
+MFMのパーサー実装はライブラリとして公開されており、簡単にクライアントにMFMを組み込むことが可能です。
+- [misskey-dev/mfm.js](https://github.com/misskey-dev/mfm.js) - JavaScriptパーサー実装
diff --git a/src/docs/pl-PL/features/mute.md b/src/docs/pl-PL/features/mute.md
new file mode 100644
index 0000000000..8daf9f68ad
--- /dev/null
+++ b/src/docs/pl-PL/features/mute.md
@@ -0,0 +1,13 @@
+# Wycisz
+
+ユーザーをミュートすると、そのユーザーに関する次のコンテンツがMisskeyに表示されなくなります:
+
+* タイムラインや投稿の検索結果内の、そのユーザーの投稿(およびそれらの投稿に対する返信やRenote)
+* そのユーザーからの通知
+* メッセージ履歴一覧内の、そのユーザーとのメッセージ履歴
+
+ユーザーをミュートするには、対象のユーザーのユーザーページに表示されている「ミュート」ボタンを押します。
+
+ミュートを行ったことは相手に通知されず、ミュートされていることを知ることもできません。
+
+設定>ミュート から、自分がミュートしているユーザー一覧を確認することができます。
diff --git a/src/docs/pl-PL/features/note.md b/src/docs/pl-PL/features/note.md
new file mode 100644
index 0000000000..dc5b0f1f21
--- /dev/null
+++ b/src/docs/pl-PL/features/note.md
@@ -0,0 +1,51 @@
+# Wpisy
+ノートは、Misskeyに投稿される、文章、ファイル、アンケートなどを含むコンテンツで、Misskeyの中心的概念です。また、そのノートを作成する行為自体もノートと呼ばれます。
+
+ノートが作成されると、[タイムライン](./timeline)に追加され、自分の[フォロワー](./follow)やサーバーのユーザーが見れるようになります。
+
+ノートには、[リアクション](./reaction)を行うことができます。また、返信や引用もできます。
+
+ノートを[お気に入り](./favorite)登録することで、後で簡単に見返すことができます。
+
+## ノートを作成する
+ノートを作成するには、画面上にある鉛筆マークのボタンを押して、作成フォームを開きます。作成フォームに内容を入力し、「ノート」ボタンを押すことでノートが作成されます。 ノートには、画像、動画など任意のファイルや、[アンケート](./poll)を添付することができます。また、本文中には[MFM](./mfm)が使用でき、[メンション](./mention)や[ハッシュタグ](./hashtag)を含めることもできます。 他にも、CWや公開範囲といった設定も行えます(詳細は後述)。
+<div class="info">ℹ️ コンピューターのクリップボードに画像データがある状態で、フォーム内のテキストボックスにペーストするとその画像を添付することができます。</div>
+<div class="info">ℹ️ テキストボックス内で<kbd class="key">Ctrl + Enter</kbd>を押すことでも投稿できます。</div>
+
+## Udostępnij
+既にあるノートを引用、もしくはそのノートを新しいノートとして共有する行為、またそれによって作成されたノートをRenoteと呼びます。 自分がフォローしているユーザーの、気に入ったノートを自分のフォロワーに共有したい場合や、過去の自分のノートを再度共有したい場合に使います。 同じノートに対して無制限にRenoteを行うことができますが、あまり連続して使用すると迷惑になる場合もあるので、注意しましょう。
+<div class="warn">⚠️ 公開範囲がフォロワーやダイレクトのノートはRenoteできません</div>
+
+Renoteを削除するには、Renoteの時刻表示の隣にある「...」を押し、「Renote解除」を選択します。
+
+## CW
+Contents Warningの略で、ノートの内容を、閲覧者の操作なしには表示しないようにできる機能です。主に長大な内容を隠すためや、ネタバレ防止などに使うことができます。 設定するには、フォームの「内容を隠す」ボタン(目のアイコン)を押します。すると新しい入力エリアが表れるので、そこに内容の要約を記入します。
+
+## Widoczność
+ノートごとに、そのノートが公開される範囲を設定することができます。フォームの「ノート」ボタンの左にあるアイコンを押すと公開範囲を以下から選択できます。
+
+### Publiczny
+全ての人に対してノートが公開されるほか、サーバーの全てのタイムライン(ホームタイムライン、ローカルタイムライン、ソーシャルタイムライン、グローバルタイムライン)にノートが流れます。
+<div class="warn">⚠️ アカウントが<a href="./silence">サイレンス</a>状態の時は、この公開範囲は使用できません。</div>
+
+### Strona główna
+全ての人に対してノートが公開されますが、フォロワー以外のローカルタイムライン、ソーシャルタイムライン、グローバルタイムラインにはノートは流れません。
+
+### ObserwujÄ…cy
+自分のフォロワーに対してのみノートを公開します。フォロワーの全てのタイムラインに流れます。
+
+### Bezpośredni
+指定したユーザーに対してのみノートを公開します。指定したユーザーの全てのタイムラインに流れます。
+
+### 「ローカルのみ」オプション
+このオプションを有効にすると、リモートにノートを連合しなくなります。
+
+### 公開範囲の比較
+<table>
+    <tr><th></th><th>Publiczny</th><th>Strona główna</th><th>Obserwujący</th><th>Bezpośredni</th></tr>
+    <tr><th>フォロワーのLTL/STL/GTL</th><td>✔</td><td>✔</td><td>✔</td><td></td></tr>
+    <tr><th>非フォロワーのLTL/STL/GTL</th><td>✔</td><td></td><td></td><td></td></tr>
+</table>
+
+## Przypnij do profilu
+ノートをピン留めすると、ユーザーページに常にそのノートを表示しておくことができます。 ノートのメニューを開き、「ピン留め」を選択してピン留めできます。 複数のノートをピン留めできます。
diff --git a/src/docs/pl-PL/features/pages.md b/src/docs/pl-PL/features/pages.md
new file mode 100644
index 0000000000..efa18263f6
--- /dev/null
+++ b/src/docs/pl-PL/features/pages.md
@@ -0,0 +1,10 @@
+# Pages
+
+## Zmienne
+変数を使うことで動的なページを作成できます。テキスト内で <b>{ 変数名 }</b> と書くとそこに変数の値を埋め込めます。例えば <b>Hello { thing } world!</b> というテキストで、変数(thing)の値が <b>ai</b> だった場合、テキストは <b>Hello ai world!</b> になります。
+
+変数の評価(値を算出すること)は上から下に行われるので、ある変数の中で自分より下の変数を参照することはできません。例えば上から <b>A、B、C</b> と3つの変数を定義したとき、<b>C</b>の中で<b>A</b>や<b>B</b>を参照することはできますが、<b>A</b>の中で<b>B</b>や<b>C</b>を参照することはできません。
+
+ユーザーからの入力を受け取るには、ページに「ユーザー入力」ブロックを設置し、「変数名」に入力を格納したい変数名を設定します(変数は自動で作成されます)。その変数を使ってユーザー入力に応じた動作を行えます。
+
+関数を使うと、値の算出処理を再利用可能な形にまとめることができます。関数を作るには、「関数」タイプの変数を作成します。関数にはスロット(引数)を設定することができ、スロットの値は関数内で変数として利用可能です。また、関数を引数に取る関数(高階関数と呼ばれます)も存在します。関数は予め定義しておくほかに、このような高階関数のスロットに即席でセットすることもできます。
diff --git a/src/docs/pl-PL/features/reaction.md b/src/docs/pl-PL/features/reaction.md
new file mode 100644
index 0000000000..0f292d9c06
--- /dev/null
+++ b/src/docs/pl-PL/features/reaction.md
@@ -0,0 +1,11 @@
+# Reakcja
+他の人のノートに、絵文字を付けて簡単にあなたの反応を伝えられる機能です。 リアクションするには、ノートの + アイコンをクリックしてピッカーを表示し、絵文字を選択します。 リアクションには[カスタム絵文字](./custom-emoji)も使用できます。
+
+## リアクションピッカーのカスタマイズ
+ピッカーに表示される絵文字を自分好みにカスタマイズすることができます。 設定の「リアクション」で設定します。
+
+## リモート投稿へのリアクションについて
+リアクションはMisskeyオリジナルの機能であるため、リモートインスタンスがMisskeyでない限りは、ほとんどの場合「Like」としてアクティビティが送信されます。一般的にはLikeは「お気に入り」として実装されているようです。
+
+## リモートからのリアクションについて
+リモートから「Like」アクティビティを受信したとき、Misskeyでは「👍」のリアクションとして解釈されます。
diff --git a/src/docs/pl-PL/features/silence.md b/src/docs/pl-PL/features/silence.md
new file mode 100644
index 0000000000..c90bbe6ff7
--- /dev/null
+++ b/src/docs/pl-PL/features/silence.md
@@ -0,0 +1,6 @@
+# Wycisz
+サイレンスは、アカウントに設定される状態のひとつです。
+
+アカウントがサイレンス状態になると、ノートの公開範囲をパブリックにできなくなります。 ホーム、フォロワー、ダイレクトは選択可能なため、サイレンスを受けた場合でもフォロワーやあなたのユーザーページを直接訪れた場合は投稿を閲覧できますが、GTL(連合タイムライン)やLTL(ローカルタイムライン)には投稿が流れません。
+
+アカウントのサイレンス状態は、サーバーのモデレーターによって有効化/無効化されます。
diff --git a/src/docs/pl-PL/features/theme.md b/src/docs/pl-PL/features/theme.md
new file mode 100644
index 0000000000..e31cb4a098
--- /dev/null
+++ b/src/docs/pl-PL/features/theme.md
@@ -0,0 +1,68 @@
+# Motywy
+
+テーマを設定して、Misskeyクライアントの見た目を変更できます。
+
+## テーマの設定
+設定 > テーマ
+
+## テーマを作成する
+テーマコードはJSON5で記述されたテーマオブジェクトです。 テーマは以下のようなオブジェクトです。
+``` js
+{
+    id: '17587283-dd92-4a2c-a22c-be0637c9e22a',
+
+    name: 'Danboard',
+    author: 'syuilo',
+
+    base: 'light',
+
+    props: {
+        accent: 'rgb(218, 141, 49)',
+        bg: 'rgb(218, 212, 190)',
+        fg: 'rgb(115, 108, 92)',
+        panel: 'rgb(236, 232, 220)',
+        renote: 'rgb(100, 152, 106)',
+        link: 'rgb(100, 152, 106)',
+        mention: '@accent',
+        hashtag: 'rgb(100, 152, 106)',
+        header: 'rgba(239, 227, 213, 0.75)',
+        navBg: 'rgb(216, 206, 182)',
+        inputBorder: 'rgba(0, 0, 0, 0.1)',
+    },
+}
+
+```
+
+* `id` ... テーマの一意なID。UUIDをおすすめします。
+* `name` ... テーマ名
+* `author` ... テーマの作者
+* `desc` ... テーマの説明(オプション)
+* `base` ... 明るいテーマか、暗いテーマか
+    * `light`にすると明るいテーマになり、`dark`にすると暗いテーマになります。
+    * テーマはここで設定されたベーステーマを継承します。
+* `props` ... テーマのスタイル定義。これから説明します。
+
+### テーマのスタイル定義
+`props`下にはテーマのスタイルを定義します。 キーがCSSの変数名になり、バリューで中身を指定します。 なお、この`props`オブジェクトはベーステーマから継承されます。 ベーステーマは、このテーマの`base`が`light`なら[_light.json5](https://github.com/misskey-dev/misskey/blob/develop/src/client/themes/_light.json5)で、`dark`なら[_dark.json5](https://github.com/misskey-dev/misskey/blob/develop/src/client/themes/_dark.json5)です。 つまり、このテーマ内の`props`に`panel`というキーが無くても、そこにはベーステーマの`panel`があると見なされます。
+
+#### バリューで使える構文
+* 16進数で表された色
+    * 例: `#00ff00`
+* `rgb(r, g, b)`形式で表された色
+    * 例: `rgb(0, 255, 0)`
+* `rgb(r, g, b, a)`形式で表された透明度を含む色
+    * 例: `rgba(0, 255, 0, 0.5)`
+* 他のキーの値の参照
+    * `@{キー名}`と書くと他のキーの値の参照になります。`{キー名}`は参照したいキーの名前に置き換えます。
+    * 例: `@panel`
+* 定数(後述)の参照
+    * `${定数名}`と書くと定数の参照になります。`{定数名}`は参照したい定数の名前に置き換えます。
+    * 例: `$main`
+* 関数(後述)
+    * `:{関数名}<{引数}<{色}`
+
+#### Stała
+「CSS変数として出力はしたくないが、他のCSS変数の値として使いまわしたい」値があるときは、定数を使うと便利です。 キー名を`$`で始めると、そのキーはCSS変数として出力されません。
+
+#### Funkcje
+wip
diff --git a/src/docs/pl-PL/features/timeline.md b/src/docs/pl-PL/features/timeline.md
new file mode 100644
index 0000000000..6bcd605cb7
--- /dev/null
+++ b/src/docs/pl-PL/features/timeline.md
@@ -0,0 +1,31 @@
+# OÅ› czasu
+タイムラインは、[ノート](./note)が時系列で表示される機能です。 タイムラインには以下で示す種類があり、種類によって表示されるノートも異なります。 なお、タイムラインの種類によってはサーバーにより無効になっている場合があります。
+
+## Strona główna
+自分のフォローしているユーザーの投稿が流れます。HTLと略されます。
+
+## Lokalne
+全てのローカルユーザーの「ホーム」指定されていない投稿が流れます。LTLと略されます。
+
+## Społeczność
+自分のフォローしているユーザーの投稿と、全てのローカルユーザーの「ホーム」指定されていない投稿が流れます。STLと略されます。
+
+## Globalna
+全てのローカルユーザーの「ホーム」指定されていない投稿と、サーバーに届いた全てのリモートユーザーの「ホーム」指定されていない投稿が流れます。GTLと略されます。
+
+## Porównanie
+| ソース          |               |               | Oś czasu |             |          |
+| ------------ | ------------- | ------------- | -------- | ----------- | -------- |
+| Użytkownicy  | Widoczność    | Strona główna | Lokalne  | Społeczność | Globalna |
+| ローカル (フォロー)  | Publikuj      | ✔             | ✔        | ✔           | ✔        |
+|              | Strona główna | ✔             |          | ✔           |          |
+|              | Obserwujący   | ✔             | ✔        | ✔           | ✔        |
+| リモート (フォロー)  | Publikuj      | ✔             |          | ✔           | ✔        |
+|              | Strona główna | ✔             |          | ✔           |          |
+|              | Obserwujący   | ✔             |          | ✔           | ✔        |
+| ローカル (未フォロー) | Publikuj      |               | ✔        | ✔           | ✔        |
+|              | Strona główna |               |          |             |          |
+|              | ObserwujÄ…cy   |               |          |             |          |
+| リモート (未フォロー) | Publikuj      |               |          |             | ✔        |
+|              | Strona główna |               |          |             |          |
+|              | ObserwujÄ…cy   |               |          |             |          |
diff --git a/src/docs/pl-PL/features/widgets.md b/src/docs/pl-PL/features/widgets.md
new file mode 100644
index 0000000000..976c3bb6fb
--- /dev/null
+++ b/src/docs/pl-PL/features/widgets.md
@@ -0,0 +1,7 @@
+# Widżety
+ウィジェットは、MisskeyのUI上に設置できる小型の情報表示、操作が行えるパーツです。
+
+ウィジェットを編集するには、ウィジェット編集モードに切り替えます。切り替え方法はUIによって異なります。 ウィジェット編集モードでは、ウィジェットの追加、削除、並び替え、およびそれぞれのウィジェットの設定を行えます。
+
+## 利用可能なウィジェット一覧
+todo
diff --git a/src/docs/pl-PL/general/apps.md b/src/docs/pl-PL/general/apps.md
new file mode 100644
index 0000000000..1f4c85fe8f
--- /dev/null
+++ b/src/docs/pl-PL/general/apps.md
@@ -0,0 +1,6 @@
+# サードパーティアプリのリスト
+## クライアント
+todo
+
+## 連携サービス
+todo
diff --git a/src/docs/pl-PL/general/faq.md b/src/docs/pl-PL/general/faq.md
new file mode 100644
index 0000000000..ecb664e32e
--- /dev/null
+++ b/src/docs/pl-PL/general/faq.md
@@ -0,0 +1,22 @@
+# よくある質問
+ここでは利用上のよくある質問について掲載しています。 Misskeyのプロジェクト自体についてのよくある質問は[こちら](./misskey)に掲載されています。
+
+### iOS/Androidのアプリはありますか?
+公式にはそういったOSのネイティブアプリを開発していませんが、サードパーティ製のアプリがいくつかあります。 詳しくは[こちら](./apps)をご覧ください。
+
+ただ、サードパーティ製アプリはどうしても機能への対応が遅れてしまうため、とくに拘りがなければ公式のWebクライアントの利用をおすすめします。 なお、MisskeyのWebクライアントはPWAに対応しているので、ネイティブアプリのように動作させることも可能です。 詳しくは[こちら](todo)をご覧ください。
+
+## 他のサーバーのユーザーをフォローするときは?
+メニューから検索を選び、ユーザー名をホスト込みで入力します。例: `@syuilo@misskey.io`
+
+## Renoteを削除するには?
+Renoteの時刻表示の隣にある「...」を押し、「Renote解除」を選択します。 Renoteについては[こちら](../features/note)をご確認ください。
+
+## URLのプレビューを表示させたくない
+MFMには、そのURLのプレビューを無効にする構文があります。詳細は[MFMチートシート](/mfm-cheat-sheet)をご確認ください。
+
+## カスタム絵文字を追加したい
+運営者のみがカスタム絵文字を追加、編集、削除できます。それらを希望する場合は運営者に依頼してください。
+
+## Botを開発したい
+Misskey APIを利用してBotの開発が可能です。[こちら](../advanced/develop-bot)をご確認ください。
diff --git a/src/docs/pl-PL/general/glossary.md b/src/docs/pl-PL/general/glossary.md
new file mode 100644
index 0000000000..96a5ce2398
--- /dev/null
+++ b/src/docs/pl-PL/general/glossary.md
@@ -0,0 +1,83 @@
+# 用語集
+Misskeyに関する用語集です。
+
+## AcitivityPub
+(読み: あくてぃびてぃぱぶ) 分散型を実現するために用いられるプロトコル(仕様)。このプロトコルに則ってサーバー同士通信を行うことで、連合が行われ、Fediverseを形成しています。
+
+## AiScript
+(読み: あいすくりぷと) Misskey上で使用できるプログラミング言語です。詳細は[こちら。](../advanced/aiscript)
+
+## API
+(読み: えーぴーあい) Misskeyのサーバーが公開している、プログラムからMisskeyを扱うためのインターフェース。詳細は[こちら。](../advanced/api)
+
+## Bot
+(読み: ぼっと) プログラムによって動作しているアカウント。
+
+## CW
+(読み: こんてんつわーにんぐ) Contents Warningの略。ノートの内容を、操作なしには表示しないようにできる機能。主に長大な内容を隠すためや、ネタバレ防止などに使われます。
+
+## Fediverse
+(読み: ふぇでぃばーす) Misskeyを含む様々な分散型ソフトウェアのサーバーで構成されたネットワーク。
+
+## GTL
+グローバルタイムライン(Global TimeLine)の略。タイムラインの詳細は[こちら。](../features/timeline)
+
+## HTL
+ホームタイムライン(Home TimeLine)の略。タイムラインの詳細は[こちら。](../features/timeline)
+
+## LTL
+ローカルタイムライン(Local TimeLine)の略。タイムラインの詳細は[こちら。](../features/timeline)
+
+## MFM
+(読み: えむえふえむ) Misskey Flavored Markdownの略で、Misskey上で使用できるマークアップ言語です。詳細は[こちら。](../features/mfm)
+
+## NSFW
+(読み: のっとせーふふぉーわーく) Not Safe For Workの略。画像を「閲覧注意」扱いにし、操作なしには表示しないようにすることができる機能。
+
+## Udostępnij
+(読み: りのーと) 既にあるノートを引用、もしくはそのノートを新しいノートとして共有する行為、またそれによって作成されたノート。詳細は[こちら。](../features/note)
+
+## STL
+ソーシャルタイムライン(Social TimeLine)の略。タイムラインの詳細は[こちら。](../features/timeline)
+
+## 藍
+(読み: あい) Misskeyの看板娘(公式キャラクター)です。
+
+## アクティブユーザー
+インスタンスにアカウントを作っているユーザーのうち、現在も実際にサービスを利用しているユーザーのこと。
+
+## Instancja
+todo
+
+## コントロールパネル
+インスタンスの設定画面のこと。
+
+## Serwery
+todo
+
+## Wycisz
+ノートをパブリックな公開範囲で投稿できなくされている状態。モデレーターの判断でユーザーごとに設定されます。詳細は[こちら。](../features/silence)
+
+## ZawieÅ›
+アカウントが使用不可に設定されている状態。
+
+## Dysk
+Misskeyにアップロードしたファイルを管理する機能。詳細は[こちら。](../features/drive)
+
+## Wpisy
+Misskeyに投稿される、文章、ファイル、アンケートなどを含めることができるコンテンツ。詳細は[こちら。](../features/note)
+
+## ミスキスト
+Misskeyを使う人のこと。
+
+## Moderator
+スパムの凍結およびサイレンスや不適切な投稿の削除など、コミュニティ運営に関する権限を持つユーザー。
+
+## Zdalny
+他サーバーのことを指します。リモートユーザーといったように接頭辞としても使われます。ローカルの逆です。
+
+## Federacja
+サーバー上で作成された情報が他のサーバーに伝わること。
+
+## Lokalne
+自サーバーのことを指します。ローカルユーザー、ローカルタイムラインといったように接頭辞としても使われます。リモートの逆です。
diff --git a/src/docs/pl-PL/general/links.md b/src/docs/pl-PL/general/links.md
new file mode 100644
index 0000000000..d6b16856fb
--- /dev/null
+++ b/src/docs/pl-PL/general/links.md
@@ -0,0 +1,5 @@
+# リンク集
+
+## ライブラリ
+- [misskey-dev/misskey.js](https://github.com/misskey-dev/misskey.js) - JavaScriptのMisskey SDK
+- [misskey-dev/mfm.js](https://github.com/misskey-dev/mfm.js) - JavaScriptのMFMパーサー実装
diff --git a/src/docs/pl-PL/general/misskey.md b/src/docs/pl-PL/general/misskey.md
new file mode 100644
index 0000000000..2ad7e0da66
--- /dev/null
+++ b/src/docs/pl-PL/general/misskey.md
@@ -0,0 +1,87 @@
+# O Misskey
+
+Misskeyはオープンソースの分散型マイクロブログプラットフォームプロジェクトです。 開発は日本でsyuiloによって2014年から開始されました。 ドライブ、リアクションなどの豊富な機能や、高いカスタマイズ性を備えたUIを持つことが特徴です。
+
+## 歴史
+開発当初は掲示板がメインのサービスでしたが、ユーザーが短文を投稿し、それを時系列で流れるタイムライン機能を追加したところ人気が高まり、徐々にそれがメインとして開発が進むようになりました。 当初は分散型ではありませんでしたが、2018年にAcitivityPubを実装し分散型になったことで、より多くの方に認知され利用されるサービスになり、現在に至ります。
+<div class="info">ℹ️ Misskeyという名前は、syuiloが当時聴いていたMay'nというアーティストの楽曲、Brain Diverの歌詞に由来します。</div>
+
+誰でも開発に参加することができ、現在でも活発に開発が続いています。
+
+## 分散型とは何か?
+
+<b>分散(distributed)型</b>とは、<b>非中央集権(decentralized)</b>とも呼ばれ、コミュニティが多数のサーバーに分散して存在し、それらが相互に<b>通信(連合、federation)</b>することでコンテンツ共有<b>ネットワーク(Fediverse)</b>を形成していることが特徴のサービスです。 単一のサーバーしか存在しない、もしくは複数存在しても互いに独立している場合は中央集権なサービスと言われ、例えばTwitterやFacebookなどほとんどのサービスがそれに該当します。 分散型のメリットは、自分に合った運営者やテーマのサーバーを選択できることです。自分でサーバーを作成することもできます。連合するおかげで、どのサーバーを選んでも、同じコミュニティにアクセスできます。
+
+## 常にオープンソース
+Misskeyはこれまでもこれからも、オープンソースであり続けます。オープンソースとは、簡単に言うと<b>ソフトウェアのソースコード(プログラム)が公開されている</b>ことです。ソースコードの修正や再配布が可能であることを定義に含めることもあります。 Misskeyのすべてのソースコードは[AGPL](https://github.com/misskey-dev/misskey/blob/develop/LICENSE)というオープンソースライセンスの下に[公開](https://github.com/misskey-dev)されていて、誰でも自由に閲覧、使用、修正、改変、再配布をすることができます。 オープンソースは、自分で好きなように変えたり、有害な処理が含まれていないことを確認することができたり、誰でも開発に参加できるなどの、様々なメリットがあります。 上述の分散型を実現するためにも、オープンソースであるということは必要不可欠な要素です。 再び引き合いに出しますが、TwitterやFacebookなどの利益を得ているほとんどのサービスはオープンソースではありません。
+
+<div class="info">ℹ️ 技術的に言うと、MisskeyのソースコードはGitで管理されていて、リポジトリは<a href="https://github.com/misskey-dev" target="_blank">GitHub上でホスティングされています。</a></div>
+
+## 開発に参加する、プロジェクトを支援する
+Misskeyを気に入っていただけたら、ぜひプロジェクトを支援してください。プロジェクトに貢献するには、以下で紹介するようにいろいろな方法があります。方法によっては開発のスキルは不要なので、誰でも気軽に参加し貢献することができます。いつでもお待ちしています。
+
+### 機能を追加したり、バグを修正する
+ソフトウェアエンジニアのスキルをお持ちの方であれば、ソースコードを編集する形でプロジェクトに貢献することができます。 貢献についてのガイドは[こちら](https://github.com/misskey-dev/misskey/blob/develop/CONTRIBUTING.md)です。
+
+### 議論に参加する
+新しい機能、または既存の機能について意見を述べたり、不具合を報告したりすることでも貢献できます。 そのようなディスカッションは[GitHub](https://github.com/misskey-dev)上か、[フォーラム](https://forum.misskey.io/)等で行われます。
+
+### テキストを翻訳する
+Misskeyは様々な言語に対応しています(i18n -internationalizationの略- と呼ばれます)。元の言語は基本的に日本語ですが、有志によって他の言語へと翻訳されています。 その翻訳作業に加わっていただくことでもMisskeyに貢献できます。 Misskeyは[Crowdinというサービスを使用して翻訳の管理を行っています。](https://crowdin.com/project/misskey)
+
+### 感想を投稿する
+不具合報告等だけではなく、Misskeyの良い点、楽しい点といったポジティブな意見もぜひ共有してください。開発の励みになり、それは間接的ですがプロジェクトへの貢献です。
+
+### ミスキストを増やす
+ミスキストとは、Misskeyを使用する人のことです。 知り合いに紹介するなどしてMisskeyを広めていただければ、ミスキストが増え開発のモチベーションが上がります。
+
+### 寄付をする
+Misskeyはビジネスではなく、利用は無料であるため、収益は皆様からの寄付のみです。(インスタンスによっては広告収入を得ているような場合もありますが、それは運営者の収入であり直接開発者への収入にはなりません) 寄付をしていただければ、今後も開発を続けることが可能になり、プロジェクトへの貢献になります。 寄付は基本的には[Patreon](https://www.patreon.com/syuilo)で受け付けています。 一定額寄付していただけると、Misskeyの[情報ページ](/about-misskey)に名前を記載することができます。
+
+また、サーバーの運営者も、基本的には収益を得ていません。サーバーの運営にはコストがかかるので、運営者の支援をすることもご検討ください。 開発には直接関係しませんが、サーバーがあってこそのプロジェクトなので、運営が維持されるというのは開発と同じくらい重要なことです。
+
+## クレジット
+Misskeyの開発者や、Misskeyに寄付をしてくださった方の一覧は[こちら](/about-misskey)で見ることができます。
+
+## よくある質問
+### プロジェクトは何を目指していますか?
+強いて言うと、漠然的になりますが広く使われる汎用的なプラットフォームになることを目指しています。 Misskeyは他のプロジェクトとは違い、何らかの思想(例えば、反中央集権)やビジョンに基づいて開発が行われているわけではなく、その点ではフラットです。 それが逆に、特定の方向性に縛られないフレキシブルさを生み出すことに繋がっていると感じています。
+<!-- TODO: ここにロードマップへのリンク -->
+
+### 企業によって開発されていますか?
+いいえ。Misskeyの開発は個人で行われており、商業的でもないため、特定の企業の関りはありません。 開発メンバーも基本的にはボランティアです。 また、開発に対し企業のスポンサーがつくこともありますが、その場合でもやはり開発は個人のコミュニティが主体です。
+
+### 誰が運営していますか?
+Misskeyは分散型なため、各サーバーにそれぞれ異なった運営者がいます。従って、特定の個人や企業によって、Misskeyの全てが運営されているわけではありません。 また、開発チームが運営を行うわけでもないため、運営に関する連絡は、お使いのサーバーの運営者に行ってください。 サーバーの運営者は、[このページ](/about)で確認することができます。 あなたがサーバーを作成すれば、あなたが運営者になります。
+
+### どのサーバーを選べばいいですか?
+[サーバー一覧が公開されています。](https://join.misskey.page/ja-JP/instances) サーバーによってコミュニティのテーマ(特定のこと、ものが好き 等)が決められている場合があるので、自分に合ったテーマのサーバーがあれば、そこを選ぶと良いかもしれません。 他にも、サーバーの規模、ユーザー層、国および言語、運営者が信頼できるかどうか、などの観点があります。 なお、Misskey公式のサーバーというものはありません。自身で新しくサーバーを作成するという選択肢もあります。
+
+基本的にどのサーバーを選んだとしても、他の全てのサーバーのユーザーと繋がることができます。
+
+### サーバーを建てるにはどうしたらいいですか?
+Misskeyサーバーの作成に興味を持っていただきありがとうございます。 2021年現在、Misskeyのホスティングサービスは存在しないため、サーバーの作成にはある程度の知識が必要です。 サーバーの作成方法については[こちら](todo)をご覧ください。
+
+### どのような技術を使用していますか?
+Misskeyは開発が進むにつれ使用する技術も大きく変わってきました。開発当初はMySQL + PHP + jQueryといった構成でしたが、現在は以下のようになっています。
+- サーバーサイド: Node.js
+- データベース: PostgreSQL、Redis
+- UIフレームワーク: Vue.js
+- プログラミング言語: TypeScript
+
+また、MFMやAiScriptなどの、Misskeyから派生して独自の技術も開発しています。
+
+### Mastodonのフォークですか?
+いいえ。MisskeyはMastodonやその他のプロジェクトとは全く別のプロジェクトです。 開発に関しても、Misskeyの方が昔から開発されています。ただし、分散型になったのはMastodonの登場より後です。 同じAcitivityPubという分散のためのプロトコルを実装しているという点以外、両者に特に関りがあるわけでもありません。
+
+### iOS/Androidのアプリはありますか?
+公式にはそういったOSのネイティブアプリを開発していませんが、サードパーティ製のアプリがいくつかあります。 詳しくは[こちら](./apps)をご覧ください。
+
+ただ、サードパーティ製アプリはどうしても機能への対応が遅れてしまうため、とくに拘りがなければ公式のWebクライアントの利用をおすすめします。 なお、MisskeyのWebクライアントはPWAに対応しているので、ネイティブアプリのように動作させることも可能です。 詳しくは[こちら](todo)をご覧ください。
+
+### Misskeyのロゴ、アイコンはどこで入手できますか?
+(準備中)
+
+### 時折目にする猫耳の可愛い女の子は?
+Misskeyの守り神、藍ちゃんです。アイチャンカワイイヤッター!
+<div class="info">ℹ️ 藍ちゃんについては<a href="https://xn--931a.moe/" target="_blank">こちら</a>です。</div>
diff --git a/src/docs/pl-PL/general/report-issue.md b/src/docs/pl-PL/general/report-issue.md
new file mode 100644
index 0000000000..63527e32af
--- /dev/null
+++ b/src/docs/pl-PL/general/report-issue.md
@@ -0,0 +1,8 @@
+# 不具合の報告
+不具合と思われる状況に遭遇したときは、まず[トラブルシューティング](./troubleshooting)をご一読ください。 それでも問題が解決しないときは、以下の情報を含めて[フォーラム](https://forum.misskey.io/)に投稿してください。 投稿することで、解決策が見つかったり、不具合と判断されれば開発チームによって修正が行われます。
+
+## 含める情報
+- Misskeyのバージョン([情報ページ](/about)で確認できます)
+- お使いのブラウザの種類とバージョン
+- お使いのOSの種類とバージョン
+- 問題の再現手順
diff --git a/src/docs/pl-PL/general/troubleshooting.md b/src/docs/pl-PL/general/troubleshooting.md
new file mode 100644
index 0000000000..4a35091299
--- /dev/null
+++ b/src/docs/pl-PL/general/troubleshooting.md
@@ -0,0 +1,36 @@
+# トラブルシューティング
+<div class="info">ℹ️ <a href="./faq">よくある質問</a>も合わせてお役立てください。</div>
+
+問題が発生したときは、まずこちらをご確認ください。 該当する項目が無い、もしくは手順を試しても効果がない場合は、サーバーの管理者に連絡するか[不具合を報告](./report-issue)してください。
+
+## クライアントが起動しない
+ほとんどの場合、お使いのブラウザまたはOSのバージョンが古いことが原因です。 ブラウザおよびOSのバージョンを最新のものに更新してから、再度試してみてください。
+
+これは稀ですが、それでも起動しない場合は、キャッシュが原因の場合があります。ブラウザのキャッシュをクリアして、再度試してみてください。
+
+## ページが読み込めない
+クライアントが起動するもののページが読み込めないというエラーが出る場合は、ネットワークに問題がないか確認してください。また、サーバーがダウンしていないか確認してください。
+
+これは稀ですが、キャッシュが原因の場合があります。ブラウザのキャッシュをクリアして、再度試してみてください。
+
+まだ問題がある場合は、サーバーの問題と思われるのでサーバーの管理者に連絡してください。
+
+## クライアントの動作が遅い
+以下を試してみてください:
+
+- クライアント設定で「UIのアニメーションを減らす」を有効にする
+- クライアント設定で「モーダルにぼかし効果を使用」を無効にする
+- お使いのブラウザの設定でハードウェアアクセラレーションを有効にする
+- お使いのデバイスのスペックを上げる
+
+## 通知やアンテナ等の点滅が消えない
+点滅は、未読のコンテンツがあることを示しています。通常点滅が消えない場合は、コンテンツを遡ると未読なコンテンツが残っています。 すべて既読にしたと思われるのに、それでもなお点滅が続く場合(おそらく不具合と思われます)は設定から強制的にすべて既読扱いにすることができます。
+
+## Renoteができない
+フォロワー限定のノートはRenoteすることはできません。
+
+## UI上で特定の要素が表示されない
+広告ブロッカーを使用しているとそのような不具合が発生することがあります。Misskeyではオフにしてご利用ください。
+
+## UI上で未翻訳の部分がある
+ほとんどの場合、単に翻訳が間に合っていないだけで、不具合ではありません。翻訳が終わるまでお待ちください。 [翻訳に参加](./misskey)していただくことも可能です。
diff --git a/src/docs/pt-PT/admin/disable-timelines.md b/src/docs/pt-PT/admin/disable-timelines.md
new file mode 100644
index 0000000000..b081e35ab0
--- /dev/null
+++ b/src/docs/pt-PT/admin/disable-timelines.md
@@ -0,0 +1,8 @@
+# LTL/STL/GTLの無効化
+Misskeyでは、LTL/STL/GTLをそれぞれ無効化することができます。有効/無効を切り替えるには、インスタンスコントロールパネルで設定します。
+
+LTLやSTLは、そのインスタンス全員の投稿が見れるため、新規のユーザーにとってはユーザーを探す必要がなくなり、興味のあるユーザーを見つけやすいという利点があります。 しかし同時に、フォロー機能が活用されなくなったり、不適切な投稿が目につきやすくなったり、チャットのようになることで内輪感が生じて逆に新規ユーザーが参加しにくくなるといったデメリットも持ち合わせています。 サーバーによってメリット/デメリットどちらが優勢かは異なるので、オプションとして無効にできるようになっています。 もしデメリットの方が上回っていると感じたら、それらのタイムラインを無効化することも検討してください。
+
+<div class="warn">⚠️ 無効化を行うと、ユーザーが困惑し、短期的に見て利用者が減る可能性があります。そのため、無効化の際は影響を慎重に検討し、事前に説明してフォローを整える期間を一定程度設けることを推奨します。</div>
+
+なお、管理者/モデレーターは、これらのタイムラインの無効化状態は適用されず、引き続き利用することが可能です。
diff --git a/src/docs/pt-PT/admin/faq.md b/src/docs/pt-PT/admin/faq.md
new file mode 100644
index 0000000000..317b4e0655
--- /dev/null
+++ b/src/docs/pt-PT/admin/faq.md
@@ -0,0 +1,5 @@
+# よくある質問
+ここでは、サーバー管理者向けのよくある質問を掲載しています。
+
+## デフォルトテーマを設定したい
+現在、デフォルトテーマ設定機能は実装されていません。
diff --git a/src/docs/pt-PT/advanced/aiscript.md b/src/docs/pt-PT/advanced/aiscript.md
new file mode 100644
index 0000000000..604d17daa8
--- /dev/null
+++ b/src/docs/pt-PT/advanced/aiscript.md
@@ -0,0 +1,7 @@
+# AiScript
+AiScriptは、Misskeyで使用できるスクリプト言語です。
+
+<div class="info">ℹ️ AiScript実装はMisskeyとは別リポジトリで、<a href="https://github.com/syuilo/aiscript" target="_blank">オープンソースで公開されています。</a></div>
+
+## 使い方
+AiScriptの構文や組み込み関数などのドキュメントは、[こちら](https://github.com/syuilo/aiscript/tree/master/docs)で公開されています。
diff --git a/src/docs/pt-PT/advanced/api.md b/src/docs/pt-PT/advanced/api.md
new file mode 100644
index 0000000000..76019b6145
--- /dev/null
+++ b/src/docs/pt-PT/advanced/api.md
@@ -0,0 +1,58 @@
+# Misskey API
+
+MisskeyAPIを使ってMisskeyクライアント、Misskey連携Webサービス、Bot等(以下「アプリケーション」と呼びます)を開発できます。 ストリーミングAPIもあるので、リアルタイム性のあるアプリケーションを作ることも可能です。
+
+APIを使い始めるには、まずアクセストークンを取得する必要があります。 このドキュメントでは、アクセストークンを取得する手順を説明した後、基本的なAPIの使い方を説明します。
+
+## アクセストークンの取得
+基本的に、APIはリクエストにはアクセストークンが必要となります。 APIにリクエストするのが自分自身なのか、不特定の利用者に使ってもらうアプリケーションなのかによって取得手順は異なります。
+
+* 前者の場合: [「自分自身のアクセストークンを手動発行する」](#自分自身のアクセストークンを手動発行する)に進む
+* 後者の場合: [「アプリケーション利用者にアクセストークンの発行をリクエストする」](#アプリケーション利用者にアクセストークンの発行をリクエストする)に進む
+
+### 自分自身のアクセストークンを手動発行する
+「設定 > API」で、自分のアクセストークンを発行できます。
+
+[「APIの使い方」へ進む](#APIの使い方)
+
+### アプリケーション利用者にアクセストークンの発行をリクエストする
+アプリケーション利用者のアクセストークンを取得するには、以下の手順で発行をリクエストします。
+
+#### Step 1
+
+UUIDを生成する。以後これをセッションIDと呼びます。
+
+> このセッションIDは毎回生成し、使いまわさないようにしてください。
+
+#### Step 2
+
+`{_URL_}/miauth/{session}`をユーザーのブラウザで表示させる。`{session}`の部分は、セッションIDに置き換えてください。
+> 例: `{_URL_}/miauth/c1f6d42b-468b-4fd2-8274-e58abdedef6f`
+
+表示する際、URLにクエリパラメータとしていくつかのオプションを設定できます:
+* `name` ... アプリケーション名
+    * > 例: `MissDeck`
+* `icon` ... アプリケーションのアイコン画像URL
+    * > 例: `https://missdeck.example.com/icon.png`
+* `callback` ... 認証が終わった後にリダイレクトするURL
+    * > 例: `https://missdeck.example.com/callback`
+    * リダイレクト時には、`session`というクエリパラメータでセッションIDが付きます
+* `permission` ... アプリケーションが要求する権限
+    * > 例: `write:notes,write:following,read:drive`
+    * 要求する権限を`,`で区切って列挙します
+    * どのような権限があるかは[APIリファレンス](/api-doc)で確認できます
+
+#### Step 3
+ユーザーが発行を許可した後、`{_URL_}/api/miauth/{session}/check`にPOSTリクエストすると、レスポンスとしてアクセストークンを含むJSONが返ります。
+
+レスポンスに含まれるプロパティ:
+* `token` ... ユーザーのアクセストークン
+* `user` ... ユーザーの情報
+
+[「APIの使い方」へ進む](#APIの使い方)
+
+## APIの使い方
+**APIはすべてPOSTで、リクエスト/レスポンスともにJSON形式です。RESTではありません。** アクセストークンは、`i`というパラメータ名でリクエストに含めます。
+
+* [APIリファレンス](/api-doc)
+* [ストリーミングAPI](./stream)
diff --git a/src/docs/pt-PT/advanced/create-plugin.md b/src/docs/pt-PT/advanced/create-plugin.md
new file mode 100644
index 0000000000..0d2fa19178
--- /dev/null
+++ b/src/docs/pt-PT/advanced/create-plugin.md
@@ -0,0 +1,74 @@
+# プラグインの作成
+Misskey Webクライアントのプラグイン機能を使うと、クライアントを拡張し、様々な機能を追加できます。 ここではプラグインの作成にあたってのメタデータ定義や、AiScript APIリファレンスを掲載します。
+
+## メタデータ
+プラグインは、AiScriptのメタデータ埋め込み機能を使って、デフォルトとしてプラグインのメタデータを定義する必要があります。 メタデータは次のプロパティを含むオブジェクトです。
+
+### name
+プラグイン名
+
+### author
+プラグイン作者
+
+### version
+プラグインバージョン。数値を指定してください。
+
+### description
+プラグインの説明
+
+### permissions
+プラグインが要求する権限。MisskeyAPIにリクエストする際に用いられます。
+
+### config
+プラグインの設定情報を表すオブジェクト。 キーに設定名、値に以下のプロパティを含めます。
+
+#### type
+設定値の種類を表す文字列。以下から選択します。 string number boolean
+
+#### label
+ユーザーに表示する設定名
+
+#### description
+設定の説明
+
+#### default
+設定のデフォルト値
+
+## APIリファレンス
+AiScript標準で組み込まれているAPIは掲載しません。
+
+### Mk:dialog(title text type)
+ダイアログを表示します。typeには以下の値が設定できます。 info success warn error question 省略すると info になります。
+
+### Mk:confirm(title text type)
+確認ダイアログを表示します。typeには以下の値が設定できます。 info success warn error question 省略すると question になります。 ユーザーが"OK"を選択した場合は true を、"キャンセル"を選択した場合は false が返ります。
+
+### Mk:api(endpoint params)
+Misskey APIにリクエストします。第一引数にエンドポイント名、第二引数にパラメータオブジェクトを渡します。
+
+### Mk:save(key value)
+任意の値に任意の名前を付けて永続化します。永続化した値は、AiScriptコンテキストが終了しても残り、Mk:loadで読み取ることができます。
+
+### Mk:load(key)
+Mk:saveで永続化した指定の名前の値を読み取ります。
+
+### Plugin:register_post_form_action(title fn)
+投稿フォームにアクションを追加します。第一引数にアクション名、第二引数にアクションが選択された際のコールバック関数を渡します。 コールバック関数には、第一引数に投稿フォームオブジェクトが渡されます。
+
+### Plugin:register_note_action(title fn)
+ノートメニューに項目を追加します。第一引数に項目名、第二引数に項目が選択された際のコールバック関数を渡します。 コールバック関数には、第一引数に対象のノートオブジェクトが渡されます。
+
+### Plugin:register_user_action(title fn)
+ユーザーメニューに項目を追加します。第一引数に項目名、第二引数に項目が選択された際のコールバック関数を渡します。 コールバック関数には、第一引数に対象のユーザーオブジェクトが渡されます。
+
+### Plugin:register_note_view_interruptor(fn)
+UIに表示されるノート情報を書き換えます。 コールバック関数には、第一引数に対象のノートオブジェクトが渡されます。 コールバック関数の返り値でノートが書き換えられます。
+
+### Plugin:register_note_post_interruptor(fn)
+ノート投稿時にノート情報を書き換えます。 コールバック関数には、第一引数に対象のノートオブジェクトが渡されます。 コールバック関数の返り値でノートが書き換えられます。
+
+### Plugin:open_url(url)
+第一引数に渡されたURLをブラウザの新しいタブで開きます。
+
+### Plugin:config
+プラグインの設定が格納されるオブジェクト。プラグイン定義のconfigで設定したキーで値が入ります。
diff --git a/src/docs/pt-PT/advanced/develop-bot.md b/src/docs/pt-PT/advanced/develop-bot.md
new file mode 100644
index 0000000000..7f825e9bc4
--- /dev/null
+++ b/src/docs/pt-PT/advanced/develop-bot.md
@@ -0,0 +1,6 @@
+# Botの作成
+[Misskey API](./api)を利用してBotの開発が可能です。 また、いくつかのBot実装が公開されているため、ぜひ参考にしてください。
+
+- [syuilo/ai](https://github.com/syuilo/ai) ... Node.js上で動く、TypeScript製Bot実装
+
+Botを作成したときは、プロフィール設定からBotフラグをオンにしておくことを強くおすすめします。
diff --git a/src/docs/pt-PT/advanced/reversi-bot.md b/src/docs/pt-PT/advanced/reversi-bot.md
new file mode 100644
index 0000000000..7ab2a7212e
--- /dev/null
+++ b/src/docs/pt-PT/advanced/reversi-bot.md
@@ -0,0 +1,160 @@
+# MisskeyリバーシBotの開発
+Misskeyのリバーシ機能に対応したBotの開発方法をここに記します。
+
+1. `games/reversi`ストリームに以下のパラメータを付けて接続する:
+    * `i`: botアカウントのAPIキー
+
+2. 対局への招待が来たら、ストリームから`invited`イベントが流れてくる
+    * イベントの中身に、`parent`という名前で対局へ誘ってきたユーザーの情報が含まれている
+
+3. `games/reversi/match`へ、`user_id`として`parent`の`id`が含まれたリクエストを送信する
+
+4. 上手くいくとゲーム情報が返ってくるので、`games/reversi-game`ストリームへ、以下のパラメータを付けて接続する:
+    * `i`: botアカウントのAPIキー
+    * `game`: `game`の`id`
+
+5. この間、相手がゲームの設定を変更するとその都度`update-settings`イベントが流れてくるので、必要であれば何かしらの処理を行う
+
+6. 設定に満足したら、`{ type: 'accept' }`メッセージをストリームに送信する
+
+7. ゲームが開始すると、`started`イベントが流れてくる
+    * イベントの中身にはゲーム情報が含まれている
+
+8. 石を打つには、ストリームに`{ type: 'set', pos: <位置> }`を送信する(位置の計算方法は後述)
+
+9. 相手または自分が石を打つと、ストリームから`set`イベントが流れてくる
+    * `color`として石の色が含まれている
+    * `pos`として位置情報が含まれている
+
+## 位置の計算法
+8x8のマップを考える場合、各マスの位置(インデックスと呼びます)は次のようになっています:
+```
++--+--+--+--+--+--+--+--+
+| 0| 1| 2| 3| 4| 5| 6| 7|
++--+--+--+--+--+--+--+--+
+| 8| 9|10|11|12|13|14|15|
++--+--+--+--+--+--+--+--+
+|16|17|18|19|20|21|22|23|
+...
+```
+
+### X,Y座標 から インデックス に変換する
+```
+pos = x + (y * mapWidth)
+```
+`mapWidth`は、ゲーム情報の`map`から、次のようにして計算できます:
+```
+mapWidth = map[0].length
+```
+
+### インデックス から X,Y座標 に変換する
+```
+x = pos % mapWidth
+y = Math.floor(pos / mapWidth)
+```
+
+## マップ情報
+マップ情報は、ゲーム情報の`map`に入っています。 文字列の配列になっており、ひとつひとつの文字がマス情報を表しています。 それをもとにマップのデザインを知る事が出来ます:
+* `(スペース)` ... マス無し
+* `-` ... マス
+* `b` ... 初期配置される黒石
+* `w` ... 初期配置される白石
+
+例えば、4*4の次のような単純なマップがあるとします:
+```text
++---+---+---+---+
+|   |   |   |   |
++---+---+---+---+
+|   | ○ | ● |   |
++---+---+---+---+
+|   | ● | ○ |   |
++---+---+---+---+
+|   |   |   |   |
++---+---+---+---+
+```
+
+この場合、マップデータはこのようになります:
+```javascript
+['----', '-wb-', '-bw-', '----']
+```
+
+## ユーザーにフォームを提示して対話可能Botを作成する
+ユーザーとのコミュニケーションを行うため、ゲームの設定画面でユーザーにフォームを提示することができます。 例えば、Botの強さをユーザーが設定できるようにする、といったシナリオが考えられます。
+
+フォームを提示するには、`reversi-game`ストリームに次のメッセージを送信します:
+```javascript
+{
+  type: 'init-form',
+  body: [フォームコントロールの配列]
+}
+```
+
+フォームコントロールの配列については今から説明します。 フォームコントロールは、次のようなオブジェクトです:
+```javascript
+{
+  id: 'switch1',
+  type: 'switch',
+  label: 'Enable hoge',
+  value: false
+}
+```
+`id` ... コントロールのID。 `type` ... コントロールの種類。後述します。 `label` ... コントロールと一緒に表記するテキスト。 `value` ... コントロールのデフォルト値。
+
+### フォームの操作を受け取る
+ユーザーがフォームを操作すると、ストリームから`update-form`イベントが流れてきます。 イベントの中身には、コントロールのIDと、ユーザーが設定した値が含まれています。 例えば、上で示したスイッチをユーザーがオンにしたとすると、次のイベントが流れてきます:
+```javascript
+{
+  id: 'switch1',
+  value: true
+}
+```
+
+### フォームコントロールの種類
+#### スイッチ
+type: `switch` スイッチを表示します。何かの機能をオン/オフさせたい場合に有用です。
+
+##### プロパティ
+`label` ... スイッチに表記するテキスト。
+
+#### ラジオボタン
+type: `radio` ラジオボタンを表示します。選択肢を提示するのに有用です。例えば、Botの強さを設定させるなどです。
+
+##### プロパティ
+`items` ... ラジオボタンの選択肢。例:
+```javascript
+items: [{
+  label: 'å¼±',
+  value: 1
+}, {
+  label: '中',
+  value: 2
+}, {
+  label: 'å¼·',
+  value: 3
+}]
+```
+
+#### スライダー
+type: `slider` スライダーを表示します。
+
+##### プロパティ
+`min` ... スライダーの下限。 `max` ... スライダーの上限。 `step` ... 入力欄で刻むステップ値。
+
+#### テキストボックス
+type: `textbox` テキストボックスを表示します。ユーザーになにか入力させる一般的な用途に利用できます。
+
+## ユーザーにメッセージを表示する
+設定画面でユーザーと対話する、フォーム以外のもうひとつの方法がこれです。ユーザーになにかメッセージを表示することができます。 例えば、ユーザーがBotの対応していないモードやマップを選択したとき、警告を表示するなどです。 メッセージを表示するには、次のメッセージをストリームに送信します:
+```javascript
+{
+  type: 'message',
+  body: {
+    text: 'メッセージ内容',
+    type: 'メッセージの種類'
+  }
+}
+```
+メッセージの種類: `success`, `info`, `warning`, `error`。
+
+## 投了する
+投了をするには、<a href="./api/endpoints/games/reversi/games/surrender">このエンドポイント</a>にリクエストします。
diff --git a/src/docs/pt-PT/advanced/stream.md b/src/docs/pt-PT/advanced/stream.md
new file mode 100644
index 0000000000..0e5edd2b0c
--- /dev/null
+++ b/src/docs/pt-PT/advanced/stream.md
@@ -0,0 +1,350 @@
+# ストリーミングAPI
+
+ストリーミングAPIを使うと、リアルタイムで様々な情報(例えばタイムラインに新しい投稿が流れてきた、メッセージが届いた、フォローされた、など)を受け取ったり、様々な操作を行ったりすることができます。
+
+## ストリームに接続する
+
+ストリーミングAPIを利用するには、まずMisskeyサーバーに**websocket**接続する必要があります。
+
+以下のURLに、`i`というパラメータ名で認証情報を含めて、websocket接続してください。例:
+```
+%WS_URL%/streaming?i=xxxxxxxxxxxxxxx
+```
+
+認証情報は、自分のAPIキーや、アプリケーションからストリームに接続する際はユーザーのアクセストークンのことを指します。
+
+<div class="info">ℹ️ 認証情報の取得については、<a href="./api">こちらのドキュメント</a>をご確認ください。</div>
+
+---
+
+認証情報は省略することもできますが、その場合非ログインでの利用ということになり、受信できる情報や可能な操作は限られます。例:
+
+```
+%WS_URL%/streaming
+```
+
+---
+
+ストリームに接続すると、後述するAPI操作や、投稿の購読を行ったりすることができます。 しかしまだこの段階では、例えばタイムラインへの新しい投稿を受信したりすることはできません。 それを行うには、ストリーム上で、後述する**チャンネル**に接続する必要があります。
+
+**ストリームでのやり取りはすべてJSONです。**
+
+## チャンネル
+MisskeyのストリーミングAPIにはチャンネルという概念があります。これは、送受信する情報を分離するための仕組みです。 Misskeyのストリームに接続しただけでは、まだリアルタイムでタイムラインの投稿を受信したりはできません。 ストリーム上でチャンネルに接続することで、様々な情報を受け取ったり情報を送信したりすることができるようになります。
+
+ひとつのストリーム上で、同時に複数のチャンネルに接続することができます。
+
+### チャンネルに接続する
+チャンネルに接続するには、次のようなデータをJSONでストリームに送信します:
+
+```json
+{
+    type: 'connect',
+    body: {
+        channel: 'xxxxxxxx',
+        id: 'foobar',
+        params: {
+            ...
+        }
+    }
+}
+```
+
+ここで、
+* `channel`には接続したいチャンネル名を設定します。チャンネルの種類については後述します。
+* `id`にはそのチャンネルとやり取りするための任意のIDを設定します。ストリームでは様々なメッセージが流れるので、そのメッセージがどのチャンネルからのものなのか識別する必要があるからです。このIDは、UUIDや、乱数のようなもので構いません。
+* `params`はチャンネルに接続する際のパラメータです。チャンネルによって接続時に必要とされるパラメータは異なります。パラメータ不要のチャンネルに接続する際は、このプロパティは省略可能です。
+
+<div class="info">ℹ️ IDはチャンネルごとではなく「チャンネルの接続ごと」です。なぜなら、同じチャンネルに異なるパラメータで複数接続するケースもあるからです。</div>
+
+### チャンネルからのメッセージを受け取る
+例えばタイムラインのチャンネルなら、新しい投稿があった時にメッセージを発します。そのメッセージを受け取ることで、タイムラインに新しい投稿がされたことをリアルタイムで知ることができます。
+
+チャンネルがメッセージを発すると、次のようなデータがJSONでストリームに流れてきます:
+```json
+{
+    type: 'channel',
+    body: {
+        id: 'foobar',
+        type: 'something',
+        body: {
+            some: 'thing'
+        }
+    }
+}
+```
+
+ここで、
+* `id`には前述したそのチャンネルに接続する際に設定したIDが設定されています。これで、このメッセージがどのチャンネルからのものなのか知ることができます。
+* `type`にはメッセージの種類が設定されます。チャンネルによって、どのような種類のメッセージが流れてくるかは異なります。
+* `body`にはメッセージの内容が設定されます。チャンネルによって、どのような内容のメッセージが流れてくるかは異なります。
+
+### チャンネルに向けてメッセージを送信する
+チャンネルによっては、メッセージを受け取るだけでなく、こちらから何かメッセージを送信し、何らかの操作を行える場合があります。
+
+チャンネルにメッセージを送信するには、次のようなデータをJSONでストリームに送信します:
+```json
+{
+    type: 'channel',
+    body: {
+        id: 'foobar',
+        type: 'something',
+        body: {
+            some: 'thing'
+        }
+    }
+}
+```
+
+ここで、
+* `id`には前述したそのチャンネルに接続する際に設定したIDを設定します。これで、このメッセージがどのチャンネルに向けたものなのか識別させることができます。
+* `type`にはメッセージの種類を設定します。チャンネルによって、どのような種類のメッセージを受け付けるかは異なります。
+* `body`にはメッセージの内容を設定します。チャンネルによって、どのような内容のメッセージを受け付けるかは異なります。
+
+### チャンネルから切断する
+チャンネルから切断するには、次のようなデータをJSONでストリームに送信します:
+
+```json
+{
+    type: 'disconnect',
+    body: {
+        id: 'foobar'
+    }
+}
+```
+
+ここで、
+* `id`には前述したそのチャンネルに接続する際に設定したIDを設定します。
+
+## ストリームを経由してAPIリクエストする
+
+ストリームを経由してAPIリクエストすると、HTTPリクエストを発生させずにAPIを利用できます。そのため、コードを簡潔にできたり、パフォーマンスの向上を見込めるかもしれません。
+
+ストリームを経由してAPIリクエストするには、次のようなデータをJSONでストリームに送信します:
+```json
+{
+    type: 'api',
+    body: {
+        id: 'xxxxxxxxxxxxxxxx',
+        endpoint: 'notes/create',
+        data: {
+            text: 'yee haw!'
+        }
+    }
+}
+```
+
+ここで、
+* `id`には、APIのレスポンスを識別するための、APIリクエストごとの一意なIDを設定する必要があります。UUIDや、簡単な乱数のようなもので構いません。
+* `endpoint`には、あなたがリクエストしたいAPIのエンドポイントを指定します。
+* `data`には、エンドポイントのパラメータを含めます。
+
+<div class="info">ℹ️ APIのエンドポイントやパラメータについてはAPIリファレンスをご確認ください。</div>
+
+### レスポンスの受信
+
+APIへリクエストすると、レスポンスがストリームから次のような形式で流れてきます。
+
+```json
+{
+    type: 'api:xxxxxxxxxxxxxxxx',
+    body: {
+        ...
+    }
+}
+```
+
+ここで、
+* `xxxxxxxxxxxxxxxx`の部分には、リクエストの際に設定された`id`が含まれています。これにより、どのリクエストに対するレスポンスなのか判別することができます。
+* `body`には、レスポンスが含まれています。
+
+## 投稿のキャプチャ
+
+Misskeyは投稿のキャプチャと呼ばれる仕組みを提供しています。これは、指定した投稿のイベントをストリームで受け取る機能です。
+
+例えばタイムラインを取得してユーザーに表示したとします。ここで誰かがそのタイムラインに含まれるどれかの投稿に対してリアクションしたとします。
+
+しかし、クライアントからするとある投稿にリアクションが付いたことなどは知る由がないため、リアルタイムでリアクションをタイムライン上の投稿に反映して表示するといったことができません。
+
+この問題を解決するために、Misskeyは投稿のキャプチャ機構を用意しています。投稿をキャプチャすると、その投稿に関するイベントを受け取ることができるため、リアルタイムでリアクションを反映させたりすることが可能になります。
+
+### 投稿をキャプチャする
+
+投稿をキャプチャするには、ストリームに次のようなメッセージを送信します:
+
+```json
+{
+    type: 'subNote',
+    body: {
+        id: 'xxxxxxxxxxxxxxxx'
+    }
+}
+```
+
+ここで、
+* `id`にキャプチャしたい投稿の`id`を設定します。
+
+このメッセージを送信すると、Misskeyにキャプチャを要請したことになり、以後、その投稿に関するイベントが流れてくるようになります。
+
+例えば投稿にリアクションが付いたとすると、次のようなメッセージが流れてきます:
+
+```json
+{
+    type: 'noteUpdated',
+    body: {
+        id: 'xxxxxxxxxxxxxxxx',
+        type: 'reacted',
+        body: {
+            reaction: 'like',
+            userId: 'yyyyyyyyyyyyyyyy'
+        }
+    }
+}
+```
+
+ここで、
+* `body`内の`id`に、イベントを発生させた投稿のIDが設定されます。
+* `body`内の`type`に、イベントの種類が設定されます。
+* `body`内の`body`に、イベントの詳細が設定されます。
+
+#### イベントの種類
+
+##### `reacted`
+その投稿にリアクションがされた時に発生します。
+
+* `reaction`に、リアクションの種類が設定されます。
+* `userId`に、リアクションを行ったユーザーのIDが設定されます。
+
+例:
+```json
+{
+    type: 'noteUpdated',
+    body: {
+        id: 'xxxxxxxxxxxxxxxx',
+        type: 'reacted',
+        body: {
+            reaction: 'like',
+            userId: 'yyyyyyyyyyyyyyyy'
+        }
+    }
+}
+```
+
+##### `deleted`
+その投稿が削除された時に発生します。
+
+* `deletedAt`に、削除日時が設定されます。
+
+例:
+```json
+{
+    type: 'noteUpdated',
+    body: {
+        id: 'xxxxxxxxxxxxxxxx',
+        type: 'deleted',
+        body: {
+            deletedAt: '2018-10-22T02:17:09.703Z'
+        }
+    }
+}
+```
+
+##### `pollVoted`
+その投稿に添付されたアンケートに投票された時に発生します。
+
+* `choice`に、選択肢IDが設定されます。
+* `userId`に、投票を行ったユーザーのIDが設定されます。
+
+例:
+```json
+{
+    type: 'noteUpdated',
+    body: {
+        id: 'xxxxxxxxxxxxxxxx',
+        type: 'pollVoted',
+        body: {
+            choice: 2,
+            userId: 'yyyyyyyyyyyyyyyy'
+        }
+    }
+}
+```
+
+### 投稿のキャプチャを解除する
+
+その投稿がもう画面に表示されなくなったりして、その投稿に関するイベントをもう受け取る必要がなくなったときは、キャプチャの解除を申請してください。
+
+次のメッセージを送信します:
+
+```json
+{
+    type: 'unsubNote',
+    body: {
+        id: 'xxxxxxxxxxxxxxxx'
+    }
+}
+```
+
+ここで、
+* `id`にキャプチャを解除したい投稿の`id`を設定します。
+
+このメッセージを送信すると、以後、その投稿に関するイベントは流れてこないようになります。
+
+# チャンネル一覧
+## `main`
+アカウントに関する基本的な情報が流れてきます。このチャンネルにパラメータはありません。
+
+### 流れてくるイベント一覧
+
+#### `renote`
+自分の投稿がRenoteされた時に発生するイベントです。自分自身の投稿をRenoteしたときは発生しません。
+
+#### `mention`
+誰かからメンションされたときに発生するイベントです。
+
+#### `readAllNotifications`
+自分宛ての通知がすべて既読になったことを表すイベントです。このイベントを利用して、「通知があることを示すアイコン」のようなものをオフにしたりする等のケースが想定されます。
+
+#### `meUpdated`
+自分の情報が更新されたことを表すイベントです。
+
+#### `follow`
+自分が誰かをフォローしたときに発生するイベントです。
+
+#### `unfollow`
+自分が誰かのフォローを解除したときに発生するイベントです。
+
+#### `followed`
+自分が誰かにフォローされたときに発生するイベントです。
+
+## `homeTimeline`
+ホームタイムラインの投稿情報が流れてきます。このチャンネルにパラメータはありません。
+
+### 流れてくるイベント一覧
+
+#### `note`
+タイムラインに新しい投稿が流れてきたときに発生するイベントです。
+
+## `localTimeline`
+ローカルタイムラインの投稿情報が流れてきます。このチャンネルにパラメータはありません。
+
+### 流れてくるイベント一覧
+
+#### `note`
+ローカルタイムラインに新しい投稿が流れてきたときに発生するイベントです。
+
+## `hybridTimeline`
+ソーシャルタイムラインの投稿情報が流れてきます。このチャンネルにパラメータはありません。
+
+### 流れてくるイベント一覧
+
+#### `note`
+ソーシャルタイムラインに新しい投稿が流れてきたときに発生するイベントです。
+
+## `globalTimeline`
+グローバルタイムラインの投稿情報が流れてきます。このチャンネルにパラメータはありません。
+
+### 流れてくるイベント一覧
+
+#### `note`
+グローバルタイムラインに新しい投稿が流れてきたときに発生するイベントです。
diff --git a/src/docs/pt-PT/features/antenna.md b/src/docs/pt-PT/features/antenna.md
new file mode 100644
index 0000000000..94ad9e4aea
--- /dev/null
+++ b/src/docs/pt-PT/features/antenna.md
@@ -0,0 +1,4 @@
+# アンテナ
+アンテナは、自由に条件を設定して、合致するノートを自動で収集することができる機能です。
+
+条件を設定したアンテナが作成された状態で、条件に合致するノートが投稿されると、リアルタイムでそのアンテナのタイムラインにノートが追加されます。
diff --git a/src/docs/pt-PT/features/custom-emoji.md b/src/docs/pt-PT/features/custom-emoji.md
new file mode 100644
index 0000000000..ed2e92be16
--- /dev/null
+++ b/src/docs/pt-PT/features/custom-emoji.md
@@ -0,0 +1,2 @@
+# カスタム絵文字
+カスタム絵文字は、インスタンスで用意された画像を絵文字のように使える機能です。 ノート、リアクション、チャット、自己紹介、名前などの場所で使うことができます。 カスタム絵文字をそれらの場所で使うには、絵文字ピッカーボタン(ある場合)を押すか、`:`を入力して絵文字サジェストを表示します。 テキスト内に`:foo:`のような形式の文字列が見つかると、`foo`の部分がカスタム絵文字名と解釈され、表示時には対応したカスタム絵文字に置き換わります。
diff --git a/src/docs/pt-PT/features/deck.md b/src/docs/pt-PT/features/deck.md
new file mode 100644
index 0000000000..8057e262fd
--- /dev/null
+++ b/src/docs/pt-PT/features/deck.md
@@ -0,0 +1,18 @@
+# デッキ
+
+デッキは利用可能なUIのひとつです。「カラム」と呼ばれるビューを複数並べて表示させることで、カスタマイズ性が高く、情報量の多いUIが構築できることが特徴です。
+
+## カラムの追加
+デッキの背景を右クリックし、「カラムを追加」して任意のカラムを追加できます。
+
+## カラムの移動
+カラムは、ドラッグアンドドロップで他のカラムと位置を入れ替えることが出来るほか、カラムメニュー(カラムのヘッダー右クリック)から位置を移動させることもできます。
+
+## カラムの水平分割
+カラムは左右だけでなく、上下に並べることもできます。 カラムメニューを開き、「左に重ねる」を選択すると、左のカラムの下に現在のカラムが移動します。 上下分割を解除するには、カラムメニューの「右に出す」を選択します。
+
+## カラムの設定
+カラムメニューの「編集」を選択するとカラムの設定を編集できます。カラムの名前を変えたり、幅を変えたりできます。
+
+## デッキの設定
+デッキに関する設定は、[settings/deck](/settings/deck)で行えます。
diff --git a/src/docs/pt-PT/features/drive.md b/src/docs/pt-PT/features/drive.md
new file mode 100644
index 0000000000..b82a41082a
--- /dev/null
+++ b/src/docs/pt-PT/features/drive.md
@@ -0,0 +1,17 @@
+# ドライブ
+ドライブは、Misskey上でファイルを管理できる機能です。
+
+[ドライブのページ](/my/drive)から任意のファイルをアップロードできるほか、アバターに設定した画像や、ノートに添付したファイルなどもすべてドライブにアップロードされます。
+
+<div class="warn">⚠️ ドライブからファイルを削除すると、そのファイルが添付されたノートも消えます。</div>
+
+ドライブにアップロードされたファイルは、いつでもダウンロードすることができるほか、ノート作成時に「ドライブからファイルを添付」することでファイルを再利用することもできます。
+
+ドライブ内にフォルダを作り、複数のファイルをまとめて整理することもできます。
+
+## 閲覧注意 (NSFW)
+<div class="info">ℹ️ この項目が閲覧注意なわけではありません</div>
+
+閲覧注意またはNSFW (Not safe for work) は、ドライブのファイルに設定することができるフラグです。 閲覧注意フラグを設定されたファイルは、表示される際に閲覧者の操作なしには表示されなくなります。 このフラグは、例えば職場や公共の場で閲覧するのに適切でないと思われる画像などに設定し、そのような画像が突然表示されてしまうことを防ぐ目的で使われます。
+
+このフラグは手動でオンオフを切り替えられるほか、モデレーターの判断で設定される場合もあります。
diff --git a/src/docs/pt-PT/features/favorite.md b/src/docs/pt-PT/features/favorite.md
new file mode 100644
index 0000000000..a194f53e04
--- /dev/null
+++ b/src/docs/pt-PT/features/favorite.md
@@ -0,0 +1,4 @@
+# Favoritar
+[ノート](./node)をお気に入りとして登録できる機能です。 お気に入り登録したノートは、[お気に入りページ](./my/favorites)で一覧することができます。 お気に入りに登録したことは相手に通知されず、お気に入りは自分しか見ることができません。
+
+ノートをお気に入り登録するには、ノートメニューの「お気に入り」を押します。お気に入り解除するには、ノートメニューの「お気に入り解除」を押します。
diff --git a/src/docs/pt-PT/features/follow.md b/src/docs/pt-PT/features/follow.md
new file mode 100644
index 0000000000..3c1ea7bbe0
--- /dev/null
+++ b/src/docs/pt-PT/features/follow.md
@@ -0,0 +1,2 @@
+# フォロー
+ユーザーをフォローすると、タイムラインにそのユーザーの投稿が表示されるようになります。ただし、他のユーザーに対する返信は含まれません。 ユーザーをフォローするには、ユーザーページの「フォロー」ボタンをクリックします。フォローを解除するには、もう一度クリックします。
diff --git a/src/docs/pt-PT/features/keyboard-shortcut.md b/src/docs/pt-PT/features/keyboard-shortcut.md
new file mode 100644
index 0000000000..79a9dbcebd
--- /dev/null
+++ b/src/docs/pt-PT/features/keyboard-shortcut.md
@@ -0,0 +1,66 @@
+# キーボードショートカット
+
+## グローバル
+これらのショートカットは基本的にどこでも使えます。
+<table>
+    <thead>
+        <tr><th>ショートカット</th><th>効果</th><th>由来</th></tr>
+    </thead>
+    <tbody>
+        <tr><td><kbd class="key">P</kbd>, <kbd class="key">N</kbd></td><td>新規投稿</td><td><b>P</b>ost, <b>N</b>ew, <b>N</b>ote</td></tr>
+        <tr><td><kbd class="key">T</kbd></td><td>タイムラインの最も新しい投稿にフォーカス</td><td><b>T</b>imeline, <b>T</b>op</td></tr>
+        <tr><td><kbd class="group"><kbd class="key">Shift</kbd> + <kbd class="key">N</kbd></kbd></td><td>通知を表示/隠す</td><td><b>N</b>otifications</td></tr>
+        <tr><td><kbd class="key">S</kbd></td><td>Pesquisar</td><td><b>S</b>earch</td></tr>
+        <tr><td><kbd class="key">H</kbd>, <kbd class="key">?</kbd></td><td>ヘルプを表示</td><td><b>H</b>elp</td></tr>
+    </tbody>
+</table>
+
+## 投稿にフォーカスされた状態
+<table>
+    <thead>
+        <tr><th>ショートカット</th><th>効果</th><th>由来</th></tr>
+    </thead>
+    <tbody>
+        <tr><td><kbd class="key">↑</kbd>, <kbd class="key">K</kbd>, <kbd class="group"><kbd class="key">Shift</kbd> + <kbd class="key">Tab</kbd></kbd></td><td>上の投稿にフォーカスを移動</td><td>-</td></tr>
+        <tr><td><kbd class="key">↓</kbd>, <kbd class="key">J</kbd>, <kbd class="key">Tab</kbd></td><td>下の投稿にフォーカスを移動</td><td>-</td></tr>
+        <tr><td><kbd class="key">R</kbd></td><td>返信フォームを開く</td><td><b>R</b>eply</td></tr>
+        <tr><td><kbd class="key">Q</kbd></td><td>Renoteフォームを開く</td><td><b>Q</b>uote</td></tr>
+        <tr><td><kbd class="group"><kbd class="key">Ctrl</kbd> + <kbd class="key">Q</kbd></kbd></td><td>即刻Renoteする(フォームを開かずに)</td><td>-</td></tr>
+        <tr><td><kbd class="key">E</kbd>, <kbd class="key">A</kbd>, <kbd class="key">+</kbd></td><td>リアクションフォームを開く</td><td><b>E</b>mote, re<b>A</b>ction</td></tr>
+        <tr><td><kbd class="key">0</kbd>~<kbd class="key">9</kbd></td><td>数字に対応したリアクションをする(対応については後述)</td><td>-</td></tr>
+        <tr><td><kbd class="key">F</kbd>, <kbd class="key">B</kbd></td><td>お気に入りに登録</td><td><b>F</b>avorite, <b>B</b>ookmark</td></tr>
+        <tr><td><kbd class="key">Del</kbd>, <kbd class="group"><kbd class="key">Ctrl</kbd> + <kbd class="key">D</kbd></kbd></td><td>投稿を削除</td><td><b>D</b>elete</tr>
+        <tr><td><kbd class="key">M</kbd>, <kbd class="key">O</kbd></td><td>投稿に対するメニューを開く</td><td><b>M</b>ore, <b>O</b>ther</td></tr>
+        <tr><td><kbd class="key">S</kbd></td><td>CWで隠された部分を表示 or 隠す</td><td><b>S</b>how, <b>S</b>ee</td></tr>
+        <tr><td><kbd class="key">Esc</kbd></td><td>フォーカスを外す</td><td>-</td></tr>
+    </tbody>
+</table>
+
+## Renoteフォーム
+<table>
+    <thead>
+        <tr><th>ショートカット</th><th>効果</th><th>由来</th></tr>
+    </thead>
+    <tbody>
+        <tr><td><kbd class="key">Enter</kbd></td><td>Renoteする</td><td>-</td></tr>
+        <tr><td><kbd class="key">Q</kbd></td><td>フォームを展開する</td><td><b>Q</b>uote</td></tr>
+        <tr><td><kbd class="key">Esc</kbd></td><td>フォームを閉じる</td><td>-</td></tr>
+    </tbody>
+</table>
+
+## リアクションフォーム
+デフォルトで「👍」にフォーカスが当たっている状態です。
+<table>
+    <thead>
+        <tr><th>ショートカット</th><th>効果</th><th>由来</th></tr>
+    </thead>
+    <tbody>
+        <tr><td><kbd class="key">↑</kbd>, <kbd class="key">K</kbd></td><td>上のリアクションにフォーカスを移動</td><td>-</td></tr>
+        <tr><td><kbd class="key">↓</kbd>, <kbd class="key">J</kbd></td><td>下のリアクションにフォーカスを移動</td><td>-</td></tr>
+        <tr><td><kbd class="key">←</kbd>, <kbd class="key">H</kbd>, <kbd class="group"><kbd class="key">Shift</kbd> + <kbd class="key">Tab</kbd></kbd></td><td>左のリアクションにフォーカスを移動</td><td>-</td></tr>
+        <tr><td><kbd class="key">→</kbd>, <kbd class="key">L</kbd>, <kbd class="key">Tab</kbd></td><td>右のリアクションにフォーカスを移動</td><td>-</td></tr>
+        <tr><td><kbd class="key">Enter</kbd>, <kbd class="key">Space</kbd>, <kbd class="key">+</kbd></td><td>リアクション確定</td><td>-</td></tr>
+        <tr><td><kbd class="key">0</kbd>~<kbd class="key">9</kbd></td><td>数字に対応したリアクションで確定</td><td>-</td></tr>
+        <tr><td><kbd class="key">Esc</kbd></td><td>リアクションするのをやめる</td><td>-</td></tr>
+    </tbody>
+</table>
diff --git a/src/docs/pt-PT/features/mfm.md b/src/docs/pt-PT/features/mfm.md
new file mode 100644
index 0000000000..5be2df4f30
--- /dev/null
+++ b/src/docs/pt-PT/features/mfm.md
@@ -0,0 +1,12 @@
+# MFM
+MFMは、Misskey Flavored Markdownの略で、Misskeyの様々な場所で使用できる専用のマークアップ言語です。 MFMで使用可能な構文は[MFMチートシート](/mfm-cheat-sheet)で確認できます。
+
+## MFMが使用可能な場所の例
+- ノート本文
+- CW注釈
+- ユーザーの名前
+- ユーザーの自己紹介
+
+## 開発者向け情報
+MFMのパーサー実装はライブラリとして公開されており、簡単にクライアントにMFMを組み込むことが可能です。
+- [misskey-dev/mfm.js](https://github.com/misskey-dev/mfm.js) - JavaScriptパーサー実装
diff --git a/src/docs/pt-PT/features/mute.md b/src/docs/pt-PT/features/mute.md
new file mode 100644
index 0000000000..331e5cc10a
--- /dev/null
+++ b/src/docs/pt-PT/features/mute.md
@@ -0,0 +1,13 @@
+# Silenciar
+
+ユーザーをミュートすると、そのユーザーに関する次のコンテンツがMisskeyに表示されなくなります:
+
+* タイムラインや投稿の検索結果内の、そのユーザーの投稿(およびそれらの投稿に対する返信やRenote)
+* そのユーザーからの通知
+* メッセージ履歴一覧内の、そのユーザーとのメッセージ履歴
+
+ユーザーをミュートするには、対象のユーザーのユーザーページに表示されている「ミュート」ボタンを押します。
+
+ミュートを行ったことは相手に通知されず、ミュートされていることを知ることもできません。
+
+設定>ミュート から、自分がミュートしているユーザー一覧を確認することができます。
diff --git a/src/docs/pt-PT/features/note.md b/src/docs/pt-PT/features/note.md
new file mode 100644
index 0000000000..7ae3b5551f
--- /dev/null
+++ b/src/docs/pt-PT/features/note.md
@@ -0,0 +1,51 @@
+# Posts
+ノートは、Misskeyに投稿される、文章、ファイル、アンケートなどを含むコンテンツで、Misskeyの中心的概念です。また、そのノートを作成する行為自体もノートと呼ばれます。
+
+ノートが作成されると、[タイムライン](./timeline)に追加され、自分の[フォロワー](./follow)やサーバーのユーザーが見れるようになります。
+
+ノートには、[リアクション](./reaction)を行うことができます。また、返信や引用もできます。
+
+ノートを[お気に入り](./favorite)登録することで、後で簡単に見返すことができます。
+
+## ノートを作成する
+ノートを作成するには、画面上にある鉛筆マークのボタンを押して、作成フォームを開きます。作成フォームに内容を入力し、「ノート」ボタンを押すことでノートが作成されます。 ノートには、画像、動画など任意のファイルや、[アンケート](./poll)を添付することができます。また、本文中には[MFM](./mfm)が使用でき、[メンション](./mention)や[ハッシュタグ](./hashtag)を含めることもできます。 他にも、CWや公開範囲といった設定も行えます(詳細は後述)。
+<div class="info">ℹ️ コンピューターのクリップボードに画像データがある状態で、フォーム内のテキストボックスにペーストするとその画像を添付することができます。</div>
+<div class="info">ℹ️ テキストボックス内で<kbd class="key">Ctrl + Enter</kbd>を押すことでも投稿できます。</div>
+
+## Repostar
+既にあるノートを引用、もしくはそのノートを新しいノートとして共有する行為、またそれによって作成されたノートをRenoteと呼びます。 自分がフォローしているユーザーの、気に入ったノートを自分のフォロワーに共有したい場合や、過去の自分のノートを再度共有したい場合に使います。 同じノートに対して無制限にRenoteを行うことができますが、あまり連続して使用すると迷惑になる場合もあるので、注意しましょう。
+<div class="warn">⚠️ 公開範囲がフォロワーやダイレクトのノートはRenoteできません</div>
+
+Renoteを削除するには、Renoteの時刻表示の隣にある「...」を押し、「Renote解除」を選択します。
+
+## CW
+Contents Warningの略で、ノートの内容を、閲覧者の操作なしには表示しないようにできる機能です。主に長大な内容を隠すためや、ネタバレ防止などに使うことができます。 設定するには、フォームの「内容を隠す」ボタン(目のアイコン)を押します。すると新しい入力エリアが表れるので、そこに内容の要約を記入します。
+
+## 公開範囲
+ノートごとに、そのノートが公開される範囲を設定することができます。フォームの「ノート」ボタンの左にあるアイコンを押すと公開範囲を以下から選択できます。
+
+### パブリック
+全ての人に対してノートが公開されるほか、サーバーの全てのタイムライン(ホームタイムライン、ローカルタイムライン、ソーシャルタイムライン、グローバルタイムライン)にノートが流れます。
+<div class="warn">⚠️ アカウントが<a href="./silence">サイレンス</a>状態の時は、この公開範囲は使用できません。</div>
+
+### ホーム
+全ての人に対してノートが公開されますが、フォロワー以外のローカルタイムライン、ソーシャルタイムライン、グローバルタイムラインにはノートは流れません。
+
+### フォロワー
+自分のフォロワーに対してのみノートを公開します。フォロワーの全てのタイムラインに流れます。
+
+### ダイレクト
+指定したユーザーに対してのみノートを公開します。指定したユーザーの全てのタイムラインに流れます。
+
+### 「ローカルのみ」オプション
+このオプションを有効にすると、リモートにノートを連合しなくなります。
+
+### 公開範囲の比較
+<table>
+    <tr><th></th><th>パブリック</th><th>ホーム</th><th>フォロワー</th><th>ダイレクト</th></tr>
+    <tr><th>フォロワーのLTL/STL/GTL</th><td>✔</td><td>✔</td><td>✔</td><td></td></tr>
+    <tr><th>非フォロワーのLTL/STL/GTL</th><td>✔</td><td></td><td></td><td></td></tr>
+</table>
+
+## ピン留め
+ノートをピン留めすると、ユーザーページに常にそのノートを表示しておくことができます。 ノートのメニューを開き、「ピン留め」を選択してピン留めできます。 複数のノートをピン留めできます。
diff --git a/src/docs/pt-PT/features/pages.md b/src/docs/pt-PT/features/pages.md
new file mode 100644
index 0000000000..a7311b95e6
--- /dev/null
+++ b/src/docs/pt-PT/features/pages.md
@@ -0,0 +1,10 @@
+# Pages
+
+## 変数
+変数を使うことで動的なページを作成できます。テキスト内で <b>{ 変数名 }</b> と書くとそこに変数の値を埋め込めます。例えば <b>Hello { thing } world!</b> というテキストで、変数(thing)の値が <b>ai</b> だった場合、テキストは <b>Hello ai world!</b> になります。
+
+変数の評価(値を算出すること)は上から下に行われるので、ある変数の中で自分より下の変数を参照することはできません。例えば上から <b>A、B、C</b> と3つの変数を定義したとき、<b>C</b>の中で<b>A</b>や<b>B</b>を参照することはできますが、<b>A</b>の中で<b>B</b>や<b>C</b>を参照することはできません。
+
+ユーザーからの入力を受け取るには、ページに「ユーザー入力」ブロックを設置し、「変数名」に入力を格納したい変数名を設定します(変数は自動で作成されます)。その変数を使ってユーザー入力に応じた動作を行えます。
+
+関数を使うと、値の算出処理を再利用可能な形にまとめることができます。関数を作るには、「関数」タイプの変数を作成します。関数にはスロット(引数)を設定することができ、スロットの値は関数内で変数として利用可能です。また、関数を引数に取る関数(高階関数と呼ばれます)も存在します。関数は予め定義しておくほかに、このような高階関数のスロットに即席でセットすることもできます。
diff --git a/src/docs/pt-PT/features/reaction.md b/src/docs/pt-PT/features/reaction.md
new file mode 100644
index 0000000000..4d479fd416
--- /dev/null
+++ b/src/docs/pt-PT/features/reaction.md
@@ -0,0 +1,11 @@
+# リアクション
+他の人のノートに、絵文字を付けて簡単にあなたの反応を伝えられる機能です。 リアクションするには、ノートの + アイコンをクリックしてピッカーを表示し、絵文字を選択します。 リアクションには[カスタム絵文字](./custom-emoji)も使用できます。
+
+## リアクションピッカーのカスタマイズ
+ピッカーに表示される絵文字を自分好みにカスタマイズすることができます。 設定の「リアクション」で設定します。
+
+## リモート投稿へのリアクションについて
+リアクションはMisskeyオリジナルの機能であるため、リモートインスタンスがMisskeyでない限りは、ほとんどの場合「Like」としてアクティビティが送信されます。一般的にはLikeは「お気に入り」として実装されているようです。
+
+## リモートからのリアクションについて
+リモートから「Like」アクティビティを受信したとき、Misskeyでは「👍」のリアクションとして解釈されます。
diff --git a/src/docs/pt-PT/features/silence.md b/src/docs/pt-PT/features/silence.md
new file mode 100644
index 0000000000..7e26feab0d
--- /dev/null
+++ b/src/docs/pt-PT/features/silence.md
@@ -0,0 +1,6 @@
+# サイレンス
+サイレンスは、アカウントに設定される状態のひとつです。
+
+アカウントがサイレンス状態になると、ノートの公開範囲をパブリックにできなくなります。 ホーム、フォロワー、ダイレクトは選択可能なため、サイレンスを受けた場合でもフォロワーやあなたのユーザーページを直接訪れた場合は投稿を閲覧できますが、GTL(連合タイムライン)やLTL(ローカルタイムライン)には投稿が流れません。
+
+アカウントのサイレンス状態は、サーバーのモデレーターによって有効化/無効化されます。
diff --git a/src/docs/pt-PT/features/theme.md b/src/docs/pt-PT/features/theme.md
new file mode 100644
index 0000000000..a406f3433c
--- /dev/null
+++ b/src/docs/pt-PT/features/theme.md
@@ -0,0 +1,68 @@
+# テーマ
+
+テーマを設定して、Misskeyクライアントの見た目を変更できます。
+
+## テーマの設定
+設定 > テーマ
+
+## テーマを作成する
+テーマコードはJSON5で記述されたテーマオブジェクトです。 テーマは以下のようなオブジェクトです。
+``` js
+{
+    id: '17587283-dd92-4a2c-a22c-be0637c9e22a',
+
+    name: 'Danboard',
+    author: 'syuilo',
+
+    base: 'light',
+
+    props: {
+        accent: 'rgb(218, 141, 49)',
+        bg: 'rgb(218, 212, 190)',
+        fg: 'rgb(115, 108, 92)',
+        panel: 'rgb(236, 232, 220)',
+        renote: 'rgb(100, 152, 106)',
+        link: 'rgb(100, 152, 106)',
+        mention: '@accent',
+        hashtag: 'rgb(100, 152, 106)',
+        header: 'rgba(239, 227, 213, 0.75)',
+        navBg: 'rgb(216, 206, 182)',
+        inputBorder: 'rgba(0, 0, 0, 0.1)',
+    },
+}
+
+```
+
+* `id` ... テーマの一意なID。UUIDをおすすめします。
+* `name` ... テーマ名
+* `author` ... テーマの作者
+* `desc` ... テーマの説明(オプション)
+* `base` ... 明るいテーマか、暗いテーマか
+    * `light`にすると明るいテーマになり、`dark`にすると暗いテーマになります。
+    * テーマはここで設定されたベーステーマを継承します。
+* `props` ... テーマのスタイル定義。これから説明します。
+
+### テーマのスタイル定義
+`props`下にはテーマのスタイルを定義します。 キーがCSSの変数名になり、バリューで中身を指定します。 なお、この`props`オブジェクトはベーステーマから継承されます。 ベーステーマは、このテーマの`base`が`light`なら[_light.json5](https://github.com/misskey-dev/misskey/blob/develop/src/client/themes/_light.json5)で、`dark`なら[_dark.json5](https://github.com/misskey-dev/misskey/blob/develop/src/client/themes/_dark.json5)です。 つまり、このテーマ内の`props`に`panel`というキーが無くても、そこにはベーステーマの`panel`があると見なされます。
+
+#### バリューで使える構文
+* 16進数で表された色
+    * 例: `#00ff00`
+* `rgb(r, g, b)`形式で表された色
+    * 例: `rgb(0, 255, 0)`
+* `rgb(r, g, b, a)`形式で表された透明度を含む色
+    * 例: `rgba(0, 255, 0, 0.5)`
+* 他のキーの値の参照
+    * `@{キー名}`と書くと他のキーの値の参照になります。`{キー名}`は参照したいキーの名前に置き換えます。
+    * 例: `@panel`
+* 定数(後述)の参照
+    * `${定数名}`と書くと定数の参照になります。`{定数名}`は参照したい定数の名前に置き換えます。
+    * 例: `$main`
+* 関数(後述)
+    * `:{関数名}<{引数}<{色}`
+
+#### 定数
+「CSS変数として出力はしたくないが、他のCSS変数の値として使いまわしたい」値があるときは、定数を使うと便利です。 キー名を`$`で始めると、そのキーはCSS変数として出力されません。
+
+#### 関数
+wip
diff --git a/src/docs/pt-PT/features/timeline.md b/src/docs/pt-PT/features/timeline.md
new file mode 100644
index 0000000000..b9392fbdc8
--- /dev/null
+++ b/src/docs/pt-PT/features/timeline.md
@@ -0,0 +1,31 @@
+# Timeline
+タイムラインは、[ノート](./note)が時系列で表示される機能です。 タイムラインには以下で示す種類があり、種類によって表示されるノートも異なります。 なお、タイムラインの種類によってはサーバーにより無効になっている場合があります。
+
+## ホーム
+自分のフォローしているユーザーの投稿が流れます。HTLと略されます。
+
+## ローカル
+全てのローカルユーザーの「ホーム」指定されていない投稿が流れます。LTLと略されます。
+
+## ソーシャル
+自分のフォローしているユーザーの投稿と、全てのローカルユーザーの「ホーム」指定されていない投稿が流れます。STLと略されます。
+
+## グローバル
+全てのローカルユーザーの「ホーム」指定されていない投稿と、サーバーに届いた全てのリモートユーザーの「ホーム」指定されていない投稿が流れます。GTLと略されます。
+
+## 比較
+| ソース          |       |     | Timeline |       |       |
+| ------------ | ----- | --- | -------- | ----- | ----- |
+| Usuários     | 公開範囲  | ホーム | ローカル     | ソーシャル | グローバル |
+| ローカル (フォロー)  | 公開    | ✔   | ✔        | ✔     | ✔     |
+|              | ホーム   | ✔   |          | ✔     |       |
+|              | フォロワー | ✔   | ✔        | ✔     | ✔     |
+| リモート (フォロー)  | 公開    | ✔   |          | ✔     | ✔     |
+|              | ホーム   | ✔   |          | ✔     |       |
+|              | フォロワー | ✔   |          | ✔     | ✔     |
+| ローカル (未フォロー) | 公開    |     | ✔        | ✔     | ✔     |
+|              | ホーム   |     |          |       |       |
+|              | フォロワー |     |          |       |       |
+| リモート (未フォロー) | 公開    |     |          |       | ✔     |
+|              | ホーム   |     |          |       |       |
+|              | フォロワー |     |          |       |       |
diff --git a/src/docs/pt-PT/features/widgets.md b/src/docs/pt-PT/features/widgets.md
new file mode 100644
index 0000000000..a7c2c1d1d6
--- /dev/null
+++ b/src/docs/pt-PT/features/widgets.md
@@ -0,0 +1,7 @@
+# ウィジェット
+ウィジェットは、MisskeyのUI上に設置できる小型の情報表示、操作が行えるパーツです。
+
+ウィジェットを編集するには、ウィジェット編集モードに切り替えます。切り替え方法はUIによって異なります。 ウィジェット編集モードでは、ウィジェットの追加、削除、並び替え、およびそれぞれのウィジェットの設定を行えます。
+
+## 利用可能なウィジェット一覧
+todo
diff --git a/src/docs/pt-PT/general/apps.md b/src/docs/pt-PT/general/apps.md
new file mode 100644
index 0000000000..1f4c85fe8f
--- /dev/null
+++ b/src/docs/pt-PT/general/apps.md
@@ -0,0 +1,6 @@
+# サードパーティアプリのリスト
+## クライアント
+todo
+
+## 連携サービス
+todo
diff --git a/src/docs/pt-PT/general/faq.md b/src/docs/pt-PT/general/faq.md
new file mode 100644
index 0000000000..ecb664e32e
--- /dev/null
+++ b/src/docs/pt-PT/general/faq.md
@@ -0,0 +1,22 @@
+# よくある質問
+ここでは利用上のよくある質問について掲載しています。 Misskeyのプロジェクト自体についてのよくある質問は[こちら](./misskey)に掲載されています。
+
+### iOS/Androidのアプリはありますか?
+公式にはそういったOSのネイティブアプリを開発していませんが、サードパーティ製のアプリがいくつかあります。 詳しくは[こちら](./apps)をご覧ください。
+
+ただ、サードパーティ製アプリはどうしても機能への対応が遅れてしまうため、とくに拘りがなければ公式のWebクライアントの利用をおすすめします。 なお、MisskeyのWebクライアントはPWAに対応しているので、ネイティブアプリのように動作させることも可能です。 詳しくは[こちら](todo)をご覧ください。
+
+## 他のサーバーのユーザーをフォローするときは?
+メニューから検索を選び、ユーザー名をホスト込みで入力します。例: `@syuilo@misskey.io`
+
+## Renoteを削除するには?
+Renoteの時刻表示の隣にある「...」を押し、「Renote解除」を選択します。 Renoteについては[こちら](../features/note)をご確認ください。
+
+## URLのプレビューを表示させたくない
+MFMには、そのURLのプレビューを無効にする構文があります。詳細は[MFMチートシート](/mfm-cheat-sheet)をご確認ください。
+
+## カスタム絵文字を追加したい
+運営者のみがカスタム絵文字を追加、編集、削除できます。それらを希望する場合は運営者に依頼してください。
+
+## Botを開発したい
+Misskey APIを利用してBotの開発が可能です。[こちら](../advanced/develop-bot)をご確認ください。
diff --git a/src/docs/pt-PT/general/glossary.md b/src/docs/pt-PT/general/glossary.md
new file mode 100644
index 0000000000..fbf52137b9
--- /dev/null
+++ b/src/docs/pt-PT/general/glossary.md
@@ -0,0 +1,83 @@
+# 用語集
+Misskeyに関する用語集です。
+
+## AcitivityPub
+(読み: あくてぃびてぃぱぶ) 分散型を実現するために用いられるプロトコル(仕様)。このプロトコルに則ってサーバー同士通信を行うことで、連合が行われ、Fediverseを形成しています。
+
+## AiScript
+(読み: あいすくりぷと) Misskey上で使用できるプログラミング言語です。詳細は[こちら。](../advanced/aiscript)
+
+## API
+(読み: えーぴーあい) Misskeyのサーバーが公開している、プログラムからMisskeyを扱うためのインターフェース。詳細は[こちら。](../advanced/api)
+
+## Bot
+(読み: ぼっと) プログラムによって動作しているアカウント。
+
+## CW
+(読み: こんてんつわーにんぐ) Contents Warningの略。ノートの内容を、操作なしには表示しないようにできる機能。主に長大な内容を隠すためや、ネタバレ防止などに使われます。
+
+## Fediverse
+(読み: ふぇでぃばーす) Misskeyを含む様々な分散型ソフトウェアのサーバーで構成されたネットワーク。
+
+## GTL
+グローバルタイムライン(Global TimeLine)の略。タイムラインの詳細は[こちら。](../features/timeline)
+
+## HTL
+ホームタイムライン(Home TimeLine)の略。タイムラインの詳細は[こちら。](../features/timeline)
+
+## LTL
+ローカルタイムライン(Local TimeLine)の略。タイムラインの詳細は[こちら。](../features/timeline)
+
+## MFM
+(読み: えむえふえむ) Misskey Flavored Markdownの略で、Misskey上で使用できるマークアップ言語です。詳細は[こちら。](../features/mfm)
+
+## NSFW
+(読み: のっとせーふふぉーわーく) Not Safe For Workの略。画像を「閲覧注意」扱いにし、操作なしには表示しないようにすることができる機能。
+
+## Repostar
+(読み: りのーと) 既にあるノートを引用、もしくはそのノートを新しいノートとして共有する行為、またそれによって作成されたノート。詳細は[こちら。](../features/note)
+
+## STL
+ソーシャルタイムライン(Social TimeLine)の略。タイムラインの詳細は[こちら。](../features/timeline)
+
+## 藍
+(読み: あい) Misskeyの看板娘(公式キャラクター)です。
+
+## アクティブユーザー
+インスタンスにアカウントを作っているユーザーのうち、現在も実際にサービスを利用しているユーザーのこと。
+
+## インスタンス
+todo
+
+## コントロールパネル
+インスタンスの設定画面のこと。
+
+## サーバー
+todo
+
+## サイレンス
+ノートをパブリックな公開範囲で投稿できなくされている状態。モデレーターの判断でユーザーごとに設定されます。詳細は[こちら。](../features/silence)
+
+## 凍結
+アカウントが使用不可に設定されている状態。
+
+## ドライブ
+Misskeyにアップロードしたファイルを管理する機能。詳細は[こちら。](../features/drive)
+
+## Posts
+Misskeyに投稿される、文章、ファイル、アンケートなどを含めることができるコンテンツ。詳細は[こちら。](../features/note)
+
+## ミスキスト
+Misskeyを使う人のこと。
+
+## モデレーター
+スパムの凍結およびサイレンスや不適切な投稿の削除など、コミュニティ運営に関する権限を持つユーザー。
+
+## リモート
+他サーバーのことを指します。リモートユーザーといったように接頭辞としても使われます。ローカルの逆です。
+
+## 連合
+サーバー上で作成された情報が他のサーバーに伝わること。
+
+## ローカル
+自サーバーのことを指します。ローカルユーザー、ローカルタイムラインといったように接頭辞としても使われます。リモートの逆です。
diff --git a/src/docs/pt-PT/general/links.md b/src/docs/pt-PT/general/links.md
new file mode 100644
index 0000000000..d6b16856fb
--- /dev/null
+++ b/src/docs/pt-PT/general/links.md
@@ -0,0 +1,5 @@
+# リンク集
+
+## ライブラリ
+- [misskey-dev/misskey.js](https://github.com/misskey-dev/misskey.js) - JavaScriptのMisskey SDK
+- [misskey-dev/mfm.js](https://github.com/misskey-dev/mfm.js) - JavaScriptのMFMパーサー実装
diff --git a/src/docs/pt-PT/general/misskey.md b/src/docs/pt-PT/general/misskey.md
new file mode 100644
index 0000000000..1e64a10e28
--- /dev/null
+++ b/src/docs/pt-PT/general/misskey.md
@@ -0,0 +1,87 @@
+# Misskeyについて
+
+Misskeyはオープンソースの分散型マイクロブログプラットフォームプロジェクトです。 開発は日本でsyuiloによって2014年から開始されました。 ドライブ、リアクションなどの豊富な機能や、高いカスタマイズ性を備えたUIを持つことが特徴です。
+
+## 歴史
+開発当初は掲示板がメインのサービスでしたが、ユーザーが短文を投稿し、それを時系列で流れるタイムライン機能を追加したところ人気が高まり、徐々にそれがメインとして開発が進むようになりました。 当初は分散型ではありませんでしたが、2018年にAcitivityPubを実装し分散型になったことで、より多くの方に認知され利用されるサービスになり、現在に至ります。
+<div class="info">ℹ️ Misskeyという名前は、syuiloが当時聴いていたMay'nというアーティストの楽曲、Brain Diverの歌詞に由来します。</div>
+
+誰でも開発に参加することができ、現在でも活発に開発が続いています。
+
+## 分散型とは何か?
+
+<b>分散(distributed)型</b>とは、<b>非中央集権(decentralized)</b>とも呼ばれ、コミュニティが多数のサーバーに分散して存在し、それらが相互に<b>通信(連合、federation)</b>することでコンテンツ共有<b>ネットワーク(Fediverse)</b>を形成していることが特徴のサービスです。 単一のサーバーしか存在しない、もしくは複数存在しても互いに独立している場合は中央集権なサービスと言われ、例えばTwitterやFacebookなどほとんどのサービスがそれに該当します。 分散型のメリットは、自分に合った運営者やテーマのサーバーを選択できることです。自分でサーバーを作成することもできます。連合するおかげで、どのサーバーを選んでも、同じコミュニティにアクセスできます。
+
+## 常にオープンソース
+Misskeyはこれまでもこれからも、オープンソースであり続けます。オープンソースとは、簡単に言うと<b>ソフトウェアのソースコード(プログラム)が公開されている</b>ことです。ソースコードの修正や再配布が可能であることを定義に含めることもあります。 Misskeyのすべてのソースコードは[AGPL](https://github.com/misskey-dev/misskey/blob/develop/LICENSE)というオープンソースライセンスの下に[公開](https://github.com/misskey-dev)されていて、誰でも自由に閲覧、使用、修正、改変、再配布をすることができます。 オープンソースは、自分で好きなように変えたり、有害な処理が含まれていないことを確認することができたり、誰でも開発に参加できるなどの、様々なメリットがあります。 上述の分散型を実現するためにも、オープンソースであるということは必要不可欠な要素です。 再び引き合いに出しますが、TwitterやFacebookなどの利益を得ているほとんどのサービスはオープンソースではありません。
+
+<div class="info">ℹ️ 技術的に言うと、MisskeyのソースコードはGitで管理されていて、リポジトリは<a href="https://github.com/misskey-dev" target="_blank">GitHub上でホスティングされています。</a></div>
+
+## 開発に参加する、プロジェクトを支援する
+Misskeyを気に入っていただけたら、ぜひプロジェクトを支援してください。プロジェクトに貢献するには、以下で紹介するようにいろいろな方法があります。方法によっては開発のスキルは不要なので、誰でも気軽に参加し貢献することができます。いつでもお待ちしています。
+
+### 機能を追加したり、バグを修正する
+ソフトウェアエンジニアのスキルをお持ちの方であれば、ソースコードを編集する形でプロジェクトに貢献することができます。 貢献についてのガイドは[こちら](https://github.com/misskey-dev/misskey/blob/develop/CONTRIBUTING.md)です。
+
+### 議論に参加する
+新しい機能、または既存の機能について意見を述べたり、不具合を報告したりすることでも貢献できます。 そのようなディスカッションは[GitHub](https://github.com/misskey-dev)上か、[フォーラム](https://forum.misskey.io/)等で行われます。
+
+### テキストを翻訳する
+Misskeyは様々な言語に対応しています(i18n -internationalizationの略- と呼ばれます)。元の言語は基本的に日本語ですが、有志によって他の言語へと翻訳されています。 その翻訳作業に加わっていただくことでもMisskeyに貢献できます。 Misskeyは[Crowdinというサービスを使用して翻訳の管理を行っています。](https://crowdin.com/project/misskey)
+
+### 感想を投稿する
+不具合報告等だけではなく、Misskeyの良い点、楽しい点といったポジティブな意見もぜひ共有してください。開発の励みになり、それは間接的ですがプロジェクトへの貢献です。
+
+### ミスキストを増やす
+ミスキストとは、Misskeyを使用する人のことです。 知り合いに紹介するなどしてMisskeyを広めていただければ、ミスキストが増え開発のモチベーションが上がります。
+
+### 寄付をする
+Misskeyはビジネスではなく、利用は無料であるため、収益は皆様からの寄付のみです。(インスタンスによっては広告収入を得ているような場合もありますが、それは運営者の収入であり直接開発者への収入にはなりません) 寄付をしていただければ、今後も開発を続けることが可能になり、プロジェクトへの貢献になります。 寄付は基本的には[Patreon](https://www.patreon.com/syuilo)で受け付けています。 一定額寄付していただけると、Misskeyの[情報ページ](/about-misskey)に名前を記載することができます。
+
+また、サーバーの運営者も、基本的には収益を得ていません。サーバーの運営にはコストがかかるので、運営者の支援をすることもご検討ください。 開発には直接関係しませんが、サーバーがあってこそのプロジェクトなので、運営が維持されるというのは開発と同じくらい重要なことです。
+
+## クレジット
+Misskeyの開発者や、Misskeyに寄付をしてくださった方の一覧は[こちら](/about-misskey)で見ることができます。
+
+## よくある質問
+### プロジェクトは何を目指していますか?
+強いて言うと、漠然的になりますが広く使われる汎用的なプラットフォームになることを目指しています。 Misskeyは他のプロジェクトとは違い、何らかの思想(例えば、反中央集権)やビジョンに基づいて開発が行われているわけではなく、その点ではフラットです。 それが逆に、特定の方向性に縛られないフレキシブルさを生み出すことに繋がっていると感じています。
+<!-- TODO: ここにロードマップへのリンク -->
+
+### 企業によって開発されていますか?
+いいえ。Misskeyの開発は個人で行われており、商業的でもないため、特定の企業の関りはありません。 開発メンバーも基本的にはボランティアです。 また、開発に対し企業のスポンサーがつくこともありますが、その場合でもやはり開発は個人のコミュニティが主体です。
+
+### 誰が運営していますか?
+Misskeyは分散型なため、各サーバーにそれぞれ異なった運営者がいます。従って、特定の個人や企業によって、Misskeyの全てが運営されているわけではありません。 また、開発チームが運営を行うわけでもないため、運営に関する連絡は、お使いのサーバーの運営者に行ってください。 サーバーの運営者は、[このページ](/about)で確認することができます。 あなたがサーバーを作成すれば、あなたが運営者になります。
+
+### どのサーバーを選べばいいですか?
+[サーバー一覧が公開されています。](https://join.misskey.page/ja-JP/instances) サーバーによってコミュニティのテーマ(特定のこと、ものが好き 等)が決められている場合があるので、自分に合ったテーマのサーバーがあれば、そこを選ぶと良いかもしれません。 他にも、サーバーの規模、ユーザー層、国および言語、運営者が信頼できるかどうか、などの観点があります。 なお、Misskey公式のサーバーというものはありません。自身で新しくサーバーを作成するという選択肢もあります。
+
+基本的にどのサーバーを選んだとしても、他の全てのサーバーのユーザーと繋がることができます。
+
+### サーバーを建てるにはどうしたらいいですか?
+Misskeyサーバーの作成に興味を持っていただきありがとうございます。 2021年現在、Misskeyのホスティングサービスは存在しないため、サーバーの作成にはある程度の知識が必要です。 サーバーの作成方法については[こちら](todo)をご覧ください。
+
+### どのような技術を使用していますか?
+Misskeyは開発が進むにつれ使用する技術も大きく変わってきました。開発当初はMySQL + PHP + jQueryといった構成でしたが、現在は以下のようになっています。
+- サーバーサイド: Node.js
+- データベース: PostgreSQL、Redis
+- UIフレームワーク: Vue.js
+- プログラミング言語: TypeScript
+
+また、MFMやAiScriptなどの、Misskeyから派生して独自の技術も開発しています。
+
+### Mastodonのフォークですか?
+いいえ。MisskeyはMastodonやその他のプロジェクトとは全く別のプロジェクトです。 開発に関しても、Misskeyの方が昔から開発されています。ただし、分散型になったのはMastodonの登場より後です。 同じAcitivityPubという分散のためのプロトコルを実装しているという点以外、両者に特に関りがあるわけでもありません。
+
+### iOS/Androidのアプリはありますか?
+公式にはそういったOSのネイティブアプリを開発していませんが、サードパーティ製のアプリがいくつかあります。 詳しくは[こちら](./apps)をご覧ください。
+
+ただ、サードパーティ製アプリはどうしても機能への対応が遅れてしまうため、とくに拘りがなければ公式のWebクライアントの利用をおすすめします。 なお、MisskeyのWebクライアントはPWAに対応しているので、ネイティブアプリのように動作させることも可能です。 詳しくは[こちら](todo)をご覧ください。
+
+### Misskeyのロゴ、アイコンはどこで入手できますか?
+(準備中)
+
+### 時折目にする猫耳の可愛い女の子は?
+Misskeyの守り神、藍ちゃんです。アイチャンカワイイヤッター!
+<div class="info">ℹ️ 藍ちゃんについては<a href="https://xn--931a.moe/" target="_blank">こちら</a>です。</div>
diff --git a/src/docs/pt-PT/general/report-issue.md b/src/docs/pt-PT/general/report-issue.md
new file mode 100644
index 0000000000..63527e32af
--- /dev/null
+++ b/src/docs/pt-PT/general/report-issue.md
@@ -0,0 +1,8 @@
+# 不具合の報告
+不具合と思われる状況に遭遇したときは、まず[トラブルシューティング](./troubleshooting)をご一読ください。 それでも問題が解決しないときは、以下の情報を含めて[フォーラム](https://forum.misskey.io/)に投稿してください。 投稿することで、解決策が見つかったり、不具合と判断されれば開発チームによって修正が行われます。
+
+## 含める情報
+- Misskeyのバージョン([情報ページ](/about)で確認できます)
+- お使いのブラウザの種類とバージョン
+- お使いのOSの種類とバージョン
+- 問題の再現手順
diff --git a/src/docs/pt-PT/general/troubleshooting.md b/src/docs/pt-PT/general/troubleshooting.md
new file mode 100644
index 0000000000..4a35091299
--- /dev/null
+++ b/src/docs/pt-PT/general/troubleshooting.md
@@ -0,0 +1,36 @@
+# トラブルシューティング
+<div class="info">ℹ️ <a href="./faq">よくある質問</a>も合わせてお役立てください。</div>
+
+問題が発生したときは、まずこちらをご確認ください。 該当する項目が無い、もしくは手順を試しても効果がない場合は、サーバーの管理者に連絡するか[不具合を報告](./report-issue)してください。
+
+## クライアントが起動しない
+ほとんどの場合、お使いのブラウザまたはOSのバージョンが古いことが原因です。 ブラウザおよびOSのバージョンを最新のものに更新してから、再度試してみてください。
+
+これは稀ですが、それでも起動しない場合は、キャッシュが原因の場合があります。ブラウザのキャッシュをクリアして、再度試してみてください。
+
+## ページが読み込めない
+クライアントが起動するもののページが読み込めないというエラーが出る場合は、ネットワークに問題がないか確認してください。また、サーバーがダウンしていないか確認してください。
+
+これは稀ですが、キャッシュが原因の場合があります。ブラウザのキャッシュをクリアして、再度試してみてください。
+
+まだ問題がある場合は、サーバーの問題と思われるのでサーバーの管理者に連絡してください。
+
+## クライアントの動作が遅い
+以下を試してみてください:
+
+- クライアント設定で「UIのアニメーションを減らす」を有効にする
+- クライアント設定で「モーダルにぼかし効果を使用」を無効にする
+- お使いのブラウザの設定でハードウェアアクセラレーションを有効にする
+- お使いのデバイスのスペックを上げる
+
+## 通知やアンテナ等の点滅が消えない
+点滅は、未読のコンテンツがあることを示しています。通常点滅が消えない場合は、コンテンツを遡ると未読なコンテンツが残っています。 すべて既読にしたと思われるのに、それでもなお点滅が続く場合(おそらく不具合と思われます)は設定から強制的にすべて既読扱いにすることができます。
+
+## Renoteができない
+フォロワー限定のノートはRenoteすることはできません。
+
+## UI上で特定の要素が表示されない
+広告ブロッカーを使用しているとそのような不具合が発生することがあります。Misskeyではオフにしてご利用ください。
+
+## UI上で未翻訳の部分がある
+ほとんどの場合、単に翻訳が間に合っていないだけで、不具合ではありません。翻訳が終わるまでお待ちください。 [翻訳に参加](./misskey)していただくことも可能です。
diff --git a/src/docs/ru-RU/admin/disable-timelines.md b/src/docs/ru-RU/admin/disable-timelines.md
new file mode 100644
index 0000000000..b081e35ab0
--- /dev/null
+++ b/src/docs/ru-RU/admin/disable-timelines.md
@@ -0,0 +1,8 @@
+# LTL/STL/GTLの無効化
+Misskeyでは、LTL/STL/GTLをそれぞれ無効化することができます。有効/無効を切り替えるには、インスタンスコントロールパネルで設定します。
+
+LTLやSTLは、そのインスタンス全員の投稿が見れるため、新規のユーザーにとってはユーザーを探す必要がなくなり、興味のあるユーザーを見つけやすいという利点があります。 しかし同時に、フォロー機能が活用されなくなったり、不適切な投稿が目につきやすくなったり、チャットのようになることで内輪感が生じて逆に新規ユーザーが参加しにくくなるといったデメリットも持ち合わせています。 サーバーによってメリット/デメリットどちらが優勢かは異なるので、オプションとして無効にできるようになっています。 もしデメリットの方が上回っていると感じたら、それらのタイムラインを無効化することも検討してください。
+
+<div class="warn">⚠️ 無効化を行うと、ユーザーが困惑し、短期的に見て利用者が減る可能性があります。そのため、無効化の際は影響を慎重に検討し、事前に説明してフォローを整える期間を一定程度設けることを推奨します。</div>
+
+なお、管理者/モデレーターは、これらのタイムラインの無効化状態は適用されず、引き続き利用することが可能です。
diff --git a/src/docs/ru-RU/admin/faq.md b/src/docs/ru-RU/admin/faq.md
new file mode 100644
index 0000000000..317b4e0655
--- /dev/null
+++ b/src/docs/ru-RU/admin/faq.md
@@ -0,0 +1,5 @@
+# よくある質問
+ここでは、サーバー管理者向けのよくある質問を掲載しています。
+
+## デフォルトテーマを設定したい
+現在、デフォルトテーマ設定機能は実装されていません。
diff --git a/src/docs/ru-RU/advanced/aiscript.md b/src/docs/ru-RU/advanced/aiscript.md
new file mode 100644
index 0000000000..604d17daa8
--- /dev/null
+++ b/src/docs/ru-RU/advanced/aiscript.md
@@ -0,0 +1,7 @@
+# AiScript
+AiScriptは、Misskeyで使用できるスクリプト言語です。
+
+<div class="info">ℹ️ AiScript実装はMisskeyとは別リポジトリで、<a href="https://github.com/syuilo/aiscript" target="_blank">オープンソースで公開されています。</a></div>
+
+## 使い方
+AiScriptの構文や組み込み関数などのドキュメントは、[こちら](https://github.com/syuilo/aiscript/tree/master/docs)で公開されています。
diff --git a/src/docs/ru-RU/advanced/api.md b/src/docs/ru-RU/advanced/api.md
new file mode 100644
index 0000000000..76019b6145
--- /dev/null
+++ b/src/docs/ru-RU/advanced/api.md
@@ -0,0 +1,58 @@
+# Misskey API
+
+MisskeyAPIを使ってMisskeyクライアント、Misskey連携Webサービス、Bot等(以下「アプリケーション」と呼びます)を開発できます。 ストリーミングAPIもあるので、リアルタイム性のあるアプリケーションを作ることも可能です。
+
+APIを使い始めるには、まずアクセストークンを取得する必要があります。 このドキュメントでは、アクセストークンを取得する手順を説明した後、基本的なAPIの使い方を説明します。
+
+## アクセストークンの取得
+基本的に、APIはリクエストにはアクセストークンが必要となります。 APIにリクエストするのが自分自身なのか、不特定の利用者に使ってもらうアプリケーションなのかによって取得手順は異なります。
+
+* 前者の場合: [「自分自身のアクセストークンを手動発行する」](#自分自身のアクセストークンを手動発行する)に進む
+* 後者の場合: [「アプリケーション利用者にアクセストークンの発行をリクエストする」](#アプリケーション利用者にアクセストークンの発行をリクエストする)に進む
+
+### 自分自身のアクセストークンを手動発行する
+「設定 > API」で、自分のアクセストークンを発行できます。
+
+[「APIの使い方」へ進む](#APIの使い方)
+
+### アプリケーション利用者にアクセストークンの発行をリクエストする
+アプリケーション利用者のアクセストークンを取得するには、以下の手順で発行をリクエストします。
+
+#### Step 1
+
+UUIDを生成する。以後これをセッションIDと呼びます。
+
+> このセッションIDは毎回生成し、使いまわさないようにしてください。
+
+#### Step 2
+
+`{_URL_}/miauth/{session}`をユーザーのブラウザで表示させる。`{session}`の部分は、セッションIDに置き換えてください。
+> 例: `{_URL_}/miauth/c1f6d42b-468b-4fd2-8274-e58abdedef6f`
+
+表示する際、URLにクエリパラメータとしていくつかのオプションを設定できます:
+* `name` ... アプリケーション名
+    * > 例: `MissDeck`
+* `icon` ... アプリケーションのアイコン画像URL
+    * > 例: `https://missdeck.example.com/icon.png`
+* `callback` ... 認証が終わった後にリダイレクトするURL
+    * > 例: `https://missdeck.example.com/callback`
+    * リダイレクト時には、`session`というクエリパラメータでセッションIDが付きます
+* `permission` ... アプリケーションが要求する権限
+    * > 例: `write:notes,write:following,read:drive`
+    * 要求する権限を`,`で区切って列挙します
+    * どのような権限があるかは[APIリファレンス](/api-doc)で確認できます
+
+#### Step 3
+ユーザーが発行を許可した後、`{_URL_}/api/miauth/{session}/check`にPOSTリクエストすると、レスポンスとしてアクセストークンを含むJSONが返ります。
+
+レスポンスに含まれるプロパティ:
+* `token` ... ユーザーのアクセストークン
+* `user` ... ユーザーの情報
+
+[「APIの使い方」へ進む](#APIの使い方)
+
+## APIの使い方
+**APIはすべてPOSTで、リクエスト/レスポンスともにJSON形式です。RESTではありません。** アクセストークンは、`i`というパラメータ名でリクエストに含めます。
+
+* [APIリファレンス](/api-doc)
+* [ストリーミングAPI](./stream)
diff --git a/src/docs/ru-RU/advanced/create-plugin.md b/src/docs/ru-RU/advanced/create-plugin.md
new file mode 100644
index 0000000000..f5baa27646
--- /dev/null
+++ b/src/docs/ru-RU/advanced/create-plugin.md
@@ -0,0 +1,74 @@
+# プラグインの作成
+Misskey Webクライアントのプラグイン機能を使うと、クライアントを拡張し、様々な機能を追加できます。 ここではプラグインの作成にあたってのメタデータ定義や、AiScript APIリファレンスを掲載します。
+
+## Метаданные
+プラグインは、AiScriptのメタデータ埋め込み機能を使って、デフォルトとしてプラグインのメタデータを定義する必要があります。 メタデータは次のプロパティを含むオブジェクトです。
+
+### name
+プラグイン名
+
+### author
+プラグイン作者
+
+### version
+プラグインバージョン。数値を指定してください。
+
+### description
+プラグインの説明
+
+### permissions
+プラグインが要求する権限。MisskeyAPIにリクエストする際に用いられます。
+
+### config
+プラグインの設定情報を表すオブジェクト。 キーに設定名、値に以下のプロパティを含めます。
+
+#### type
+設定値の種類を表す文字列。以下から選択します。 string number boolean
+
+#### label
+ユーザーに表示する設定名
+
+#### description
+設定の説明
+
+#### default
+設定のデフォルト値
+
+## APIリファレンス
+AiScript標準で組み込まれているAPIは掲載しません。
+
+### Mk:dialog(title text type)
+ダイアログを表示します。typeには以下の値が設定できます。 info success warn error question 省略すると info になります。
+
+### Mk:confirm(title text type)
+確認ダイアログを表示します。typeには以下の値が設定できます。 info success warn error question 省略すると question になります。 ユーザーが"OK"を選択した場合は true を、"キャンセル"を選択した場合は false が返ります。
+
+### Mk:api(endpoint params)
+Misskey APIにリクエストします。第一引数にエンドポイント名、第二引数にパラメータオブジェクトを渡します。
+
+### Mk:save(key value)
+任意の値に任意の名前を付けて永続化します。永続化した値は、AiScriptコンテキストが終了しても残り、Mk:loadで読み取ることができます。
+
+### Mk:load(key)
+Mk:saveで永続化した指定の名前の値を読み取ります。
+
+### Plugin:register_post_form_action(title fn)
+投稿フォームにアクションを追加します。第一引数にアクション名、第二引数にアクションが選択された際のコールバック関数を渡します。 コールバック関数には、第一引数に投稿フォームオブジェクトが渡されます。
+
+### Plugin:register_note_action(title fn)
+ノートメニューに項目を追加します。第一引数に項目名、第二引数に項目が選択された際のコールバック関数を渡します。 コールバック関数には、第一引数に対象のノートオブジェクトが渡されます。
+
+### Plugin:register_user_action(title fn)
+ユーザーメニューに項目を追加します。第一引数に項目名、第二引数に項目が選択された際のコールバック関数を渡します。 コールバック関数には、第一引数に対象のユーザーオブジェクトが渡されます。
+
+### Plugin:register_note_view_interruptor(fn)
+UIに表示されるノート情報を書き換えます。 コールバック関数には、第一引数に対象のノートオブジェクトが渡されます。 コールバック関数の返り値でノートが書き換えられます。
+
+### Plugin:register_note_post_interruptor(fn)
+ノート投稿時にノート情報を書き換えます。 コールバック関数には、第一引数に対象のノートオブジェクトが渡されます。 コールバック関数の返り値でノートが書き換えられます。
+
+### Plugin:open_url(url)
+第一引数に渡されたURLをブラウザの新しいタブで開きます。
+
+### Plugin:config
+プラグインの設定が格納されるオブジェクト。プラグイン定義のconfigで設定したキーで値が入ります。
diff --git a/src/docs/ru-RU/advanced/develop-bot.md b/src/docs/ru-RU/advanced/develop-bot.md
new file mode 100644
index 0000000000..7f825e9bc4
--- /dev/null
+++ b/src/docs/ru-RU/advanced/develop-bot.md
@@ -0,0 +1,6 @@
+# Botの作成
+[Misskey API](./api)を利用してBotの開発が可能です。 また、いくつかのBot実装が公開されているため、ぜひ参考にしてください。
+
+- [syuilo/ai](https://github.com/syuilo/ai) ... Node.js上で動く、TypeScript製Bot実装
+
+Botを作成したときは、プロフィール設定からBotフラグをオンにしておくことを強くおすすめします。
diff --git a/src/docs/ru-RU/advanced/reversi-bot.md b/src/docs/ru-RU/advanced/reversi-bot.md
new file mode 100644
index 0000000000..16eb25a607
--- /dev/null
+++ b/src/docs/ru-RU/advanced/reversi-bot.md
@@ -0,0 +1,160 @@
+# MisskeyリバーシBotの開発
+Misskeyのリバーシ機能に対応したBotの開発方法をここに記します。
+
+1. `games/reversi`ストリームに以下のパラメータを付けて接続する:
+    * `i`: botアカウントのAPIキー
+
+2. 対局への招待が来たら、ストリームから`invited`イベントが流れてくる
+    * イベントの中身に、`parent`という名前で対局へ誘ってきたユーザーの情報が含まれている
+
+3. `games/reversi/match`へ、`user_id`として`parent`の`id`が含まれたリクエストを送信する
+
+4. 上手くいくとゲーム情報が返ってくるので、`games/reversi-game`ストリームへ、以下のパラメータを付けて接続する:
+    * `i`: botアカウントのAPIキー
+    * `game`: `game`の`id`
+
+5. この間、相手がゲームの設定を変更するとその都度`update-settings`イベントが流れてくるので、必要であれば何かしらの処理を行う
+
+6. 設定に満足したら、`{ type: 'accept' }`メッセージをストリームに送信する
+
+7. ゲームが開始すると、`started`イベントが流れてくる
+    * イベントの中身にはゲーム情報が含まれている
+
+8. 石を打つには、ストリームに`{ type: 'set', pos: <位置> }`を送信する(位置の計算方法は後述)
+
+9. 相手または自分が石を打つと、ストリームから`set`イベントが流れてくる
+    * `color`として石の色が含まれている
+    * `pos`として位置情報が含まれている
+
+## 位置の計算法
+8x8のマップを考える場合、各マスの位置(インデックスと呼びます)は次のようになっています:
+```
++--+--+--+--+--+--+--+--+
+| 0| 1| 2| 3| 4| 5| 6| 7|
++--+--+--+--+--+--+--+--+
+| 8| 9|10|11|12|13|14|15|
++--+--+--+--+--+--+--+--+
+|16|17|18|19|20|21|22|23|
+...
+```
+
+### X,Y座標 から インデックス に変換する
+```
+pos = x + (y * mapWidth)
+```
+`mapWidth`は、ゲーム情報の`map`から、次のようにして計算できます:
+```
+mapWidth = map[0].length
+```
+
+### インデックス から X,Y座標 に変換する
+```
+x = pos % mapWidth
+y = Math.floor(pos / mapWidth)
+```
+
+## マップ情報
+マップ情報は、ゲーム情報の`map`に入っています。 文字列の配列になっており、ひとつひとつの文字がマス情報を表しています。 それをもとにマップのデザインを知る事が出来ます:
+* `(スペース)` ... マス無し
+* `-` ... マス
+* `b` ... 初期配置される黒石
+* `w` ... 初期配置される白石
+
+例えば、4*4の次のような単純なマップがあるとします:
+```text
++---+---+---+---+
+|   |   |   |   |
++---+---+---+---+
+|   | ○ | ● |   |
++---+---+---+---+
+|   | ● | ○ |   |
++---+---+---+---+
+|   |   |   |   |
++---+---+---+---+
+```
+
+この場合、マップデータはこのようになります:
+```javascript
+['----', '-wb-', '-bw-', '----']
+```
+
+## ユーザーにフォームを提示して対話可能Botを作成する
+ユーザーとのコミュニケーションを行うため、ゲームの設定画面でユーザーにフォームを提示することができます。 例えば、Botの強さをユーザーが設定できるようにする、といったシナリオが考えられます。
+
+フォームを提示するには、`reversi-game`ストリームに次のメッセージを送信します:
+```javascript
+{
+  type: 'init-form',
+  body: [フォームコントロールの配列]
+}
+```
+
+フォームコントロールの配列については今から説明します。 フォームコントロールは、次のようなオブジェクトです:
+```javascript
+{
+  id: 'switch1',
+  type: 'switch',
+  label: 'Enable hoge',
+  value: false
+}
+```
+`id` ... コントロールのID。 `type` ... コントロールの種類。後述します。 `label` ... コントロールと一緒に表記するテキスト。 `value` ... コントロールのデフォルト値。
+
+### フォームの操作を受け取る
+ユーザーがフォームを操作すると、ストリームから`update-form`イベントが流れてきます。 イベントの中身には、コントロールのIDと、ユーザーが設定した値が含まれています。 例えば、上で示したスイッチをユーザーがオンにしたとすると、次のイベントが流れてきます:
+```javascript
+{
+  id: 'switch1',
+  value: true
+}
+```
+
+### フォームコントロールの種類
+#### Выключатель
+type: `switch` スイッチを表示します。何かの機能をオン/オフさせたい場合に有用です。
+
+##### プロパティ
+`label` ... スイッチに表記するテキスト。
+
+#### ラジオボタン
+type: `radio` ラジオボタンを表示します。選択肢を提示するのに有用です。例えば、Botの強さを設定させるなどです。
+
+##### プロパティ
+`items` ... ラジオボタンの選択肢。例:
+```javascript
+items: [{
+  label: 'å¼±',
+  value: 1
+}, {
+  label: '中',
+  value: 2
+}, {
+  label: 'å¼·',
+  value: 3
+}]
+```
+
+#### スライダー
+type: `slider` スライダーを表示します。
+
+##### プロパティ
+`min` ... スライダーの下限。 `max` ... スライダーの上限。 `step` ... 入力欄で刻むステップ値。
+
+#### テキストボックス
+type: `textbox` テキストボックスを表示します。ユーザーになにか入力させる一般的な用途に利用できます。
+
+## ユーザーにメッセージを表示する
+設定画面でユーザーと対話する、フォーム以外のもうひとつの方法がこれです。ユーザーになにかメッセージを表示することができます。 例えば、ユーザーがBotの対応していないモードやマップを選択したとき、警告を表示するなどです。 メッセージを表示するには、次のメッセージをストリームに送信します:
+```javascript
+{
+  type: 'message',
+  body: {
+    text: 'メッセージ内容',
+    type: 'メッセージの種類'
+  }
+}
+```
+メッセージの種類: `success`, `info`, `warning`, `error`。
+
+## 投了する
+投了をするには、<a href="./api/endpoints/games/reversi/games/surrender">このエンドポイント</a>にリクエストします。
diff --git a/src/docs/ru-RU/advanced/stream.md b/src/docs/ru-RU/advanced/stream.md
new file mode 100644
index 0000000000..eeea156e2d
--- /dev/null
+++ b/src/docs/ru-RU/advanced/stream.md
@@ -0,0 +1,350 @@
+# ストリーミングAPI
+
+ストリーミングAPIを使うと、リアルタイムで様々な情報(例えばタイムラインに新しい投稿が流れてきた、メッセージが届いた、フォローされた、など)を受け取ったり、様々な操作を行ったりすることができます。
+
+## ストリームに接続する
+
+ストリーミングAPIを利用するには、まずMisskeyサーバーに**websocket**接続する必要があります。
+
+以下のURLに、`i`というパラメータ名で認証情報を含めて、websocket接続してください。例:
+```
+%WS_URL%/streaming?i=xxxxxxxxxxxxxxx
+```
+
+認証情報は、自分のAPIキーや、アプリケーションからストリームに接続する際はユーザーのアクセストークンのことを指します。
+
+<div class="info">ℹ️ 認証情報の取得については、<a href="./api">こちらのドキュメント</a>をご確認ください。</div>
+
+---
+
+認証情報は省略することもできますが、その場合非ログインでの利用ということになり、受信できる情報や可能な操作は限られます。例:
+
+```
+%WS_URL%/streaming
+```
+
+---
+
+ストリームに接続すると、後述するAPI操作や、投稿の購読を行ったりすることができます。 しかしまだこの段階では、例えばタイムラインへの新しい投稿を受信したりすることはできません。 それを行うには、ストリーム上で、後述する**チャンネル**に接続する必要があります。
+
+**ストリームでのやり取りはすべてJSONです。**
+
+## Каналы
+MisskeyのストリーミングAPIにはチャンネルという概念があります。これは、送受信する情報を分離するための仕組みです。 Misskeyのストリームに接続しただけでは、まだリアルタイムでタイムラインの投稿を受信したりはできません。 ストリーム上でチャンネルに接続することで、様々な情報を受け取ったり情報を送信したりすることができるようになります。
+
+ひとつのストリーム上で、同時に複数のチャンネルに接続することができます。
+
+### チャンネルに接続する
+チャンネルに接続するには、次のようなデータをJSONでストリームに送信します:
+
+```json
+{
+    type: 'connect',
+    body: {
+        channel: 'xxxxxxxx',
+        id: 'foobar',
+        params: {
+            ...
+        }
+    }
+}
+```
+
+ここで、
+* `channel`には接続したいチャンネル名を設定します。チャンネルの種類については後述します。
+* `id`にはそのチャンネルとやり取りするための任意のIDを設定します。ストリームでは様々なメッセージが流れるので、そのメッセージがどのチャンネルからのものなのか識別する必要があるからです。このIDは、UUIDや、乱数のようなもので構いません。
+* `params`はチャンネルに接続する際のパラメータです。チャンネルによって接続時に必要とされるパラメータは異なります。パラメータ不要のチャンネルに接続する際は、このプロパティは省略可能です。
+
+<div class="info">ℹ️ IDはチャンネルごとではなく「チャンネルの接続ごと」です。なぜなら、同じチャンネルに異なるパラメータで複数接続するケースもあるからです。</div>
+
+### チャンネルからのメッセージを受け取る
+例えばタイムラインのチャンネルなら、新しい投稿があった時にメッセージを発します。そのメッセージを受け取ることで、タイムラインに新しい投稿がされたことをリアルタイムで知ることができます。
+
+チャンネルがメッセージを発すると、次のようなデータがJSONでストリームに流れてきます:
+```json
+{
+    type: 'channel',
+    body: {
+        id: 'foobar',
+        type: 'something',
+        body: {
+            some: 'thing'
+        }
+    }
+}
+```
+
+ここで、
+* `id`には前述したそのチャンネルに接続する際に設定したIDが設定されています。これで、このメッセージがどのチャンネルからのものなのか知ることができます。
+* `type`にはメッセージの種類が設定されます。チャンネルによって、どのような種類のメッセージが流れてくるかは異なります。
+* `body`にはメッセージの内容が設定されます。チャンネルによって、どのような内容のメッセージが流れてくるかは異なります。
+
+### チャンネルに向けてメッセージを送信する
+チャンネルによっては、メッセージを受け取るだけでなく、こちらから何かメッセージを送信し、何らかの操作を行える場合があります。
+
+チャンネルにメッセージを送信するには、次のようなデータをJSONでストリームに送信します:
+```json
+{
+    type: 'channel',
+    body: {
+        id: 'foobar',
+        type: 'something',
+        body: {
+            some: 'thing'
+        }
+    }
+}
+```
+
+ここで、
+* `id`には前述したそのチャンネルに接続する際に設定したIDを設定します。これで、このメッセージがどのチャンネルに向けたものなのか識別させることができます。
+* `type`にはメッセージの種類を設定します。チャンネルによって、どのような種類のメッセージを受け付けるかは異なります。
+* `body`にはメッセージの内容を設定します。チャンネルによって、どのような内容のメッセージを受け付けるかは異なります。
+
+### チャンネルから切断する
+チャンネルから切断するには、次のようなデータをJSONでストリームに送信します:
+
+```json
+{
+    type: 'disconnect',
+    body: {
+        id: 'foobar'
+    }
+}
+```
+
+ここで、
+* `id`には前述したそのチャンネルに接続する際に設定したIDを設定します。
+
+## ストリームを経由してAPIリクエストする
+
+ストリームを経由してAPIリクエストすると、HTTPリクエストを発生させずにAPIを利用できます。そのため、コードを簡潔にできたり、パフォーマンスの向上を見込めるかもしれません。
+
+ストリームを経由してAPIリクエストするには、次のようなデータをJSONでストリームに送信します:
+```json
+{
+    type: 'api',
+    body: {
+        id: 'xxxxxxxxxxxxxxxx',
+        endpoint: 'notes/create',
+        data: {
+            text: 'yee haw!'
+        }
+    }
+}
+```
+
+ここで、
+* `id`には、APIのレスポンスを識別するための、APIリクエストごとの一意なIDを設定する必要があります。UUIDや、簡単な乱数のようなもので構いません。
+* `endpoint`には、あなたがリクエストしたいAPIのエンドポイントを指定します。
+* `data`には、エンドポイントのパラメータを含めます。
+
+<div class="info">ℹ️ APIのエンドポイントやパラメータについてはAPIリファレンスをご確認ください。</div>
+
+### レスポンスの受信
+
+APIへリクエストすると、レスポンスがストリームから次のような形式で流れてきます。
+
+```json
+{
+    type: 'api:xxxxxxxxxxxxxxxx',
+    body: {
+        ...
+    }
+}
+```
+
+ここで、
+* `xxxxxxxxxxxxxxxx`の部分には、リクエストの際に設定された`id`が含まれています。これにより、どのリクエストに対するレスポンスなのか判別することができます。
+* `body`には、レスポンスが含まれています。
+
+## 投稿のキャプチャ
+
+Misskeyは投稿のキャプチャと呼ばれる仕組みを提供しています。これは、指定した投稿のイベントをストリームで受け取る機能です。
+
+例えばタイムラインを取得してユーザーに表示したとします。ここで誰かがそのタイムラインに含まれるどれかの投稿に対してリアクションしたとします。
+
+しかし、クライアントからするとある投稿にリアクションが付いたことなどは知る由がないため、リアルタイムでリアクションをタイムライン上の投稿に反映して表示するといったことができません。
+
+この問題を解決するために、Misskeyは投稿のキャプチャ機構を用意しています。投稿をキャプチャすると、その投稿に関するイベントを受け取ることができるため、リアルタイムでリアクションを反映させたりすることが可能になります。
+
+### 投稿をキャプチャする
+
+投稿をキャプチャするには、ストリームに次のようなメッセージを送信します:
+
+```json
+{
+    type: 'subNote',
+    body: {
+        id: 'xxxxxxxxxxxxxxxx'
+    }
+}
+```
+
+ここで、
+* `id`にキャプチャしたい投稿の`id`を設定します。
+
+このメッセージを送信すると、Misskeyにキャプチャを要請したことになり、以後、その投稿に関するイベントが流れてくるようになります。
+
+例えば投稿にリアクションが付いたとすると、次のようなメッセージが流れてきます:
+
+```json
+{
+    type: 'noteUpdated',
+    body: {
+        id: 'xxxxxxxxxxxxxxxx',
+        type: 'reacted',
+        body: {
+            reaction: 'like',
+            userId: 'yyyyyyyyyyyyyyyy'
+        }
+    }
+}
+```
+
+ここで、
+* `body`内の`id`に、イベントを発生させた投稿のIDが設定されます。
+* `body`内の`type`に、イベントの種類が設定されます。
+* `body`内の`body`に、イベントの詳細が設定されます。
+
+#### イベントの種類
+
+##### `reacted`
+その投稿にリアクションがされた時に発生します。
+
+* `reaction`に、リアクションの種類が設定されます。
+* `userId`に、リアクションを行ったユーザーのIDが設定されます。
+
+例:
+```json
+{
+    type: 'noteUpdated',
+    body: {
+        id: 'xxxxxxxxxxxxxxxx',
+        type: 'reacted',
+        body: {
+            reaction: 'like',
+            userId: 'yyyyyyyyyyyyyyyy'
+        }
+    }
+}
+```
+
+##### `deleted`
+その投稿が削除された時に発生します。
+
+* `deletedAt`に、削除日時が設定されます。
+
+例:
+```json
+{
+    type: 'noteUpdated',
+    body: {
+        id: 'xxxxxxxxxxxxxxxx',
+        type: 'deleted',
+        body: {
+            deletedAt: '2018-10-22T02:17:09.703Z'
+        }
+    }
+}
+```
+
+##### `pollVoted`
+その投稿に添付されたアンケートに投票された時に発生します。
+
+* `choice`に、選択肢IDが設定されます。
+* `userId`に、投票を行ったユーザーのIDが設定されます。
+
+例:
+```json
+{
+    type: 'noteUpdated',
+    body: {
+        id: 'xxxxxxxxxxxxxxxx',
+        type: 'pollVoted',
+        body: {
+            choice: 2,
+            userId: 'yyyyyyyyyyyyyyyy'
+        }
+    }
+}
+```
+
+### 投稿のキャプチャを解除する
+
+その投稿がもう画面に表示されなくなったりして、その投稿に関するイベントをもう受け取る必要がなくなったときは、キャプチャの解除を申請してください。
+
+次のメッセージを送信します:
+
+```json
+{
+    type: 'unsubNote',
+    body: {
+        id: 'xxxxxxxxxxxxxxxx'
+    }
+}
+```
+
+ここで、
+* `id`にキャプチャを解除したい投稿の`id`を設定します。
+
+このメッセージを送信すると、以後、その投稿に関するイベントは流れてこないようになります。
+
+# チャンネル一覧
+## `main`
+アカウントに関する基本的な情報が流れてきます。このチャンネルにパラメータはありません。
+
+### 流れてくるイベント一覧
+
+#### `renote`
+自分の投稿がRenoteされた時に発生するイベントです。自分自身の投稿をRenoteしたときは発生しません。
+
+#### `mention`
+誰かからメンションされたときに発生するイベントです。
+
+#### `readAllNotifications`
+自分宛ての通知がすべて既読になったことを表すイベントです。このイベントを利用して、「通知があることを示すアイコン」のようなものをオフにしたりする等のケースが想定されます。
+
+#### `meUpdated`
+自分の情報が更新されたことを表すイベントです。
+
+#### `follow`
+自分が誰かをフォローしたときに発生するイベントです。
+
+#### `unfollow`
+自分が誰かのフォローを解除したときに発生するイベントです。
+
+#### `followed`
+自分が誰かにフォローされたときに発生するイベントです。
+
+## `homeTimeline`
+ホームタイムラインの投稿情報が流れてきます。このチャンネルにパラメータはありません。
+
+### 流れてくるイベント一覧
+
+#### `note`
+タイムラインに新しい投稿が流れてきたときに発生するイベントです。
+
+## `localTimeline`
+ローカルタイムラインの投稿情報が流れてきます。このチャンネルにパラメータはありません。
+
+### 流れてくるイベント一覧
+
+#### `note`
+ローカルタイムラインに新しい投稿が流れてきたときに発生するイベントです。
+
+## `hybridTimeline`
+ソーシャルタイムラインの投稿情報が流れてきます。このチャンネルにパラメータはありません。
+
+### 流れてくるイベント一覧
+
+#### `note`
+ソーシャルタイムラインに新しい投稿が流れてきたときに発生するイベントです。
+
+## `globalTimeline`
+グローバルタイムラインの投稿情報が流れてきます。このチャンネルにパラメータはありません。
+
+### 流れてくるイベント一覧
+
+#### `note`
+グローバルタイムラインに新しい投稿が流れてきたときに発生するイベントです。
diff --git a/src/docs/ru-RU/features/antenna.md b/src/docs/ru-RU/features/antenna.md
new file mode 100644
index 0000000000..cc46db4740
--- /dev/null
+++ b/src/docs/ru-RU/features/antenna.md
@@ -0,0 +1,4 @@
+# Антенны
+アンテナは、自由に条件を設定して、合致するノートを自動で収集することができる機能です。
+
+条件を設定したアンテナが作成された状態で、条件に合致するノートが投稿されると、リアルタイムでそのアンテナのタイムラインにノートが追加されます。
diff --git a/src/docs/ru-RU/features/custom-emoji.md b/src/docs/ru-RU/features/custom-emoji.md
new file mode 100644
index 0000000000..6d20e36c15
--- /dev/null
+++ b/src/docs/ru-RU/features/custom-emoji.md
@@ -0,0 +1,2 @@
+# Эмодзи пользователя
+カスタム絵文字は、インスタンスで用意された画像を絵文字のように使える機能です。 ノート、リアクション、チャット、自己紹介、名前などの場所で使うことができます。 カスタム絵文字をそれらの場所で使うには、絵文字ピッカーボタン(ある場合)を押すか、`:`を入力して絵文字サジェストを表示します。 テキスト内に`:foo:`のような形式の文字列が見つかると、`foo`の部分がカスタム絵文字名と解釈され、表示時には対応したカスタム絵文字に置き換わります。
diff --git a/src/docs/ru-RU/features/deck.md b/src/docs/ru-RU/features/deck.md
new file mode 100644
index 0000000000..7b109dc4fc
--- /dev/null
+++ b/src/docs/ru-RU/features/deck.md
@@ -0,0 +1,18 @@
+# Пульт
+
+デッキは利用可能なUIのひとつです。「カラム」と呼ばれるビューを複数並べて表示させることで、カスタマイズ性が高く、情報量の多いUIが構築できることが特徴です。
+
+## カラムの追加
+デッキの背景を右クリックし、「カラムを追加」して任意のカラムを追加できます。
+
+## カラムの移動
+カラムは、ドラッグアンドドロップで他のカラムと位置を入れ替えることが出来るほか、カラムメニュー(カラムのヘッダー右クリック)から位置を移動させることもできます。
+
+## カラムの水平分割
+カラムは左右だけでなく、上下に並べることもできます。 カラムメニューを開き、「左に重ねる」を選択すると、左のカラムの下に現在のカラムが移動します。 上下分割を解除するには、カラムメニューの「右に出す」を選択します。
+
+## カラムの設定
+カラムメニューの「編集」を選択するとカラムの設定を編集できます。カラムの名前を変えたり、幅を変えたりできます。
+
+## デッキの設定
+デッキに関する設定は、[settings/deck](/settings/deck)で行えます。
diff --git a/src/docs/ru-RU/features/drive.md b/src/docs/ru-RU/features/drive.md
new file mode 100644
index 0000000000..0ab6865642
--- /dev/null
+++ b/src/docs/ru-RU/features/drive.md
@@ -0,0 +1,17 @@
+# Диск
+ドライブは、Misskey上でファイルを管理できる機能です。
+
+[ドライブのページ](/my/drive)から任意のファイルをアップロードできるほか、アバターに設定した画像や、ノートに添付したファイルなどもすべてドライブにアップロードされます。
+
+<div class="warn">⚠️ ドライブからファイルを削除すると、そのファイルが添付されたノートも消えます。</div>
+
+ドライブにアップロードされたファイルは、いつでもダウンロードすることができるほか、ノート作成時に「ドライブからファイルを添付」することでファイルを再利用することもできます。
+
+ドライブ内にフォルダを作り、複数のファイルをまとめて整理することもできます。
+
+## 閲覧注意 (NSFW)
+<div class="info">ℹ️ この項目が閲覧注意なわけではありません</div>
+
+閲覧注意またはNSFW (Not safe for work) は、ドライブのファイルに設定することができるフラグです。 閲覧注意フラグを設定されたファイルは、表示される際に閲覧者の操作なしには表示されなくなります。 このフラグは、例えば職場や公共の場で閲覧するのに適切でないと思われる画像などに設定し、そのような画像が突然表示されてしまうことを防ぐ目的で使われます。
+
+このフラグは手動でオンオフを切り替えられるほか、モデレーターの判断で設定される場合もあります。
diff --git a/src/docs/ru-RU/features/favorite.md b/src/docs/ru-RU/features/favorite.md
new file mode 100644
index 0000000000..b65b99fed4
--- /dev/null
+++ b/src/docs/ru-RU/features/favorite.md
@@ -0,0 +1,4 @@
+# В избранное
+[ノート](./node)をお気に入りとして登録できる機能です。 お気に入り登録したノートは、[お気に入りページ](./my/favorites)で一覧することができます。 お気に入りに登録したことは相手に通知されず、お気に入りは自分しか見ることができません。
+
+ノートをお気に入り登録するには、ノートメニューの「お気に入り」を押します。お気に入り解除するには、ノートメニューの「お気に入り解除」を押します。
diff --git a/src/docs/ru-RU/features/follow.md b/src/docs/ru-RU/features/follow.md
new file mode 100644
index 0000000000..dde28b9c9a
--- /dev/null
+++ b/src/docs/ru-RU/features/follow.md
@@ -0,0 +1,2 @@
+# Подписки
+ユーザーをフォローすると、タイムラインにそのユーザーの投稿が表示されるようになります。ただし、他のユーザーに対する返信は含まれません。 ユーザーをフォローするには、ユーザーページの「フォロー」ボタンをクリックします。フォローを解除するには、もう一度クリックします。
diff --git a/src/docs/ru-RU/features/keyboard-shortcut.md b/src/docs/ru-RU/features/keyboard-shortcut.md
new file mode 100644
index 0000000000..cbdc572746
--- /dev/null
+++ b/src/docs/ru-RU/features/keyboard-shortcut.md
@@ -0,0 +1,66 @@
+# キーボードショートカット
+
+## Всеобщая
+これらのショートカットは基本的にどこでも使えます。
+<table>
+    <thead>
+        <tr><th>ショートカット</th><th>効果</th><th>由来</th></tr>
+    </thead>
+    <tbody>
+        <tr><td><kbd class="key">P</kbd>, <kbd class="key">N</kbd></td><td>新規投稿</td><td><b>P</b>ost, <b>N</b>ew, <b>N</b>ote</td></tr>
+        <tr><td><kbd class="key">T</kbd></td><td>タイムラインの最も新しい投稿にフォーカス</td><td><b>T</b>imeline, <b>T</b>op</td></tr>
+        <tr><td><kbd class="group"><kbd class="key">Shift</kbd> + <kbd class="key">N</kbd></kbd></td><td>通知を表示/隠す</td><td><b>N</b>otifications</td></tr>
+        <tr><td><kbd class="key">S</kbd></td><td>Поиск</td><td><b>S</b>earch</td></tr>
+        <tr><td><kbd class="key">H</kbd>, <kbd class="key">?</kbd></td><td>ヘルプを表示</td><td><b>H</b>elp</td></tr>
+    </tbody>
+</table>
+
+## 投稿にフォーカスされた状態
+<table>
+    <thead>
+        <tr><th>ショートカット</th><th>効果</th><th>由来</th></tr>
+    </thead>
+    <tbody>
+        <tr><td><kbd class="key">↑</kbd>, <kbd class="key">K</kbd>, <kbd class="group"><kbd class="key">Shift</kbd> + <kbd class="key">Tab</kbd></kbd></td><td>上の投稿にフォーカスを移動</td><td>-</td></tr>
+        <tr><td><kbd class="key">↓</kbd>, <kbd class="key">J</kbd>, <kbd class="key">Tab</kbd></td><td>下の投稿にフォーカスを移動</td><td>-</td></tr>
+        <tr><td><kbd class="key">R</kbd></td><td>返信フォームを開く</td><td><b>R</b>eply</td></tr>
+        <tr><td><kbd class="key">Q</kbd></td><td>Renoteフォームを開く</td><td><b>Q</b>uote</td></tr>
+        <tr><td><kbd class="group"><kbd class="key">Ctrl</kbd> + <kbd class="key">Q</kbd></kbd></td><td>即刻Renoteする(フォームを開かずに)</td><td>-</td></tr>
+        <tr><td><kbd class="key">E</kbd>, <kbd class="key">A</kbd>, <kbd class="key">+</kbd></td><td>リアクションフォームを開く</td><td><b>E</b>mote, re<b>A</b>ction</td></tr>
+        <tr><td><kbd class="key">0</kbd>~<kbd class="key">9</kbd></td><td>数字に対応したリアクションをする(対応については後述)</td><td>-</td></tr>
+        <tr><td><kbd class="key">F</kbd>, <kbd class="key">B</kbd></td><td>お気に入りに登録</td><td><b>F</b>avorite, <b>B</b>ookmark</td></tr>
+        <tr><td><kbd class="key">Del</kbd>, <kbd class="group"><kbd class="key">Ctrl</kbd> + <kbd class="key">D</kbd></kbd></td><td>投稿を削除</td><td><b>D</b>elete</tr>
+        <tr><td><kbd class="key">M</kbd>, <kbd class="key">O</kbd></td><td>投稿に対するメニューを開く</td><td><b>M</b>ore, <b>O</b>ther</td></tr>
+        <tr><td><kbd class="key">S</kbd></td><td>CWで隠された部分を表示 or 隠す</td><td><b>S</b>how, <b>S</b>ee</td></tr>
+        <tr><td><kbd class="key">Esc</kbd></td><td>フォーカスを外す</td><td>-</td></tr>
+    </tbody>
+</table>
+
+## Renoteフォーム
+<table>
+    <thead>
+        <tr><th>ショートカット</th><th>効果</th><th>由来</th></tr>
+    </thead>
+    <tbody>
+        <tr><td><kbd class="key">Enter</kbd></td><td>Renoteする</td><td>-</td></tr>
+        <tr><td><kbd class="key">Q</kbd></td><td>フォームを展開する</td><td><b>Q</b>uote</td></tr>
+        <tr><td><kbd class="key">Esc</kbd></td><td>フォームを閉じる</td><td>-</td></tr>
+    </tbody>
+</table>
+
+## リアクションフォーム
+デフォルトで「👍」にフォーカスが当たっている状態です。
+<table>
+    <thead>
+        <tr><th>ショートカット</th><th>効果</th><th>由来</th></tr>
+    </thead>
+    <tbody>
+        <tr><td><kbd class="key">↑</kbd>, <kbd class="key">K</kbd></td><td>上のリアクションにフォーカスを移動</td><td>-</td></tr>
+        <tr><td><kbd class="key">↓</kbd>, <kbd class="key">J</kbd></td><td>下のリアクションにフォーカスを移動</td><td>-</td></tr>
+        <tr><td><kbd class="key">←</kbd>, <kbd class="key">H</kbd>, <kbd class="group"><kbd class="key">Shift</kbd> + <kbd class="key">Tab</kbd></kbd></td><td>左のリアクションにフォーカスを移動</td><td>-</td></tr>
+        <tr><td><kbd class="key">→</kbd>, <kbd class="key">L</kbd>, <kbd class="key">Tab</kbd></td><td>右のリアクションにフォーカスを移動</td><td>-</td></tr>
+        <tr><td><kbd class="key">Enter</kbd>, <kbd class="key">Space</kbd>, <kbd class="key">+</kbd></td><td>リアクション確定</td><td>-</td></tr>
+        <tr><td><kbd class="key">0</kbd>~<kbd class="key">9</kbd></td><td>数字に対応したリアクションで確定</td><td>-</td></tr>
+        <tr><td><kbd class="key">Esc</kbd></td><td>リアクションするのをやめる</td><td>-</td></tr>
+    </tbody>
+</table>
diff --git a/src/docs/ru-RU/features/mfm.md b/src/docs/ru-RU/features/mfm.md
new file mode 100644
index 0000000000..5be2df4f30
--- /dev/null
+++ b/src/docs/ru-RU/features/mfm.md
@@ -0,0 +1,12 @@
+# MFM
+MFMは、Misskey Flavored Markdownの略で、Misskeyの様々な場所で使用できる専用のマークアップ言語です。 MFMで使用可能な構文は[MFMチートシート](/mfm-cheat-sheet)で確認できます。
+
+## MFMが使用可能な場所の例
+- ノート本文
+- CW注釈
+- ユーザーの名前
+- ユーザーの自己紹介
+
+## 開発者向け情報
+MFMのパーサー実装はライブラリとして公開されており、簡単にクライアントにMFMを組み込むことが可能です。
+- [misskey-dev/mfm.js](https://github.com/misskey-dev/mfm.js) - JavaScriptパーサー実装
diff --git a/src/docs/ru-RU/features/mute.md b/src/docs/ru-RU/features/mute.md
new file mode 100644
index 0000000000..78a4bf3eb3
--- /dev/null
+++ b/src/docs/ru-RU/features/mute.md
@@ -0,0 +1,13 @@
+# Скрыть
+
+ユーザーをミュートすると、そのユーザーに関する次のコンテンツがMisskeyに表示されなくなります:
+
+* タイムラインや投稿の検索結果内の、そのユーザーの投稿(およびそれらの投稿に対する返信やRenote)
+* そのユーザーからの通知
+* メッセージ履歴一覧内の、そのユーザーとのメッセージ履歴
+
+ユーザーをミュートするには、対象のユーザーのユーザーページに表示されている「ミュート」ボタンを押します。
+
+ミュートを行ったことは相手に通知されず、ミュートされていることを知ることもできません。
+
+設定>ミュート から、自分がミュートしているユーザー一覧を確認することができます。
diff --git a/src/docs/ru-RU/features/note.md b/src/docs/ru-RU/features/note.md
new file mode 100644
index 0000000000..9fcc7eeb00
--- /dev/null
+++ b/src/docs/ru-RU/features/note.md
@@ -0,0 +1,51 @@
+# Заметки
+ノートは、Misskeyに投稿される、文章、ファイル、アンケートなどを含むコンテンツで、Misskeyの中心的概念です。また、そのノートを作成する行為自体もノートと呼ばれます。
+
+ノートが作成されると、[タイムライン](./timeline)に追加され、自分の[フォロワー](./follow)やサーバーのユーザーが見れるようになります。
+
+ノートには、[リアクション](./reaction)を行うことができます。また、返信や引用もできます。
+
+ノートを[お気に入り](./favorite)登録することで、後で簡単に見返すことができます。
+
+## ノートを作成する
+ノートを作成するには、画面上にある鉛筆マークのボタンを押して、作成フォームを開きます。作成フォームに内容を入力し、「ノート」ボタンを押すことでノートが作成されます。 ノートには、画像、動画など任意のファイルや、[アンケート](./poll)を添付することができます。また、本文中には[MFM](./mfm)が使用でき、[メンション](./mention)や[ハッシュタグ](./hashtag)を含めることもできます。 他にも、CWや公開範囲といった設定も行えます(詳細は後述)。
+<div class="info">ℹ️ コンピューターのクリップボードに画像データがある状態で、フォーム内のテキストボックスにペーストするとその画像を添付することができます。</div>
+<div class="info">ℹ️ テキストボックス内で<kbd class="key">Ctrl + Enter</kbd>を押すことでも投稿できます。</div>
+
+## Репост
+既にあるノートを引用、もしくはそのノートを新しいノートとして共有する行為、またそれによって作成されたノートをRenoteと呼びます。 自分がフォローしているユーザーの、気に入ったノートを自分のフォロワーに共有したい場合や、過去の自分のノートを再度共有したい場合に使います。 同じノートに対して無制限にRenoteを行うことができますが、あまり連続して使用すると迷惑になる場合もあるので、注意しましょう。
+<div class="warn">⚠️ 公開範囲がフォロワーやダイレクトのノートはRenoteできません</div>
+
+Renoteを削除するには、Renoteの時刻表示の隣にある「...」を押し、「Renote解除」を選択します。
+
+## CW
+Contents Warningの略で、ノートの内容を、閲覧者の操作なしには表示しないようにできる機能です。主に長大な内容を隠すためや、ネタバレ防止などに使うことができます。 設定するには、フォームの「内容を隠す」ボタン(目のアイコン)を押します。すると新しい入力エリアが表れるので、そこに内容の要約を記入します。
+
+## Видимость
+ノートごとに、そのノートが公開される範囲を設定することができます。フォームの「ノート」ボタンの左にあるアイコンを押すと公開範囲を以下から選択できます。
+
+### Общедоступно
+全ての人に対してノートが公開されるほか、サーバーの全てのタイムライン(ホームタイムライン、ローカルタイムライン、ソーシャルタイムライン、グローバルタイムライン)にノートが流れます。
+<div class="warn">⚠️ アカウントが<a href="./silence">サイレンス</a>状態の時は、この公開範囲は使用できません。</div>
+
+### Главная
+全ての人に対してノートが公開されますが、フォロワー以外のローカルタイムライン、ソーシャルタイムライン、グローバルタイムラインにはノートは流れません。
+
+### Подписчики
+自分のフォロワーに対してのみノートを公開します。フォロワーの全てのタイムラインに流れます。
+
+### Личное
+指定したユーザーに対してのみノートを公開します。指定したユーザーの全てのタイムラインに流れます。
+
+### 「ローカルのみ」オプション
+このオプションを有効にすると、リモートにノートを連合しなくなります。
+
+### 公開範囲の比較
+<table>
+    <tr><th></th><th>Общедоступно</th><th>Главная</th><th>Подписчики</th><th>Личное</th></tr>
+    <tr><th>フォロワーのLTL/STL/GTL</th><td>✔</td><td>✔</td><td>✔</td><td></td></tr>
+    <tr><th>非フォロワーのLTL/STL/GTL</th><td>✔</td><td></td><td></td><td></td></tr>
+</table>
+
+## Закрепить в профиле
+ノートをピン留めすると、ユーザーページに常にそのノートを表示しておくことができます。 ノートのメニューを開き、「ピン留め」を選択してピン留めできます。 複数のノートをピン留めできます。
diff --git a/src/docs/ru-RU/features/pages.md b/src/docs/ru-RU/features/pages.md
new file mode 100644
index 0000000000..ea7b15c311
--- /dev/null
+++ b/src/docs/ru-RU/features/pages.md
@@ -0,0 +1,10 @@
+# Pages
+
+## Переменные
+変数を使うことで動的なページを作成できます。テキスト内で <b>{ 変数名 }</b> と書くとそこに変数の値を埋め込めます。例えば <b>Hello { thing } world!</b> というテキストで、変数(thing)の値が <b>ai</b> だった場合、テキストは <b>Hello ai world!</b> になります。
+
+変数の評価(値を算出すること)は上から下に行われるので、ある変数の中で自分より下の変数を参照することはできません。例えば上から <b>A、B、C</b> と3つの変数を定義したとき、<b>C</b>の中で<b>A</b>や<b>B</b>を参照することはできますが、<b>A</b>の中で<b>B</b>や<b>C</b>を参照することはできません。
+
+ユーザーからの入力を受け取るには、ページに「ユーザー入力」ブロックを設置し、「変数名」に入力を格納したい変数名を設定します(変数は自動で作成されます)。その変数を使ってユーザー入力に応じた動作を行えます。
+
+関数を使うと、値の算出処理を再利用可能な形にまとめることができます。関数を作るには、「関数」タイプの変数を作成します。関数にはスロット(引数)を設定することができ、スロットの値は関数内で変数として利用可能です。また、関数を引数に取る関数(高階関数と呼ばれます)も存在します。関数は予め定義しておくほかに、このような高階関数のスロットに即席でセットすることもできます。
diff --git a/src/docs/ru-RU/features/reaction.md b/src/docs/ru-RU/features/reaction.md
new file mode 100644
index 0000000000..6a6994df38
--- /dev/null
+++ b/src/docs/ru-RU/features/reaction.md
@@ -0,0 +1,11 @@
+# Реакции
+他の人のノートに、絵文字を付けて簡単にあなたの反応を伝えられる機能です。 リアクションするには、ノートの + アイコンをクリックしてピッカーを表示し、絵文字を選択します。 リアクションには[カスタム絵文字](./custom-emoji)も使用できます。
+
+## リアクションピッカーのカスタマイズ
+ピッカーに表示される絵文字を自分好みにカスタマイズすることができます。 設定の「リアクション」で設定します。
+
+## リモート投稿へのリアクションについて
+リアクションはMisskeyオリジナルの機能であるため、リモートインスタンスがMisskeyでない限りは、ほとんどの場合「Like」としてアクティビティが送信されます。一般的にはLikeは「お気に入り」として実装されているようです。
+
+## リモートからのリアクションについて
+リモートから「Like」アクティビティを受信したとき、Misskeyでは「👍」のリアクションとして解釈されます。
diff --git a/src/docs/ru-RU/features/silence.md b/src/docs/ru-RU/features/silence.md
new file mode 100644
index 0000000000..a5e1777889
--- /dev/null
+++ b/src/docs/ru-RU/features/silence.md
@@ -0,0 +1,6 @@
+# Заглушить
+サイレンスは、アカウントに設定される状態のひとつです。
+
+アカウントがサイレンス状態になると、ノートの公開範囲をパブリックにできなくなります。 ホーム、フォロワー、ダイレクトは選択可能なため、サイレンスを受けた場合でもフォロワーやあなたのユーザーページを直接訪れた場合は投稿を閲覧できますが、GTL(連合タイムライン)やLTL(ローカルタイムライン)には投稿が流れません。
+
+アカウントのサイレンス状態は、サーバーのモデレーターによって有効化/無効化されます。
diff --git a/src/docs/ru-RU/features/theme.md b/src/docs/ru-RU/features/theme.md
new file mode 100644
index 0000000000..e4661c1011
--- /dev/null
+++ b/src/docs/ru-RU/features/theme.md
@@ -0,0 +1,68 @@
+# Тема
+
+テーマを設定して、Misskeyクライアントの見た目を変更できます。
+
+## テーマの設定
+設定 > テーマ
+
+## テーマを作成する
+テーマコードはJSON5で記述されたテーマオブジェクトです。 テーマは以下のようなオブジェクトです。
+``` js
+{
+    id: '17587283-dd92-4a2c-a22c-be0637c9e22a',
+
+    name: 'Danboard',
+    author: 'syuilo',
+
+    base: 'light',
+
+    props: {
+        accent: 'rgb(218, 141, 49)',
+        bg: 'rgb(218, 212, 190)',
+        fg: 'rgb(115, 108, 92)',
+        panel: 'rgb(236, 232, 220)',
+        renote: 'rgb(100, 152, 106)',
+        link: 'rgb(100, 152, 106)',
+        mention: '@accent',
+        hashtag: 'rgb(100, 152, 106)',
+        header: 'rgba(239, 227, 213, 0.75)',
+        navBg: 'rgb(216, 206, 182)',
+        inputBorder: 'rgba(0, 0, 0, 0.1)',
+    },
+}
+
+```
+
+* `id` ... テーマの一意なID。UUIDをおすすめします。
+* `name` ... テーマ名
+* `author` ... テーマの作者
+* `desc` ... テーマの説明(オプション)
+* `base` ... 明るいテーマか、暗いテーマか
+    * `light`にすると明るいテーマになり、`dark`にすると暗いテーマになります。
+    * テーマはここで設定されたベーステーマを継承します。
+* `props` ... テーマのスタイル定義。これから説明します。
+
+### テーマのスタイル定義
+`props`下にはテーマのスタイルを定義します。 キーがCSSの変数名になり、バリューで中身を指定します。 なお、この`props`オブジェクトはベーステーマから継承されます。 ベーステーマは、このテーマの`base`が`light`なら[_light.json5](https://github.com/misskey-dev/misskey/blob/develop/src/client/themes/_light.json5)で、`dark`なら[_dark.json5](https://github.com/misskey-dev/misskey/blob/develop/src/client/themes/_dark.json5)です。 つまり、このテーマ内の`props`に`panel`というキーが無くても、そこにはベーステーマの`panel`があると見なされます。
+
+#### バリューで使える構文
+* 16進数で表された色
+    * 例: `#00ff00`
+* `rgb(r, g, b)`形式で表された色
+    * 例: `rgb(0, 255, 0)`
+* `rgb(r, g, b, a)`形式で表された透明度を含む色
+    * 例: `rgba(0, 255, 0, 0.5)`
+* 他のキーの値の参照
+    * `@{キー名}`と書くと他のキーの値の参照になります。`{キー名}`は参照したいキーの名前に置き換えます。
+    * 例: `@panel`
+* 定数(後述)の参照
+    * `${定数名}`と書くと定数の参照になります。`{定数名}`は参照したい定数の名前に置き換えます。
+    * 例: `$main`
+* 関数(後述)
+    * `:{関数名}<{引数}<{色}`
+
+#### Константа
+「CSS変数として出力はしたくないが、他のCSS変数の値として使いまわしたい」値があるときは、定数を使うと便利です。 キー名を`$`で始めると、そのキーはCSS変数として出力されません。
+
+#### Функции
+wip
diff --git a/src/docs/ru-RU/features/timeline.md b/src/docs/ru-RU/features/timeline.md
new file mode 100644
index 0000000000..ce4a4e830f
--- /dev/null
+++ b/src/docs/ru-RU/features/timeline.md
@@ -0,0 +1,31 @@
+# Лента
+タイムラインは、[ノート](./note)が時系列で表示される機能です。 タイムラインには以下で示す種類があり、種類によって表示されるノートも異なります。 なお、タイムラインの種類によってはサーバーにより無効になっている場合があります。
+
+## Главная
+自分のフォローしているユーザーの投稿が流れます。HTLと略されます。
+
+## Местная
+全てのローカルユーザーの「ホーム」指定されていない投稿が流れます。LTLと略されます。
+
+## Социальная
+自分のフォローしているユーザーの投稿と、全てのローカルユーザーの「ホーム」指定されていない投稿が流れます。STLと略されます。
+
+## Всеобщая
+全てのローカルユーザーの「ホーム」指定されていない投稿と、サーバーに届いた全てのリモートユーザーの「ホーム」指定されていない投稿が流れます。GTLと略されます。
+
+## Сравнение
+| ソース          |              |         | Лента   |            |          |
+| ------------ | ------------ | ------- | ------- | ---------- | -------- |
+| Пользователи | Видимость    | Главная | Местная | Социальная | Всеобщая |
+| ローカル (フォロー)  | Опубликовать | ✔       | ✔       | ✔          | ✔        |
+|              | Главная      | ✔       |         | ✔          |          |
+|              | Подписчики   | ✔       | ✔       | ✔          | ✔        |
+| リモート (フォロー)  | Опубликовать | ✔       |         | ✔          | ✔        |
+|              | Главная      | ✔       |         | ✔          |          |
+|              | Подписчики   | ✔       |         | ✔          | ✔        |
+| ローカル (未フォロー) | Опубликовать |         | ✔       | ✔          | ✔        |
+|              | Главная      |         |         |            |          |
+|              | Подписчики   |         |         |            |          |
+| リモート (未フォロー) | Опубликовать |         |         |            | ✔        |
+|              | Главная      |         |         |            |          |
+|              | Подписчики   |         |         |            |          |
diff --git a/src/docs/ru-RU/features/widgets.md b/src/docs/ru-RU/features/widgets.md
new file mode 100644
index 0000000000..4d841616a1
--- /dev/null
+++ b/src/docs/ru-RU/features/widgets.md
@@ -0,0 +1,7 @@
+# Виджеты
+ウィジェットは、MisskeyのUI上に設置できる小型の情報表示、操作が行えるパーツです。
+
+ウィジェットを編集するには、ウィジェット編集モードに切り替えます。切り替え方法はUIによって異なります。 ウィジェット編集モードでは、ウィジェットの追加、削除、並び替え、およびそれぞれのウィジェットの設定を行えます。
+
+## 利用可能なウィジェット一覧
+todo
diff --git a/src/docs/ru-RU/general/apps.md b/src/docs/ru-RU/general/apps.md
new file mode 100644
index 0000000000..1f4c85fe8f
--- /dev/null
+++ b/src/docs/ru-RU/general/apps.md
@@ -0,0 +1,6 @@
+# サードパーティアプリのリスト
+## クライアント
+todo
+
+## 連携サービス
+todo
diff --git a/src/docs/ru-RU/general/faq.md b/src/docs/ru-RU/general/faq.md
new file mode 100644
index 0000000000..ecb664e32e
--- /dev/null
+++ b/src/docs/ru-RU/general/faq.md
@@ -0,0 +1,22 @@
+# よくある質問
+ここでは利用上のよくある質問について掲載しています。 Misskeyのプロジェクト自体についてのよくある質問は[こちら](./misskey)に掲載されています。
+
+### iOS/Androidのアプリはありますか?
+公式にはそういったOSのネイティブアプリを開発していませんが、サードパーティ製のアプリがいくつかあります。 詳しくは[こちら](./apps)をご覧ください。
+
+ただ、サードパーティ製アプリはどうしても機能への対応が遅れてしまうため、とくに拘りがなければ公式のWebクライアントの利用をおすすめします。 なお、MisskeyのWebクライアントはPWAに対応しているので、ネイティブアプリのように動作させることも可能です。 詳しくは[こちら](todo)をご覧ください。
+
+## 他のサーバーのユーザーをフォローするときは?
+メニューから検索を選び、ユーザー名をホスト込みで入力します。例: `@syuilo@misskey.io`
+
+## Renoteを削除するには?
+Renoteの時刻表示の隣にある「...」を押し、「Renote解除」を選択します。 Renoteについては[こちら](../features/note)をご確認ください。
+
+## URLのプレビューを表示させたくない
+MFMには、そのURLのプレビューを無効にする構文があります。詳細は[MFMチートシート](/mfm-cheat-sheet)をご確認ください。
+
+## カスタム絵文字を追加したい
+運営者のみがカスタム絵文字を追加、編集、削除できます。それらを希望する場合は運営者に依頼してください。
+
+## Botを開発したい
+Misskey APIを利用してBotの開発が可能です。[こちら](../advanced/develop-bot)をご確認ください。
diff --git a/src/docs/ru-RU/general/glossary.md b/src/docs/ru-RU/general/glossary.md
new file mode 100644
index 0000000000..9ff9bd4589
--- /dev/null
+++ b/src/docs/ru-RU/general/glossary.md
@@ -0,0 +1,83 @@
+# 用語集
+Misskeyに関する用語集です。
+
+## AcitivityPub
+(読み: あくてぃびてぃぱぶ) 分散型を実現するために用いられるプロトコル(仕様)。このプロトコルに則ってサーバー同士通信を行うことで、連合が行われ、Fediverseを形成しています。
+
+## AiScript
+(読み: あいすくりぷと) Misskey上で使用できるプログラミング言語です。詳細は[こちら。](../advanced/aiscript)
+
+## API
+(読み: えーぴーあい) Misskeyのサーバーが公開している、プログラムからMisskeyを扱うためのインターフェース。詳細は[こちら。](../advanced/api)
+
+## Bot
+(読み: ぼっと) プログラムによって動作しているアカウント。
+
+## CW
+(読み: こんてんつわーにんぐ) Contents Warningの略。ノートの内容を、操作なしには表示しないようにできる機能。主に長大な内容を隠すためや、ネタバレ防止などに使われます。
+
+## Fediverse
+(読み: ふぇでぃばーす) Misskeyを含む様々な分散型ソフトウェアのサーバーで構成されたネットワーク。
+
+## GTL
+グローバルタイムライン(Global TimeLine)の略。タイムラインの詳細は[こちら。](../features/timeline)
+
+## HTL
+ホームタイムライン(Home TimeLine)の略。タイムラインの詳細は[こちら。](../features/timeline)
+
+## LTL
+ローカルタイムライン(Local TimeLine)の略。タイムラインの詳細は[こちら。](../features/timeline)
+
+## MFM
+(読み: えむえふえむ) Misskey Flavored Markdownの略で、Misskey上で使用できるマークアップ言語です。詳細は[こちら。](../features/mfm)
+
+## NSFW
+(読み: のっとせーふふぉーわーく) Not Safe For Workの略。画像を「閲覧注意」扱いにし、操作なしには表示しないようにすることができる機能。
+
+## Репост
+(読み: りのーと) 既にあるノートを引用、もしくはそのノートを新しいノートとして共有する行為、またそれによって作成されたノート。詳細は[こちら。](../features/note)
+
+## STL
+ソーシャルタイムライン(Social TimeLine)の略。タイムラインの詳細は[こちら。](../features/timeline)
+
+## 藍
+(読み: あい) Misskeyの看板娘(公式キャラクター)です。
+
+## アクティブユーザー
+インスタンスにアカウントを作っているユーザーのうち、現在も実際にサービスを利用しているユーザーのこと。
+
+## Инстанс
+todo
+
+## コントロールパネル
+インスタンスの設定画面のこと。
+
+## Сервер
+todo
+
+## Заглушить
+ノートをパブリックな公開範囲で投稿できなくされている状態。モデレーターの判断でユーザーごとに設定されます。詳細は[こちら。](../features/silence)
+
+## Заморозить
+アカウントが使用不可に設定されている状態。
+
+## Диск
+Misskeyにアップロードしたファイルを管理する機能。詳細は[こちら。](../features/drive)
+
+## Заметки
+Misskeyに投稿される、文章、ファイル、アンケートなどを含めることができるコンテンツ。詳細は[こちら。](../features/note)
+
+## ミスキスト
+Misskeyを使う人のこと。
+
+## Модератор
+スパムの凍結およびサイレンスや不適切な投稿の削除など、コミュニティ運営に関する権限を持つユーザー。
+
+## С других сайтов
+他サーバーのことを指します。リモートユーザーといったように接頭辞としても使われます。ローカルの逆です。
+
+## Федерация
+サーバー上で作成された情報が他のサーバーに伝わること。
+
+## Местная
+自サーバーのことを指します。ローカルユーザー、ローカルタイムラインといったように接頭辞としても使われます。リモートの逆です。
diff --git a/src/docs/ru-RU/general/links.md b/src/docs/ru-RU/general/links.md
new file mode 100644
index 0000000000..d6b16856fb
--- /dev/null
+++ b/src/docs/ru-RU/general/links.md
@@ -0,0 +1,5 @@
+# リンク集
+
+## ライブラリ
+- [misskey-dev/misskey.js](https://github.com/misskey-dev/misskey.js) - JavaScriptのMisskey SDK
+- [misskey-dev/mfm.js](https://github.com/misskey-dev/mfm.js) - JavaScriptのMFMパーサー実装
diff --git a/src/docs/ru-RU/general/misskey.md b/src/docs/ru-RU/general/misskey.md
new file mode 100644
index 0000000000..5ee0a9282f
--- /dev/null
+++ b/src/docs/ru-RU/general/misskey.md
@@ -0,0 +1,87 @@
+# О Misskey
+
+Misskeyはオープンソースの分散型マイクロブログプラットフォームプロジェクトです。 開発は日本でsyuiloによって2014年から開始されました。 ドライブ、リアクションなどの豊富な機能や、高いカスタマイズ性を備えたUIを持つことが特徴です。
+
+## 歴史
+開発当初は掲示板がメインのサービスでしたが、ユーザーが短文を投稿し、それを時系列で流れるタイムライン機能を追加したところ人気が高まり、徐々にそれがメインとして開発が進むようになりました。 当初は分散型ではありませんでしたが、2018年にAcitivityPubを実装し分散型になったことで、より多くの方に認知され利用されるサービスになり、現在に至ります。
+<div class="info">ℹ️ Misskeyという名前は、syuiloが当時聴いていたMay'nというアーティストの楽曲、Brain Diverの歌詞に由来します。</div>
+
+誰でも開発に参加することができ、現在でも活発に開発が続いています。
+
+## 分散型とは何か?
+
+<b>分散(distributed)型</b>とは、<b>非中央集権(decentralized)</b>とも呼ばれ、コミュニティが多数のサーバーに分散して存在し、それらが相互に<b>通信(連合、federation)</b>することでコンテンツ共有<b>ネットワーク(Fediverse)</b>を形成していることが特徴のサービスです。 単一のサーバーしか存在しない、もしくは複数存在しても互いに独立している場合は中央集権なサービスと言われ、例えばTwitterやFacebookなどほとんどのサービスがそれに該当します。 分散型のメリットは、自分に合った運営者やテーマのサーバーを選択できることです。自分でサーバーを作成することもできます。連合するおかげで、どのサーバーを選んでも、同じコミュニティにアクセスできます。
+
+## 常にオープンソース
+Misskeyはこれまでもこれからも、オープンソースであり続けます。オープンソースとは、簡単に言うと<b>ソフトウェアのソースコード(プログラム)が公開されている</b>ことです。ソースコードの修正や再配布が可能であることを定義に含めることもあります。 Misskeyのすべてのソースコードは[AGPL](https://github.com/misskey-dev/misskey/blob/develop/LICENSE)というオープンソースライセンスの下に[公開](https://github.com/misskey-dev)されていて、誰でも自由に閲覧、使用、修正、改変、再配布をすることができます。 オープンソースは、自分で好きなように変えたり、有害な処理が含まれていないことを確認することができたり、誰でも開発に参加できるなどの、様々なメリットがあります。 上述の分散型を実現するためにも、オープンソースであるということは必要不可欠な要素です。 再び引き合いに出しますが、TwitterやFacebookなどの利益を得ているほとんどのサービスはオープンソースではありません。
+
+<div class="info">ℹ️ 技術的に言うと、MisskeyのソースコードはGitで管理されていて、リポジトリは<a href="https://github.com/misskey-dev" target="_blank">GitHub上でホスティングされています。</a></div>
+
+## 開発に参加する、プロジェクトを支援する
+Misskeyを気に入っていただけたら、ぜひプロジェクトを支援してください。プロジェクトに貢献するには、以下で紹介するようにいろいろな方法があります。方法によっては開発のスキルは不要なので、誰でも気軽に参加し貢献することができます。いつでもお待ちしています。
+
+### 機能を追加したり、バグを修正する
+ソフトウェアエンジニアのスキルをお持ちの方であれば、ソースコードを編集する形でプロジェクトに貢献することができます。 貢献についてのガイドは[こちら](https://github.com/misskey-dev/misskey/blob/develop/CONTRIBUTING.md)です。
+
+### 議論に参加する
+新しい機能、または既存の機能について意見を述べたり、不具合を報告したりすることでも貢献できます。 そのようなディスカッションは[GitHub](https://github.com/misskey-dev)上か、[フォーラム](https://forum.misskey.io/)等で行われます。
+
+### テキストを翻訳する
+Misskeyは様々な言語に対応しています(i18n -internationalizationの略- と呼ばれます)。元の言語は基本的に日本語ですが、有志によって他の言語へと翻訳されています。 その翻訳作業に加わっていただくことでもMisskeyに貢献できます。 Misskeyは[Crowdinというサービスを使用して翻訳の管理を行っています。](https://crowdin.com/project/misskey)
+
+### 感想を投稿する
+不具合報告等だけではなく、Misskeyの良い点、楽しい点といったポジティブな意見もぜひ共有してください。開発の励みになり、それは間接的ですがプロジェクトへの貢献です。
+
+### ミスキストを増やす
+ミスキストとは、Misskeyを使用する人のことです。 知り合いに紹介するなどしてMisskeyを広めていただければ、ミスキストが増え開発のモチベーションが上がります。
+
+### 寄付をする
+Misskeyはビジネスではなく、利用は無料であるため、収益は皆様からの寄付のみです。(インスタンスによっては広告収入を得ているような場合もありますが、それは運営者の収入であり直接開発者への収入にはなりません) 寄付をしていただければ、今後も開発を続けることが可能になり、プロジェクトへの貢献になります。 寄付は基本的には[Patreon](https://www.patreon.com/syuilo)で受け付けています。 一定額寄付していただけると、Misskeyの[情報ページ](/about-misskey)に名前を記載することができます。
+
+また、サーバーの運営者も、基本的には収益を得ていません。サーバーの運営にはコストがかかるので、運営者の支援をすることもご検討ください。 開発には直接関係しませんが、サーバーがあってこそのプロジェクトなので、運営が維持されるというのは開発と同じくらい重要なことです。
+
+## クレジット
+Misskeyの開発者や、Misskeyに寄付をしてくださった方の一覧は[こちら](/about-misskey)で見ることができます。
+
+## よくある質問
+### プロジェクトは何を目指していますか?
+強いて言うと、漠然的になりますが広く使われる汎用的なプラットフォームになることを目指しています。 Misskeyは他のプロジェクトとは違い、何らかの思想(例えば、反中央集権)やビジョンに基づいて開発が行われているわけではなく、その点ではフラットです。 それが逆に、特定の方向性に縛られないフレキシブルさを生み出すことに繋がっていると感じています。
+<!-- TODO: ここにロードマップへのリンク -->
+
+### 企業によって開発されていますか?
+いいえ。Misskeyの開発は個人で行われており、商業的でもないため、特定の企業の関りはありません。 開発メンバーも基本的にはボランティアです。 また、開発に対し企業のスポンサーがつくこともありますが、その場合でもやはり開発は個人のコミュニティが主体です。
+
+### 誰が運営していますか?
+Misskeyは分散型なため、各サーバーにそれぞれ異なった運営者がいます。従って、特定の個人や企業によって、Misskeyの全てが運営されているわけではありません。 また、開発チームが運営を行うわけでもないため、運営に関する連絡は、お使いのサーバーの運営者に行ってください。 サーバーの運営者は、[このページ](/about)で確認することができます。 あなたがサーバーを作成すれば、あなたが運営者になります。
+
+### どのサーバーを選べばいいですか?
+[サーバー一覧が公開されています。](https://join.misskey.page/ja-JP/instances) サーバーによってコミュニティのテーマ(特定のこと、ものが好き 等)が決められている場合があるので、自分に合ったテーマのサーバーがあれば、そこを選ぶと良いかもしれません。 他にも、サーバーの規模、ユーザー層、国および言語、運営者が信頼できるかどうか、などの観点があります。 なお、Misskey公式のサーバーというものはありません。自身で新しくサーバーを作成するという選択肢もあります。
+
+基本的にどのサーバーを選んだとしても、他の全てのサーバーのユーザーと繋がることができます。
+
+### サーバーを建てるにはどうしたらいいですか?
+Misskeyサーバーの作成に興味を持っていただきありがとうございます。 2021年現在、Misskeyのホスティングサービスは存在しないため、サーバーの作成にはある程度の知識が必要です。 サーバーの作成方法については[こちら](todo)をご覧ください。
+
+### どのような技術を使用していますか?
+Misskeyは開発が進むにつれ使用する技術も大きく変わってきました。開発当初はMySQL + PHP + jQueryといった構成でしたが、現在は以下のようになっています。
+- サーバーサイド: Node.js
+- データベース: PostgreSQL、Redis
+- UIフレームワーク: Vue.js
+- プログラミング言語: TypeScript
+
+また、MFMやAiScriptなどの、Misskeyから派生して独自の技術も開発しています。
+
+### Mastodonのフォークですか?
+いいえ。MisskeyはMastodonやその他のプロジェクトとは全く別のプロジェクトです。 開発に関しても、Misskeyの方が昔から開発されています。ただし、分散型になったのはMastodonの登場より後です。 同じAcitivityPubという分散のためのプロトコルを実装しているという点以外、両者に特に関りがあるわけでもありません。
+
+### iOS/Androidのアプリはありますか?
+公式にはそういったOSのネイティブアプリを開発していませんが、サードパーティ製のアプリがいくつかあります。 詳しくは[こちら](./apps)をご覧ください。
+
+ただ、サードパーティ製アプリはどうしても機能への対応が遅れてしまうため、とくに拘りがなければ公式のWebクライアントの利用をおすすめします。 なお、MisskeyのWebクライアントはPWAに対応しているので、ネイティブアプリのように動作させることも可能です。 詳しくは[こちら](todo)をご覧ください。
+
+### Misskeyのロゴ、アイコンはどこで入手できますか?
+(準備中)
+
+### 時折目にする猫耳の可愛い女の子は?
+Misskeyの守り神、藍ちゃんです。アイチャンカワイイヤッター!
+<div class="info">ℹ️ 藍ちゃんについては<a href="https://xn--931a.moe/" target="_blank">こちら</a>です。</div>
diff --git a/src/docs/ru-RU/general/report-issue.md b/src/docs/ru-RU/general/report-issue.md
new file mode 100644
index 0000000000..63527e32af
--- /dev/null
+++ b/src/docs/ru-RU/general/report-issue.md
@@ -0,0 +1,8 @@
+# 不具合の報告
+不具合と思われる状況に遭遇したときは、まず[トラブルシューティング](./troubleshooting)をご一読ください。 それでも問題が解決しないときは、以下の情報を含めて[フォーラム](https://forum.misskey.io/)に投稿してください。 投稿することで、解決策が見つかったり、不具合と判断されれば開発チームによって修正が行われます。
+
+## 含める情報
+- Misskeyのバージョン([情報ページ](/about)で確認できます)
+- お使いのブラウザの種類とバージョン
+- お使いのOSの種類とバージョン
+- 問題の再現手順
diff --git a/src/docs/ru-RU/general/troubleshooting.md b/src/docs/ru-RU/general/troubleshooting.md
new file mode 100644
index 0000000000..4a35091299
--- /dev/null
+++ b/src/docs/ru-RU/general/troubleshooting.md
@@ -0,0 +1,36 @@
+# トラブルシューティング
+<div class="info">ℹ️ <a href="./faq">よくある質問</a>も合わせてお役立てください。</div>
+
+問題が発生したときは、まずこちらをご確認ください。 該当する項目が無い、もしくは手順を試しても効果がない場合は、サーバーの管理者に連絡するか[不具合を報告](./report-issue)してください。
+
+## クライアントが起動しない
+ほとんどの場合、お使いのブラウザまたはOSのバージョンが古いことが原因です。 ブラウザおよびOSのバージョンを最新のものに更新してから、再度試してみてください。
+
+これは稀ですが、それでも起動しない場合は、キャッシュが原因の場合があります。ブラウザのキャッシュをクリアして、再度試してみてください。
+
+## ページが読み込めない
+クライアントが起動するもののページが読み込めないというエラーが出る場合は、ネットワークに問題がないか確認してください。また、サーバーがダウンしていないか確認してください。
+
+これは稀ですが、キャッシュが原因の場合があります。ブラウザのキャッシュをクリアして、再度試してみてください。
+
+まだ問題がある場合は、サーバーの問題と思われるのでサーバーの管理者に連絡してください。
+
+## クライアントの動作が遅い
+以下を試してみてください:
+
+- クライアント設定で「UIのアニメーションを減らす」を有効にする
+- クライアント設定で「モーダルにぼかし効果を使用」を無効にする
+- お使いのブラウザの設定でハードウェアアクセラレーションを有効にする
+- お使いのデバイスのスペックを上げる
+
+## 通知やアンテナ等の点滅が消えない
+点滅は、未読のコンテンツがあることを示しています。通常点滅が消えない場合は、コンテンツを遡ると未読なコンテンツが残っています。 すべて既読にしたと思われるのに、それでもなお点滅が続く場合(おそらく不具合と思われます)は設定から強制的にすべて既読扱いにすることができます。
+
+## Renoteができない
+フォロワー限定のノートはRenoteすることはできません。
+
+## UI上で特定の要素が表示されない
+広告ブロッカーを使用しているとそのような不具合が発生することがあります。Misskeyではオフにしてご利用ください。
+
+## UI上で未翻訳の部分がある
+ほとんどの場合、単に翻訳が間に合っていないだけで、不具合ではありません。翻訳が終わるまでお待ちください。 [翻訳に参加](./misskey)していただくことも可能です。
diff --git a/src/docs/th-TH/admin/disable-timelines.md b/src/docs/th-TH/admin/disable-timelines.md
new file mode 100644
index 0000000000..b081e35ab0
--- /dev/null
+++ b/src/docs/th-TH/admin/disable-timelines.md
@@ -0,0 +1,8 @@
+# LTL/STL/GTLの無効化
+Misskeyでは、LTL/STL/GTLをそれぞれ無効化することができます。有効/無効を切り替えるには、インスタンスコントロールパネルで設定します。
+
+LTLやSTLは、そのインスタンス全員の投稿が見れるため、新規のユーザーにとってはユーザーを探す必要がなくなり、興味のあるユーザーを見つけやすいという利点があります。 しかし同時に、フォロー機能が活用されなくなったり、不適切な投稿が目につきやすくなったり、チャットのようになることで内輪感が生じて逆に新規ユーザーが参加しにくくなるといったデメリットも持ち合わせています。 サーバーによってメリット/デメリットどちらが優勢かは異なるので、オプションとして無効にできるようになっています。 もしデメリットの方が上回っていると感じたら、それらのタイムラインを無効化することも検討してください。
+
+<div class="warn">⚠️ 無効化を行うと、ユーザーが困惑し、短期的に見て利用者が減る可能性があります。そのため、無効化の際は影響を慎重に検討し、事前に説明してフォローを整える期間を一定程度設けることを推奨します。</div>
+
+なお、管理者/モデレーターは、これらのタイムラインの無効化状態は適用されず、引き続き利用することが可能です。
diff --git a/src/docs/th-TH/admin/faq.md b/src/docs/th-TH/admin/faq.md
new file mode 100644
index 0000000000..317b4e0655
--- /dev/null
+++ b/src/docs/th-TH/admin/faq.md
@@ -0,0 +1,5 @@
+# よくある質問
+ここでは、サーバー管理者向けのよくある質問を掲載しています。
+
+## デフォルトテーマを設定したい
+現在、デフォルトテーマ設定機能は実装されていません。
diff --git a/src/docs/th-TH/advanced/aiscript.md b/src/docs/th-TH/advanced/aiscript.md
new file mode 100644
index 0000000000..604d17daa8
--- /dev/null
+++ b/src/docs/th-TH/advanced/aiscript.md
@@ -0,0 +1,7 @@
+# AiScript
+AiScriptは、Misskeyで使用できるスクリプト言語です。
+
+<div class="info">ℹ️ AiScript実装はMisskeyとは別リポジトリで、<a href="https://github.com/syuilo/aiscript" target="_blank">オープンソースで公開されています。</a></div>
+
+## 使い方
+AiScriptの構文や組み込み関数などのドキュメントは、[こちら](https://github.com/syuilo/aiscript/tree/master/docs)で公開されています。
diff --git a/src/docs/th-TH/advanced/api.md b/src/docs/th-TH/advanced/api.md
new file mode 100644
index 0000000000..76019b6145
--- /dev/null
+++ b/src/docs/th-TH/advanced/api.md
@@ -0,0 +1,58 @@
+# Misskey API
+
+MisskeyAPIを使ってMisskeyクライアント、Misskey連携Webサービス、Bot等(以下「アプリケーション」と呼びます)を開発できます。 ストリーミングAPIもあるので、リアルタイム性のあるアプリケーションを作ることも可能です。
+
+APIを使い始めるには、まずアクセストークンを取得する必要があります。 このドキュメントでは、アクセストークンを取得する手順を説明した後、基本的なAPIの使い方を説明します。
+
+## アクセストークンの取得
+基本的に、APIはリクエストにはアクセストークンが必要となります。 APIにリクエストするのが自分自身なのか、不特定の利用者に使ってもらうアプリケーションなのかによって取得手順は異なります。
+
+* 前者の場合: [「自分自身のアクセストークンを手動発行する」](#自分自身のアクセストークンを手動発行する)に進む
+* 後者の場合: [「アプリケーション利用者にアクセストークンの発行をリクエストする」](#アプリケーション利用者にアクセストークンの発行をリクエストする)に進む
+
+### 自分自身のアクセストークンを手動発行する
+「設定 > API」で、自分のアクセストークンを発行できます。
+
+[「APIの使い方」へ進む](#APIの使い方)
+
+### アプリケーション利用者にアクセストークンの発行をリクエストする
+アプリケーション利用者のアクセストークンを取得するには、以下の手順で発行をリクエストします。
+
+#### Step 1
+
+UUIDを生成する。以後これをセッションIDと呼びます。
+
+> このセッションIDは毎回生成し、使いまわさないようにしてください。
+
+#### Step 2
+
+`{_URL_}/miauth/{session}`をユーザーのブラウザで表示させる。`{session}`の部分は、セッションIDに置き換えてください。
+> 例: `{_URL_}/miauth/c1f6d42b-468b-4fd2-8274-e58abdedef6f`
+
+表示する際、URLにクエリパラメータとしていくつかのオプションを設定できます:
+* `name` ... アプリケーション名
+    * > 例: `MissDeck`
+* `icon` ... アプリケーションのアイコン画像URL
+    * > 例: `https://missdeck.example.com/icon.png`
+* `callback` ... 認証が終わった後にリダイレクトするURL
+    * > 例: `https://missdeck.example.com/callback`
+    * リダイレクト時には、`session`というクエリパラメータでセッションIDが付きます
+* `permission` ... アプリケーションが要求する権限
+    * > 例: `write:notes,write:following,read:drive`
+    * 要求する権限を`,`で区切って列挙します
+    * どのような権限があるかは[APIリファレンス](/api-doc)で確認できます
+
+#### Step 3
+ユーザーが発行を許可した後、`{_URL_}/api/miauth/{session}/check`にPOSTリクエストすると、レスポンスとしてアクセストークンを含むJSONが返ります。
+
+レスポンスに含まれるプロパティ:
+* `token` ... ユーザーのアクセストークン
+* `user` ... ユーザーの情報
+
+[「APIの使い方」へ進む](#APIの使い方)
+
+## APIの使い方
+**APIはすべてPOSTで、リクエスト/レスポンスともにJSON形式です。RESTではありません。** アクセストークンは、`i`というパラメータ名でリクエストに含めます。
+
+* [APIリファレンス](/api-doc)
+* [ストリーミングAPI](./stream)
diff --git a/src/docs/th-TH/advanced/create-plugin.md b/src/docs/th-TH/advanced/create-plugin.md
new file mode 100644
index 0000000000..0d2fa19178
--- /dev/null
+++ b/src/docs/th-TH/advanced/create-plugin.md
@@ -0,0 +1,74 @@
+# プラグインの作成
+Misskey Webクライアントのプラグイン機能を使うと、クライアントを拡張し、様々な機能を追加できます。 ここではプラグインの作成にあたってのメタデータ定義や、AiScript APIリファレンスを掲載します。
+
+## メタデータ
+プラグインは、AiScriptのメタデータ埋め込み機能を使って、デフォルトとしてプラグインのメタデータを定義する必要があります。 メタデータは次のプロパティを含むオブジェクトです。
+
+### name
+プラグイン名
+
+### author
+プラグイン作者
+
+### version
+プラグインバージョン。数値を指定してください。
+
+### description
+プラグインの説明
+
+### permissions
+プラグインが要求する権限。MisskeyAPIにリクエストする際に用いられます。
+
+### config
+プラグインの設定情報を表すオブジェクト。 キーに設定名、値に以下のプロパティを含めます。
+
+#### type
+設定値の種類を表す文字列。以下から選択します。 string number boolean
+
+#### label
+ユーザーに表示する設定名
+
+#### description
+設定の説明
+
+#### default
+設定のデフォルト値
+
+## APIリファレンス
+AiScript標準で組み込まれているAPIは掲載しません。
+
+### Mk:dialog(title text type)
+ダイアログを表示します。typeには以下の値が設定できます。 info success warn error question 省略すると info になります。
+
+### Mk:confirm(title text type)
+確認ダイアログを表示します。typeには以下の値が設定できます。 info success warn error question 省略すると question になります。 ユーザーが"OK"を選択した場合は true を、"キャンセル"を選択した場合は false が返ります。
+
+### Mk:api(endpoint params)
+Misskey APIにリクエストします。第一引数にエンドポイント名、第二引数にパラメータオブジェクトを渡します。
+
+### Mk:save(key value)
+任意の値に任意の名前を付けて永続化します。永続化した値は、AiScriptコンテキストが終了しても残り、Mk:loadで読み取ることができます。
+
+### Mk:load(key)
+Mk:saveで永続化した指定の名前の値を読み取ります。
+
+### Plugin:register_post_form_action(title fn)
+投稿フォームにアクションを追加します。第一引数にアクション名、第二引数にアクションが選択された際のコールバック関数を渡します。 コールバック関数には、第一引数に投稿フォームオブジェクトが渡されます。
+
+### Plugin:register_note_action(title fn)
+ノートメニューに項目を追加します。第一引数に項目名、第二引数に項目が選択された際のコールバック関数を渡します。 コールバック関数には、第一引数に対象のノートオブジェクトが渡されます。
+
+### Plugin:register_user_action(title fn)
+ユーザーメニューに項目を追加します。第一引数に項目名、第二引数に項目が選択された際のコールバック関数を渡します。 コールバック関数には、第一引数に対象のユーザーオブジェクトが渡されます。
+
+### Plugin:register_note_view_interruptor(fn)
+UIに表示されるノート情報を書き換えます。 コールバック関数には、第一引数に対象のノートオブジェクトが渡されます。 コールバック関数の返り値でノートが書き換えられます。
+
+### Plugin:register_note_post_interruptor(fn)
+ノート投稿時にノート情報を書き換えます。 コールバック関数には、第一引数に対象のノートオブジェクトが渡されます。 コールバック関数の返り値でノートが書き換えられます。
+
+### Plugin:open_url(url)
+第一引数に渡されたURLをブラウザの新しいタブで開きます。
+
+### Plugin:config
+プラグインの設定が格納されるオブジェクト。プラグイン定義のconfigで設定したキーで値が入ります。
diff --git a/src/docs/th-TH/advanced/develop-bot.md b/src/docs/th-TH/advanced/develop-bot.md
new file mode 100644
index 0000000000..7f825e9bc4
--- /dev/null
+++ b/src/docs/th-TH/advanced/develop-bot.md
@@ -0,0 +1,6 @@
+# Botの作成
+[Misskey API](./api)を利用してBotの開発が可能です。 また、いくつかのBot実装が公開されているため、ぜひ参考にしてください。
+
+- [syuilo/ai](https://github.com/syuilo/ai) ... Node.js上で動く、TypeScript製Bot実装
+
+Botを作成したときは、プロフィール設定からBotフラグをオンにしておくことを強くおすすめします。
diff --git a/src/docs/th-TH/advanced/reversi-bot.md b/src/docs/th-TH/advanced/reversi-bot.md
new file mode 100644
index 0000000000..7ab2a7212e
--- /dev/null
+++ b/src/docs/th-TH/advanced/reversi-bot.md
@@ -0,0 +1,160 @@
+# MisskeyリバーシBotの開発
+Misskeyのリバーシ機能に対応したBotの開発方法をここに記します。
+
+1. `games/reversi`ストリームに以下のパラメータを付けて接続する:
+    * `i`: botアカウントのAPIキー
+
+2. 対局への招待が来たら、ストリームから`invited`イベントが流れてくる
+    * イベントの中身に、`parent`という名前で対局へ誘ってきたユーザーの情報が含まれている
+
+3. `games/reversi/match`へ、`user_id`として`parent`の`id`が含まれたリクエストを送信する
+
+4. 上手くいくとゲーム情報が返ってくるので、`games/reversi-game`ストリームへ、以下のパラメータを付けて接続する:
+    * `i`: botアカウントのAPIキー
+    * `game`: `game`の`id`
+
+5. この間、相手がゲームの設定を変更するとその都度`update-settings`イベントが流れてくるので、必要であれば何かしらの処理を行う
+
+6. 設定に満足したら、`{ type: 'accept' }`メッセージをストリームに送信する
+
+7. ゲームが開始すると、`started`イベントが流れてくる
+    * イベントの中身にはゲーム情報が含まれている
+
+8. 石を打つには、ストリームに`{ type: 'set', pos: <位置> }`を送信する(位置の計算方法は後述)
+
+9. 相手または自分が石を打つと、ストリームから`set`イベントが流れてくる
+    * `color`として石の色が含まれている
+    * `pos`として位置情報が含まれている
+
+## 位置の計算法
+8x8のマップを考える場合、各マスの位置(インデックスと呼びます)は次のようになっています:
+```
++--+--+--+--+--+--+--+--+
+| 0| 1| 2| 3| 4| 5| 6| 7|
++--+--+--+--+--+--+--+--+
+| 8| 9|10|11|12|13|14|15|
++--+--+--+--+--+--+--+--+
+|16|17|18|19|20|21|22|23|
+...
+```
+
+### X,Y座標 から インデックス に変換する
+```
+pos = x + (y * mapWidth)
+```
+`mapWidth`は、ゲーム情報の`map`から、次のようにして計算できます:
+```
+mapWidth = map[0].length
+```
+
+### インデックス から X,Y座標 に変換する
+```
+x = pos % mapWidth
+y = Math.floor(pos / mapWidth)
+```
+
+## マップ情報
+マップ情報は、ゲーム情報の`map`に入っています。 文字列の配列になっており、ひとつひとつの文字がマス情報を表しています。 それをもとにマップのデザインを知る事が出来ます:
+* `(スペース)` ... マス無し
+* `-` ... マス
+* `b` ... 初期配置される黒石
+* `w` ... 初期配置される白石
+
+例えば、4*4の次のような単純なマップがあるとします:
+```text
++---+---+---+---+
+|   |   |   |   |
++---+---+---+---+
+|   | ○ | ● |   |
++---+---+---+---+
+|   | ● | ○ |   |
++---+---+---+---+
+|   |   |   |   |
++---+---+---+---+
+```
+
+この場合、マップデータはこのようになります:
+```javascript
+['----', '-wb-', '-bw-', '----']
+```
+
+## ユーザーにフォームを提示して対話可能Botを作成する
+ユーザーとのコミュニケーションを行うため、ゲームの設定画面でユーザーにフォームを提示することができます。 例えば、Botの強さをユーザーが設定できるようにする、といったシナリオが考えられます。
+
+フォームを提示するには、`reversi-game`ストリームに次のメッセージを送信します:
+```javascript
+{
+  type: 'init-form',
+  body: [フォームコントロールの配列]
+}
+```
+
+フォームコントロールの配列については今から説明します。 フォームコントロールは、次のようなオブジェクトです:
+```javascript
+{
+  id: 'switch1',
+  type: 'switch',
+  label: 'Enable hoge',
+  value: false
+}
+```
+`id` ... コントロールのID。 `type` ... コントロールの種類。後述します。 `label` ... コントロールと一緒に表記するテキスト。 `value` ... コントロールのデフォルト値。
+
+### フォームの操作を受け取る
+ユーザーがフォームを操作すると、ストリームから`update-form`イベントが流れてきます。 イベントの中身には、コントロールのIDと、ユーザーが設定した値が含まれています。 例えば、上で示したスイッチをユーザーがオンにしたとすると、次のイベントが流れてきます:
+```javascript
+{
+  id: 'switch1',
+  value: true
+}
+```
+
+### フォームコントロールの種類
+#### スイッチ
+type: `switch` スイッチを表示します。何かの機能をオン/オフさせたい場合に有用です。
+
+##### プロパティ
+`label` ... スイッチに表記するテキスト。
+
+#### ラジオボタン
+type: `radio` ラジオボタンを表示します。選択肢を提示するのに有用です。例えば、Botの強さを設定させるなどです。
+
+##### プロパティ
+`items` ... ラジオボタンの選択肢。例:
+```javascript
+items: [{
+  label: 'å¼±',
+  value: 1
+}, {
+  label: '中',
+  value: 2
+}, {
+  label: 'å¼·',
+  value: 3
+}]
+```
+
+#### スライダー
+type: `slider` スライダーを表示します。
+
+##### プロパティ
+`min` ... スライダーの下限。 `max` ... スライダーの上限。 `step` ... 入力欄で刻むステップ値。
+
+#### テキストボックス
+type: `textbox` テキストボックスを表示します。ユーザーになにか入力させる一般的な用途に利用できます。
+
+## ユーザーにメッセージを表示する
+設定画面でユーザーと対話する、フォーム以外のもうひとつの方法がこれです。ユーザーになにかメッセージを表示することができます。 例えば、ユーザーがBotの対応していないモードやマップを選択したとき、警告を表示するなどです。 メッセージを表示するには、次のメッセージをストリームに送信します:
+```javascript
+{
+  type: 'message',
+  body: {
+    text: 'メッセージ内容',
+    type: 'メッセージの種類'
+  }
+}
+```
+メッセージの種類: `success`, `info`, `warning`, `error`。
+
+## 投了する
+投了をするには、<a href="./api/endpoints/games/reversi/games/surrender">このエンドポイント</a>にリクエストします。
diff --git a/src/docs/th-TH/advanced/stream.md b/src/docs/th-TH/advanced/stream.md
new file mode 100644
index 0000000000..0e5edd2b0c
--- /dev/null
+++ b/src/docs/th-TH/advanced/stream.md
@@ -0,0 +1,350 @@
+# ストリーミングAPI
+
+ストリーミングAPIを使うと、リアルタイムで様々な情報(例えばタイムラインに新しい投稿が流れてきた、メッセージが届いた、フォローされた、など)を受け取ったり、様々な操作を行ったりすることができます。
+
+## ストリームに接続する
+
+ストリーミングAPIを利用するには、まずMisskeyサーバーに**websocket**接続する必要があります。
+
+以下のURLに、`i`というパラメータ名で認証情報を含めて、websocket接続してください。例:
+```
+%WS_URL%/streaming?i=xxxxxxxxxxxxxxx
+```
+
+認証情報は、自分のAPIキーや、アプリケーションからストリームに接続する際はユーザーのアクセストークンのことを指します。
+
+<div class="info">ℹ️ 認証情報の取得については、<a href="./api">こちらのドキュメント</a>をご確認ください。</div>
+
+---
+
+認証情報は省略することもできますが、その場合非ログインでの利用ということになり、受信できる情報や可能な操作は限られます。例:
+
+```
+%WS_URL%/streaming
+```
+
+---
+
+ストリームに接続すると、後述するAPI操作や、投稿の購読を行ったりすることができます。 しかしまだこの段階では、例えばタイムラインへの新しい投稿を受信したりすることはできません。 それを行うには、ストリーム上で、後述する**チャンネル**に接続する必要があります。
+
+**ストリームでのやり取りはすべてJSONです。**
+
+## チャンネル
+MisskeyのストリーミングAPIにはチャンネルという概念があります。これは、送受信する情報を分離するための仕組みです。 Misskeyのストリームに接続しただけでは、まだリアルタイムでタイムラインの投稿を受信したりはできません。 ストリーム上でチャンネルに接続することで、様々な情報を受け取ったり情報を送信したりすることができるようになります。
+
+ひとつのストリーム上で、同時に複数のチャンネルに接続することができます。
+
+### チャンネルに接続する
+チャンネルに接続するには、次のようなデータをJSONでストリームに送信します:
+
+```json
+{
+    type: 'connect',
+    body: {
+        channel: 'xxxxxxxx',
+        id: 'foobar',
+        params: {
+            ...
+        }
+    }
+}
+```
+
+ここで、
+* `channel`には接続したいチャンネル名を設定します。チャンネルの種類については後述します。
+* `id`にはそのチャンネルとやり取りするための任意のIDを設定します。ストリームでは様々なメッセージが流れるので、そのメッセージがどのチャンネルからのものなのか識別する必要があるからです。このIDは、UUIDや、乱数のようなもので構いません。
+* `params`はチャンネルに接続する際のパラメータです。チャンネルによって接続時に必要とされるパラメータは異なります。パラメータ不要のチャンネルに接続する際は、このプロパティは省略可能です。
+
+<div class="info">ℹ️ IDはチャンネルごとではなく「チャンネルの接続ごと」です。なぜなら、同じチャンネルに異なるパラメータで複数接続するケースもあるからです。</div>
+
+### チャンネルからのメッセージを受け取る
+例えばタイムラインのチャンネルなら、新しい投稿があった時にメッセージを発します。そのメッセージを受け取ることで、タイムラインに新しい投稿がされたことをリアルタイムで知ることができます。
+
+チャンネルがメッセージを発すると、次のようなデータがJSONでストリームに流れてきます:
+```json
+{
+    type: 'channel',
+    body: {
+        id: 'foobar',
+        type: 'something',
+        body: {
+            some: 'thing'
+        }
+    }
+}
+```
+
+ここで、
+* `id`には前述したそのチャンネルに接続する際に設定したIDが設定されています。これで、このメッセージがどのチャンネルからのものなのか知ることができます。
+* `type`にはメッセージの種類が設定されます。チャンネルによって、どのような種類のメッセージが流れてくるかは異なります。
+* `body`にはメッセージの内容が設定されます。チャンネルによって、どのような内容のメッセージが流れてくるかは異なります。
+
+### チャンネルに向けてメッセージを送信する
+チャンネルによっては、メッセージを受け取るだけでなく、こちらから何かメッセージを送信し、何らかの操作を行える場合があります。
+
+チャンネルにメッセージを送信するには、次のようなデータをJSONでストリームに送信します:
+```json
+{
+    type: 'channel',
+    body: {
+        id: 'foobar',
+        type: 'something',
+        body: {
+            some: 'thing'
+        }
+    }
+}
+```
+
+ここで、
+* `id`には前述したそのチャンネルに接続する際に設定したIDを設定します。これで、このメッセージがどのチャンネルに向けたものなのか識別させることができます。
+* `type`にはメッセージの種類を設定します。チャンネルによって、どのような種類のメッセージを受け付けるかは異なります。
+* `body`にはメッセージの内容を設定します。チャンネルによって、どのような内容のメッセージを受け付けるかは異なります。
+
+### チャンネルから切断する
+チャンネルから切断するには、次のようなデータをJSONでストリームに送信します:
+
+```json
+{
+    type: 'disconnect',
+    body: {
+        id: 'foobar'
+    }
+}
+```
+
+ここで、
+* `id`には前述したそのチャンネルに接続する際に設定したIDを設定します。
+
+## ストリームを経由してAPIリクエストする
+
+ストリームを経由してAPIリクエストすると、HTTPリクエストを発生させずにAPIを利用できます。そのため、コードを簡潔にできたり、パフォーマンスの向上を見込めるかもしれません。
+
+ストリームを経由してAPIリクエストするには、次のようなデータをJSONでストリームに送信します:
+```json
+{
+    type: 'api',
+    body: {
+        id: 'xxxxxxxxxxxxxxxx',
+        endpoint: 'notes/create',
+        data: {
+            text: 'yee haw!'
+        }
+    }
+}
+```
+
+ここで、
+* `id`には、APIのレスポンスを識別するための、APIリクエストごとの一意なIDを設定する必要があります。UUIDや、簡単な乱数のようなもので構いません。
+* `endpoint`には、あなたがリクエストしたいAPIのエンドポイントを指定します。
+* `data`には、エンドポイントのパラメータを含めます。
+
+<div class="info">ℹ️ APIのエンドポイントやパラメータについてはAPIリファレンスをご確認ください。</div>
+
+### レスポンスの受信
+
+APIへリクエストすると、レスポンスがストリームから次のような形式で流れてきます。
+
+```json
+{
+    type: 'api:xxxxxxxxxxxxxxxx',
+    body: {
+        ...
+    }
+}
+```
+
+ここで、
+* `xxxxxxxxxxxxxxxx`の部分には、リクエストの際に設定された`id`が含まれています。これにより、どのリクエストに対するレスポンスなのか判別することができます。
+* `body`には、レスポンスが含まれています。
+
+## 投稿のキャプチャ
+
+Misskeyは投稿のキャプチャと呼ばれる仕組みを提供しています。これは、指定した投稿のイベントをストリームで受け取る機能です。
+
+例えばタイムラインを取得してユーザーに表示したとします。ここで誰かがそのタイムラインに含まれるどれかの投稿に対してリアクションしたとします。
+
+しかし、クライアントからするとある投稿にリアクションが付いたことなどは知る由がないため、リアルタイムでリアクションをタイムライン上の投稿に反映して表示するといったことができません。
+
+この問題を解決するために、Misskeyは投稿のキャプチャ機構を用意しています。投稿をキャプチャすると、その投稿に関するイベントを受け取ることができるため、リアルタイムでリアクションを反映させたりすることが可能になります。
+
+### 投稿をキャプチャする
+
+投稿をキャプチャするには、ストリームに次のようなメッセージを送信します:
+
+```json
+{
+    type: 'subNote',
+    body: {
+        id: 'xxxxxxxxxxxxxxxx'
+    }
+}
+```
+
+ここで、
+* `id`にキャプチャしたい投稿の`id`を設定します。
+
+このメッセージを送信すると、Misskeyにキャプチャを要請したことになり、以後、その投稿に関するイベントが流れてくるようになります。
+
+例えば投稿にリアクションが付いたとすると、次のようなメッセージが流れてきます:
+
+```json
+{
+    type: 'noteUpdated',
+    body: {
+        id: 'xxxxxxxxxxxxxxxx',
+        type: 'reacted',
+        body: {
+            reaction: 'like',
+            userId: 'yyyyyyyyyyyyyyyy'
+        }
+    }
+}
+```
+
+ここで、
+* `body`内の`id`に、イベントを発生させた投稿のIDが設定されます。
+* `body`内の`type`に、イベントの種類が設定されます。
+* `body`内の`body`に、イベントの詳細が設定されます。
+
+#### イベントの種類
+
+##### `reacted`
+その投稿にリアクションがされた時に発生します。
+
+* `reaction`に、リアクションの種類が設定されます。
+* `userId`に、リアクションを行ったユーザーのIDが設定されます。
+
+例:
+```json
+{
+    type: 'noteUpdated',
+    body: {
+        id: 'xxxxxxxxxxxxxxxx',
+        type: 'reacted',
+        body: {
+            reaction: 'like',
+            userId: 'yyyyyyyyyyyyyyyy'
+        }
+    }
+}
+```
+
+##### `deleted`
+その投稿が削除された時に発生します。
+
+* `deletedAt`に、削除日時が設定されます。
+
+例:
+```json
+{
+    type: 'noteUpdated',
+    body: {
+        id: 'xxxxxxxxxxxxxxxx',
+        type: 'deleted',
+        body: {
+            deletedAt: '2018-10-22T02:17:09.703Z'
+        }
+    }
+}
+```
+
+##### `pollVoted`
+その投稿に添付されたアンケートに投票された時に発生します。
+
+* `choice`に、選択肢IDが設定されます。
+* `userId`に、投票を行ったユーザーのIDが設定されます。
+
+例:
+```json
+{
+    type: 'noteUpdated',
+    body: {
+        id: 'xxxxxxxxxxxxxxxx',
+        type: 'pollVoted',
+        body: {
+            choice: 2,
+            userId: 'yyyyyyyyyyyyyyyy'
+        }
+    }
+}
+```
+
+### 投稿のキャプチャを解除する
+
+その投稿がもう画面に表示されなくなったりして、その投稿に関するイベントをもう受け取る必要がなくなったときは、キャプチャの解除を申請してください。
+
+次のメッセージを送信します:
+
+```json
+{
+    type: 'unsubNote',
+    body: {
+        id: 'xxxxxxxxxxxxxxxx'
+    }
+}
+```
+
+ここで、
+* `id`にキャプチャを解除したい投稿の`id`を設定します。
+
+このメッセージを送信すると、以後、その投稿に関するイベントは流れてこないようになります。
+
+# チャンネル一覧
+## `main`
+アカウントに関する基本的な情報が流れてきます。このチャンネルにパラメータはありません。
+
+### 流れてくるイベント一覧
+
+#### `renote`
+自分の投稿がRenoteされた時に発生するイベントです。自分自身の投稿をRenoteしたときは発生しません。
+
+#### `mention`
+誰かからメンションされたときに発生するイベントです。
+
+#### `readAllNotifications`
+自分宛ての通知がすべて既読になったことを表すイベントです。このイベントを利用して、「通知があることを示すアイコン」のようなものをオフにしたりする等のケースが想定されます。
+
+#### `meUpdated`
+自分の情報が更新されたことを表すイベントです。
+
+#### `follow`
+自分が誰かをフォローしたときに発生するイベントです。
+
+#### `unfollow`
+自分が誰かのフォローを解除したときに発生するイベントです。
+
+#### `followed`
+自分が誰かにフォローされたときに発生するイベントです。
+
+## `homeTimeline`
+ホームタイムラインの投稿情報が流れてきます。このチャンネルにパラメータはありません。
+
+### 流れてくるイベント一覧
+
+#### `note`
+タイムラインに新しい投稿が流れてきたときに発生するイベントです。
+
+## `localTimeline`
+ローカルタイムラインの投稿情報が流れてきます。このチャンネルにパラメータはありません。
+
+### 流れてくるイベント一覧
+
+#### `note`
+ローカルタイムラインに新しい投稿が流れてきたときに発生するイベントです。
+
+## `hybridTimeline`
+ソーシャルタイムラインの投稿情報が流れてきます。このチャンネルにパラメータはありません。
+
+### 流れてくるイベント一覧
+
+#### `note`
+ソーシャルタイムラインに新しい投稿が流れてきたときに発生するイベントです。
+
+## `globalTimeline`
+グローバルタイムラインの投稿情報が流れてきます。このチャンネルにパラメータはありません。
+
+### 流れてくるイベント一覧
+
+#### `note`
+グローバルタイムラインに新しい投稿が流れてきたときに発生するイベントです。
diff --git a/src/docs/th-TH/features/antenna.md b/src/docs/th-TH/features/antenna.md
new file mode 100644
index 0000000000..94ad9e4aea
--- /dev/null
+++ b/src/docs/th-TH/features/antenna.md
@@ -0,0 +1,4 @@
+# アンテナ
+アンテナは、自由に条件を設定して、合致するノートを自動で収集することができる機能です。
+
+条件を設定したアンテナが作成された状態で、条件に合致するノートが投稿されると、リアルタイムでそのアンテナのタイムラインにノートが追加されます。
diff --git a/src/docs/th-TH/features/custom-emoji.md b/src/docs/th-TH/features/custom-emoji.md
new file mode 100644
index 0000000000..ed2e92be16
--- /dev/null
+++ b/src/docs/th-TH/features/custom-emoji.md
@@ -0,0 +1,2 @@
+# カスタム絵文字
+カスタム絵文字は、インスタンスで用意された画像を絵文字のように使える機能です。 ノート、リアクション、チャット、自己紹介、名前などの場所で使うことができます。 カスタム絵文字をそれらの場所で使うには、絵文字ピッカーボタン(ある場合)を押すか、`:`を入力して絵文字サジェストを表示します。 テキスト内に`:foo:`のような形式の文字列が見つかると、`foo`の部分がカスタム絵文字名と解釈され、表示時には対応したカスタム絵文字に置き換わります。
diff --git a/src/docs/th-TH/features/deck.md b/src/docs/th-TH/features/deck.md
new file mode 100644
index 0000000000..8057e262fd
--- /dev/null
+++ b/src/docs/th-TH/features/deck.md
@@ -0,0 +1,18 @@
+# デッキ
+
+デッキは利用可能なUIのひとつです。「カラム」と呼ばれるビューを複数並べて表示させることで、カスタマイズ性が高く、情報量の多いUIが構築できることが特徴です。
+
+## カラムの追加
+デッキの背景を右クリックし、「カラムを追加」して任意のカラムを追加できます。
+
+## カラムの移動
+カラムは、ドラッグアンドドロップで他のカラムと位置を入れ替えることが出来るほか、カラムメニュー(カラムのヘッダー右クリック)から位置を移動させることもできます。
+
+## カラムの水平分割
+カラムは左右だけでなく、上下に並べることもできます。 カラムメニューを開き、「左に重ねる」を選択すると、左のカラムの下に現在のカラムが移動します。 上下分割を解除するには、カラムメニューの「右に出す」を選択します。
+
+## カラムの設定
+カラムメニューの「編集」を選択するとカラムの設定を編集できます。カラムの名前を変えたり、幅を変えたりできます。
+
+## デッキの設定
+デッキに関する設定は、[settings/deck](/settings/deck)で行えます。
diff --git a/src/docs/th-TH/features/drive.md b/src/docs/th-TH/features/drive.md
new file mode 100644
index 0000000000..b82a41082a
--- /dev/null
+++ b/src/docs/th-TH/features/drive.md
@@ -0,0 +1,17 @@
+# ドライブ
+ドライブは、Misskey上でファイルを管理できる機能です。
+
+[ドライブのページ](/my/drive)から任意のファイルをアップロードできるほか、アバターに設定した画像や、ノートに添付したファイルなどもすべてドライブにアップロードされます。
+
+<div class="warn">⚠️ ドライブからファイルを削除すると、そのファイルが添付されたノートも消えます。</div>
+
+ドライブにアップロードされたファイルは、いつでもダウンロードすることができるほか、ノート作成時に「ドライブからファイルを添付」することでファイルを再利用することもできます。
+
+ドライブ内にフォルダを作り、複数のファイルをまとめて整理することもできます。
+
+## 閲覧注意 (NSFW)
+<div class="info">ℹ️ この項目が閲覧注意なわけではありません</div>
+
+閲覧注意またはNSFW (Not safe for work) は、ドライブのファイルに設定することができるフラグです。 閲覧注意フラグを設定されたファイルは、表示される際に閲覧者の操作なしには表示されなくなります。 このフラグは、例えば職場や公共の場で閲覧するのに適切でないと思われる画像などに設定し、そのような画像が突然表示されてしまうことを防ぐ目的で使われます。
+
+このフラグは手動でオンオフを切り替えられるほか、モデレーターの判断で設定される場合もあります。
diff --git a/src/docs/th-TH/features/favorite.md b/src/docs/th-TH/features/favorite.md
new file mode 100644
index 0000000000..a0e5f8bf78
--- /dev/null
+++ b/src/docs/th-TH/features/favorite.md
@@ -0,0 +1,4 @@
+# お気に入り
+[ノート](./node)をお気に入りとして登録できる機能です。 お気に入り登録したノートは、[お気に入りページ](./my/favorites)で一覧することができます。 お気に入りに登録したことは相手に通知されず、お気に入りは自分しか見ることができません。
+
+ノートをお気に入り登録するには、ノートメニューの「お気に入り」を押します。お気に入り解除するには、ノートメニューの「お気に入り解除」を押します。
diff --git a/src/docs/th-TH/features/follow.md b/src/docs/th-TH/features/follow.md
new file mode 100644
index 0000000000..3c1ea7bbe0
--- /dev/null
+++ b/src/docs/th-TH/features/follow.md
@@ -0,0 +1,2 @@
+# フォロー
+ユーザーをフォローすると、タイムラインにそのユーザーの投稿が表示されるようになります。ただし、他のユーザーに対する返信は含まれません。 ユーザーをフォローするには、ユーザーページの「フォロー」ボタンをクリックします。フォローを解除するには、もう一度クリックします。
diff --git a/src/docs/th-TH/features/keyboard-shortcut.md b/src/docs/th-TH/features/keyboard-shortcut.md
new file mode 100644
index 0000000000..8659ace982
--- /dev/null
+++ b/src/docs/th-TH/features/keyboard-shortcut.md
@@ -0,0 +1,66 @@
+# キーボードショートカット
+
+## グローバル
+これらのショートカットは基本的にどこでも使えます。
+<table>
+    <thead>
+        <tr><th>ショートカット</th><th>効果</th><th>由来</th></tr>
+    </thead>
+    <tbody>
+        <tr><td><kbd class="key">P</kbd>, <kbd class="key">N</kbd></td><td>新規投稿</td><td><b>P</b>ost, <b>N</b>ew, <b>N</b>ote</td></tr>
+        <tr><td><kbd class="key">T</kbd></td><td>タイムラインの最も新しい投稿にフォーカス</td><td><b>T</b>imeline, <b>T</b>op</td></tr>
+        <tr><td><kbd class="group"><kbd class="key">Shift</kbd> + <kbd class="key">N</kbd></kbd></td><td>通知を表示/隠す</td><td><b>N</b>otifications</td></tr>
+        <tr><td><kbd class="key">S</kbd></td><td>検索</td><td><b>S</b>earch</td></tr>
+        <tr><td><kbd class="key">H</kbd>, <kbd class="key">?</kbd></td><td>ヘルプを表示</td><td><b>H</b>elp</td></tr>
+    </tbody>
+</table>
+
+## 投稿にフォーカスされた状態
+<table>
+    <thead>
+        <tr><th>ショートカット</th><th>効果</th><th>由来</th></tr>
+    </thead>
+    <tbody>
+        <tr><td><kbd class="key">↑</kbd>, <kbd class="key">K</kbd>, <kbd class="group"><kbd class="key">Shift</kbd> + <kbd class="key">Tab</kbd></kbd></td><td>上の投稿にフォーカスを移動</td><td>-</td></tr>
+        <tr><td><kbd class="key">↓</kbd>, <kbd class="key">J</kbd>, <kbd class="key">Tab</kbd></td><td>下の投稿にフォーカスを移動</td><td>-</td></tr>
+        <tr><td><kbd class="key">R</kbd></td><td>返信フォームを開く</td><td><b>R</b>eply</td></tr>
+        <tr><td><kbd class="key">Q</kbd></td><td>Renoteフォームを開く</td><td><b>Q</b>uote</td></tr>
+        <tr><td><kbd class="group"><kbd class="key">Ctrl</kbd> + <kbd class="key">Q</kbd></kbd></td><td>即刻Renoteする(フォームを開かずに)</td><td>-</td></tr>
+        <tr><td><kbd class="key">E</kbd>, <kbd class="key">A</kbd>, <kbd class="key">+</kbd></td><td>リアクションフォームを開く</td><td><b>E</b>mote, re<b>A</b>ction</td></tr>
+        <tr><td><kbd class="key">0</kbd>~<kbd class="key">9</kbd></td><td>数字に対応したリアクションをする(対応については後述)</td><td>-</td></tr>
+        <tr><td><kbd class="key">F</kbd>, <kbd class="key">B</kbd></td><td>お気に入りに登録</td><td><b>F</b>avorite, <b>B</b>ookmark</td></tr>
+        <tr><td><kbd class="key">Del</kbd>, <kbd class="group"><kbd class="key">Ctrl</kbd> + <kbd class="key">D</kbd></kbd></td><td>投稿を削除</td><td><b>D</b>elete</tr>
+        <tr><td><kbd class="key">M</kbd>, <kbd class="key">O</kbd></td><td>投稿に対するメニューを開く</td><td><b>M</b>ore, <b>O</b>ther</td></tr>
+        <tr><td><kbd class="key">S</kbd></td><td>CWで隠された部分を表示 or 隠す</td><td><b>S</b>how, <b>S</b>ee</td></tr>
+        <tr><td><kbd class="key">Esc</kbd></td><td>フォーカスを外す</td><td>-</td></tr>
+    </tbody>
+</table>
+
+## Renoteフォーム
+<table>
+    <thead>
+        <tr><th>ショートカット</th><th>効果</th><th>由来</th></tr>
+    </thead>
+    <tbody>
+        <tr><td><kbd class="key">Enter</kbd></td><td>Renoteする</td><td>-</td></tr>
+        <tr><td><kbd class="key">Q</kbd></td><td>フォームを展開する</td><td><b>Q</b>uote</td></tr>
+        <tr><td><kbd class="key">Esc</kbd></td><td>フォームを閉じる</td><td>-</td></tr>
+    </tbody>
+</table>
+
+## リアクションフォーム
+デフォルトで「👍」にフォーカスが当たっている状態です。
+<table>
+    <thead>
+        <tr><th>ショートカット</th><th>効果</th><th>由来</th></tr>
+    </thead>
+    <tbody>
+        <tr><td><kbd class="key">↑</kbd>, <kbd class="key">K</kbd></td><td>上のリアクションにフォーカスを移動</td><td>-</td></tr>
+        <tr><td><kbd class="key">↓</kbd>, <kbd class="key">J</kbd></td><td>下のリアクションにフォーカスを移動</td><td>-</td></tr>
+        <tr><td><kbd class="key">←</kbd>, <kbd class="key">H</kbd>, <kbd class="group"><kbd class="key">Shift</kbd> + <kbd class="key">Tab</kbd></kbd></td><td>左のリアクションにフォーカスを移動</td><td>-</td></tr>
+        <tr><td><kbd class="key">→</kbd>, <kbd class="key">L</kbd>, <kbd class="key">Tab</kbd></td><td>右のリアクションにフォーカスを移動</td><td>-</td></tr>
+        <tr><td><kbd class="key">Enter</kbd>, <kbd class="key">Space</kbd>, <kbd class="key">+</kbd></td><td>リアクション確定</td><td>-</td></tr>
+        <tr><td><kbd class="key">0</kbd>~<kbd class="key">9</kbd></td><td>数字に対応したリアクションで確定</td><td>-</td></tr>
+        <tr><td><kbd class="key">Esc</kbd></td><td>リアクションするのをやめる</td><td>-</td></tr>
+    </tbody>
+</table>
diff --git a/src/docs/th-TH/features/mfm.md b/src/docs/th-TH/features/mfm.md
new file mode 100644
index 0000000000..5be2df4f30
--- /dev/null
+++ b/src/docs/th-TH/features/mfm.md
@@ -0,0 +1,12 @@
+# MFM
+MFMは、Misskey Flavored Markdownの略で、Misskeyの様々な場所で使用できる専用のマークアップ言語です。 MFMで使用可能な構文は[MFMチートシート](/mfm-cheat-sheet)で確認できます。
+
+## MFMが使用可能な場所の例
+- ノート本文
+- CW注釈
+- ユーザーの名前
+- ユーザーの自己紹介
+
+## 開発者向け情報
+MFMのパーサー実装はライブラリとして公開されており、簡単にクライアントにMFMを組み込むことが可能です。
+- [misskey-dev/mfm.js](https://github.com/misskey-dev/mfm.js) - JavaScriptパーサー実装
diff --git a/src/docs/th-TH/features/mute.md b/src/docs/th-TH/features/mute.md
new file mode 100644
index 0000000000..6a9608662a
--- /dev/null
+++ b/src/docs/th-TH/features/mute.md
@@ -0,0 +1,13 @@
+# ミュート
+
+ユーザーをミュートすると、そのユーザーに関する次のコンテンツがMisskeyに表示されなくなります:
+
+* タイムラインや投稿の検索結果内の、そのユーザーの投稿(およびそれらの投稿に対する返信やRenote)
+* そのユーザーからの通知
+* メッセージ履歴一覧内の、そのユーザーとのメッセージ履歴
+
+ユーザーをミュートするには、対象のユーザーのユーザーページに表示されている「ミュート」ボタンを押します。
+
+ミュートを行ったことは相手に通知されず、ミュートされていることを知ることもできません。
+
+設定>ミュート から、自分がミュートしているユーザー一覧を確認することができます。
diff --git a/src/docs/th-TH/features/note.md b/src/docs/th-TH/features/note.md
new file mode 100644
index 0000000000..62440b25f9
--- /dev/null
+++ b/src/docs/th-TH/features/note.md
@@ -0,0 +1,51 @@
+# ノート
+ノートは、Misskeyに投稿される、文章、ファイル、アンケートなどを含むコンテンツで、Misskeyの中心的概念です。また、そのノートを作成する行為自体もノートと呼ばれます。
+
+ノートが作成されると、[タイムライン](./timeline)に追加され、自分の[フォロワー](./follow)やサーバーのユーザーが見れるようになります。
+
+ノートには、[リアクション](./reaction)を行うことができます。また、返信や引用もできます。
+
+ノートを[お気に入り](./favorite)登録することで、後で簡単に見返すことができます。
+
+## ノートを作成する
+ノートを作成するには、画面上にある鉛筆マークのボタンを押して、作成フォームを開きます。作成フォームに内容を入力し、「ノート」ボタンを押すことでノートが作成されます。 ノートには、画像、動画など任意のファイルや、[アンケート](./poll)を添付することができます。また、本文中には[MFM](./mfm)が使用でき、[メンション](./mention)や[ハッシュタグ](./hashtag)を含めることもできます。 他にも、CWや公開範囲といった設定も行えます(詳細は後述)。
+<div class="info">ℹ️ コンピューターのクリップボードに画像データがある状態で、フォーム内のテキストボックスにペーストするとその画像を添付することができます。</div>
+<div class="info">ℹ️ テキストボックス内で<kbd class="key">Ctrl + Enter</kbd>を押すことでも投稿できます。</div>
+
+## Renote
+既にあるノートを引用、もしくはそのノートを新しいノートとして共有する行為、またそれによって作成されたノートをRenoteと呼びます。 自分がフォローしているユーザーの、気に入ったノートを自分のフォロワーに共有したい場合や、過去の自分のノートを再度共有したい場合に使います。 同じノートに対して無制限にRenoteを行うことができますが、あまり連続して使用すると迷惑になる場合もあるので、注意しましょう。
+<div class="warn">⚠️ 公開範囲がフォロワーやダイレクトのノートはRenoteできません</div>
+
+Renoteを削除するには、Renoteの時刻表示の隣にある「...」を押し、「Renote解除」を選択します。
+
+## CW
+Contents Warningの略で、ノートの内容を、閲覧者の操作なしには表示しないようにできる機能です。主に長大な内容を隠すためや、ネタバレ防止などに使うことができます。 設定するには、フォームの「内容を隠す」ボタン(目のアイコン)を押します。すると新しい入力エリアが表れるので、そこに内容の要約を記入します。
+
+## 公開範囲
+ノートごとに、そのノートが公開される範囲を設定することができます。フォームの「ノート」ボタンの左にあるアイコンを押すと公開範囲を以下から選択できます。
+
+### パブリック
+全ての人に対してノートが公開されるほか、サーバーの全てのタイムライン(ホームタイムライン、ローカルタイムライン、ソーシャルタイムライン、グローバルタイムライン)にノートが流れます。
+<div class="warn">⚠️ アカウントが<a href="./silence">サイレンス</a>状態の時は、この公開範囲は使用できません。</div>
+
+### ホーム
+全ての人に対してノートが公開されますが、フォロワー以外のローカルタイムライン、ソーシャルタイムライン、グローバルタイムラインにはノートは流れません。
+
+### フォロワー
+自分のフォロワーに対してのみノートを公開します。フォロワーの全てのタイムラインに流れます。
+
+### ダイレクト
+指定したユーザーに対してのみノートを公開します。指定したユーザーの全てのタイムラインに流れます。
+
+### 「ローカルのみ」オプション
+このオプションを有効にすると、リモートにノートを連合しなくなります。
+
+### 公開範囲の比較
+<table>
+    <tr><th></th><th>パブリック</th><th>ホーム</th><th>フォロワー</th><th>ダイレクト</th></tr>
+    <tr><th>フォロワーのLTL/STL/GTL</th><td>✔</td><td>✔</td><td>✔</td><td></td></tr>
+    <tr><th>非フォロワーのLTL/STL/GTL</th><td>✔</td><td></td><td></td><td></td></tr>
+</table>
+
+## ピン留め
+ノートをピン留めすると、ユーザーページに常にそのノートを表示しておくことができます。 ノートのメニューを開き、「ピン留め」を選択してピン留めできます。 複数のノートをピン留めできます。
diff --git a/src/docs/th-TH/features/pages.md b/src/docs/th-TH/features/pages.md
new file mode 100644
index 0000000000..a7311b95e6
--- /dev/null
+++ b/src/docs/th-TH/features/pages.md
@@ -0,0 +1,10 @@
+# Pages
+
+## 変数
+変数を使うことで動的なページを作成できます。テキスト内で <b>{ 変数名 }</b> と書くとそこに変数の値を埋め込めます。例えば <b>Hello { thing } world!</b> というテキストで、変数(thing)の値が <b>ai</b> だった場合、テキストは <b>Hello ai world!</b> になります。
+
+変数の評価(値を算出すること)は上から下に行われるので、ある変数の中で自分より下の変数を参照することはできません。例えば上から <b>A、B、C</b> と3つの変数を定義したとき、<b>C</b>の中で<b>A</b>や<b>B</b>を参照することはできますが、<b>A</b>の中で<b>B</b>や<b>C</b>を参照することはできません。
+
+ユーザーからの入力を受け取るには、ページに「ユーザー入力」ブロックを設置し、「変数名」に入力を格納したい変数名を設定します(変数は自動で作成されます)。その変数を使ってユーザー入力に応じた動作を行えます。
+
+関数を使うと、値の算出処理を再利用可能な形にまとめることができます。関数を作るには、「関数」タイプの変数を作成します。関数にはスロット(引数)を設定することができ、スロットの値は関数内で変数として利用可能です。また、関数を引数に取る関数(高階関数と呼ばれます)も存在します。関数は予め定義しておくほかに、このような高階関数のスロットに即席でセットすることもできます。
diff --git a/src/docs/th-TH/features/reaction.md b/src/docs/th-TH/features/reaction.md
new file mode 100644
index 0000000000..4d479fd416
--- /dev/null
+++ b/src/docs/th-TH/features/reaction.md
@@ -0,0 +1,11 @@
+# リアクション
+他の人のノートに、絵文字を付けて簡単にあなたの反応を伝えられる機能です。 リアクションするには、ノートの + アイコンをクリックしてピッカーを表示し、絵文字を選択します。 リアクションには[カスタム絵文字](./custom-emoji)も使用できます。
+
+## リアクションピッカーのカスタマイズ
+ピッカーに表示される絵文字を自分好みにカスタマイズすることができます。 設定の「リアクション」で設定します。
+
+## リモート投稿へのリアクションについて
+リアクションはMisskeyオリジナルの機能であるため、リモートインスタンスがMisskeyでない限りは、ほとんどの場合「Like」としてアクティビティが送信されます。一般的にはLikeは「お気に入り」として実装されているようです。
+
+## リモートからのリアクションについて
+リモートから「Like」アクティビティを受信したとき、Misskeyでは「👍」のリアクションとして解釈されます。
diff --git a/src/docs/th-TH/features/silence.md b/src/docs/th-TH/features/silence.md
new file mode 100644
index 0000000000..7e26feab0d
--- /dev/null
+++ b/src/docs/th-TH/features/silence.md
@@ -0,0 +1,6 @@
+# サイレンス
+サイレンスは、アカウントに設定される状態のひとつです。
+
+アカウントがサイレンス状態になると、ノートの公開範囲をパブリックにできなくなります。 ホーム、フォロワー、ダイレクトは選択可能なため、サイレンスを受けた場合でもフォロワーやあなたのユーザーページを直接訪れた場合は投稿を閲覧できますが、GTL(連合タイムライン)やLTL(ローカルタイムライン)には投稿が流れません。
+
+アカウントのサイレンス状態は、サーバーのモデレーターによって有効化/無効化されます。
diff --git a/src/docs/th-TH/features/theme.md b/src/docs/th-TH/features/theme.md
new file mode 100644
index 0000000000..a406f3433c
--- /dev/null
+++ b/src/docs/th-TH/features/theme.md
@@ -0,0 +1,68 @@
+# テーマ
+
+テーマを設定して、Misskeyクライアントの見た目を変更できます。
+
+## テーマの設定
+設定 > テーマ
+
+## テーマを作成する
+テーマコードはJSON5で記述されたテーマオブジェクトです。 テーマは以下のようなオブジェクトです。
+``` js
+{
+    id: '17587283-dd92-4a2c-a22c-be0637c9e22a',
+
+    name: 'Danboard',
+    author: 'syuilo',
+
+    base: 'light',
+
+    props: {
+        accent: 'rgb(218, 141, 49)',
+        bg: 'rgb(218, 212, 190)',
+        fg: 'rgb(115, 108, 92)',
+        panel: 'rgb(236, 232, 220)',
+        renote: 'rgb(100, 152, 106)',
+        link: 'rgb(100, 152, 106)',
+        mention: '@accent',
+        hashtag: 'rgb(100, 152, 106)',
+        header: 'rgba(239, 227, 213, 0.75)',
+        navBg: 'rgb(216, 206, 182)',
+        inputBorder: 'rgba(0, 0, 0, 0.1)',
+    },
+}
+
+```
+
+* `id` ... テーマの一意なID。UUIDをおすすめします。
+* `name` ... テーマ名
+* `author` ... テーマの作者
+* `desc` ... テーマの説明(オプション)
+* `base` ... 明るいテーマか、暗いテーマか
+    * `light`にすると明るいテーマになり、`dark`にすると暗いテーマになります。
+    * テーマはここで設定されたベーステーマを継承します。
+* `props` ... テーマのスタイル定義。これから説明します。
+
+### テーマのスタイル定義
+`props`下にはテーマのスタイルを定義します。 キーがCSSの変数名になり、バリューで中身を指定します。 なお、この`props`オブジェクトはベーステーマから継承されます。 ベーステーマは、このテーマの`base`が`light`なら[_light.json5](https://github.com/misskey-dev/misskey/blob/develop/src/client/themes/_light.json5)で、`dark`なら[_dark.json5](https://github.com/misskey-dev/misskey/blob/develop/src/client/themes/_dark.json5)です。 つまり、このテーマ内の`props`に`panel`というキーが無くても、そこにはベーステーマの`panel`があると見なされます。
+
+#### バリューで使える構文
+* 16進数で表された色
+    * 例: `#00ff00`
+* `rgb(r, g, b)`形式で表された色
+    * 例: `rgb(0, 255, 0)`
+* `rgb(r, g, b, a)`形式で表された透明度を含む色
+    * 例: `rgba(0, 255, 0, 0.5)`
+* 他のキーの値の参照
+    * `@{キー名}`と書くと他のキーの値の参照になります。`{キー名}`は参照したいキーの名前に置き換えます。
+    * 例: `@panel`
+* 定数(後述)の参照
+    * `${定数名}`と書くと定数の参照になります。`{定数名}`は参照したい定数の名前に置き換えます。
+    * 例: `$main`
+* 関数(後述)
+    * `:{関数名}<{引数}<{色}`
+
+#### 定数
+「CSS変数として出力はしたくないが、他のCSS変数の値として使いまわしたい」値があるときは、定数を使うと便利です。 キー名を`$`で始めると、そのキーはCSS変数として出力されません。
+
+#### 関数
+wip
diff --git a/src/docs/th-TH/features/timeline.md b/src/docs/th-TH/features/timeline.md
new file mode 100644
index 0000000000..f431014f84
--- /dev/null
+++ b/src/docs/th-TH/features/timeline.md
@@ -0,0 +1,31 @@
+# タイムライン
+タイムラインは、[ノート](./note)が時系列で表示される機能です。 タイムラインには以下で示す種類があり、種類によって表示されるノートも異なります。 なお、タイムラインの種類によってはサーバーにより無効になっている場合があります。
+
+## ホーム
+自分のフォローしているユーザーの投稿が流れます。HTLと略されます。
+
+## ローカル
+全てのローカルユーザーの「ホーム」指定されていない投稿が流れます。LTLと略されます。
+
+## ソーシャル
+自分のフォローしているユーザーの投稿と、全てのローカルユーザーの「ホーム」指定されていない投稿が流れます。STLと略されます。
+
+## グローバル
+全てのローカルユーザーの「ホーム」指定されていない投稿と、サーバーに届いた全てのリモートユーザーの「ホーム」指定されていない投稿が流れます。GTLと略されます。
+
+## 比較
+| ソース          |       |     | タイムライン |       |       |
+| ------------ | ----- | --- | ------ | ----- | ----- |
+| ユーザー         | 公開範囲  | ホーム | ローカル   | ソーシャル | グローバル |
+| ローカル (フォロー)  | 公開    | ✔   | ✔      | ✔     | ✔     |
+|              | ホーム   | ✔   |        | ✔     |       |
+|              | フォロワー | ✔   | ✔      | ✔     | ✔     |
+| リモート (フォロー)  | 公開    | ✔   |        | ✔     | ✔     |
+|              | ホーム   | ✔   |        | ✔     |       |
+|              | フォロワー | ✔   |        | ✔     | ✔     |
+| ローカル (未フォロー) | 公開    |     | ✔      | ✔     | ✔     |
+|              | ホーム   |     |        |       |       |
+|              | フォロワー |     |        |       |       |
+| リモート (未フォロー) | 公開    |     |        |       | ✔     |
+|              | ホーム   |     |        |       |       |
+|              | フォロワー |     |        |       |       |
diff --git a/src/docs/th-TH/features/widgets.md b/src/docs/th-TH/features/widgets.md
new file mode 100644
index 0000000000..a7c2c1d1d6
--- /dev/null
+++ b/src/docs/th-TH/features/widgets.md
@@ -0,0 +1,7 @@
+# ウィジェット
+ウィジェットは、MisskeyのUI上に設置できる小型の情報表示、操作が行えるパーツです。
+
+ウィジェットを編集するには、ウィジェット編集モードに切り替えます。切り替え方法はUIによって異なります。 ウィジェット編集モードでは、ウィジェットの追加、削除、並び替え、およびそれぞれのウィジェットの設定を行えます。
+
+## 利用可能なウィジェット一覧
+todo
diff --git a/src/docs/th-TH/general/apps.md b/src/docs/th-TH/general/apps.md
new file mode 100644
index 0000000000..1f4c85fe8f
--- /dev/null
+++ b/src/docs/th-TH/general/apps.md
@@ -0,0 +1,6 @@
+# サードパーティアプリのリスト
+## クライアント
+todo
+
+## 連携サービス
+todo
diff --git a/src/docs/th-TH/general/faq.md b/src/docs/th-TH/general/faq.md
new file mode 100644
index 0000000000..ecb664e32e
--- /dev/null
+++ b/src/docs/th-TH/general/faq.md
@@ -0,0 +1,22 @@
+# よくある質問
+ここでは利用上のよくある質問について掲載しています。 Misskeyのプロジェクト自体についてのよくある質問は[こちら](./misskey)に掲載されています。
+
+### iOS/Androidのアプリはありますか?
+公式にはそういったOSのネイティブアプリを開発していませんが、サードパーティ製のアプリがいくつかあります。 詳しくは[こちら](./apps)をご覧ください。
+
+ただ、サードパーティ製アプリはどうしても機能への対応が遅れてしまうため、とくに拘りがなければ公式のWebクライアントの利用をおすすめします。 なお、MisskeyのWebクライアントはPWAに対応しているので、ネイティブアプリのように動作させることも可能です。 詳しくは[こちら](todo)をご覧ください。
+
+## 他のサーバーのユーザーをフォローするときは?
+メニューから検索を選び、ユーザー名をホスト込みで入力します。例: `@syuilo@misskey.io`
+
+## Renoteを削除するには?
+Renoteの時刻表示の隣にある「...」を押し、「Renote解除」を選択します。 Renoteについては[こちら](../features/note)をご確認ください。
+
+## URLのプレビューを表示させたくない
+MFMには、そのURLのプレビューを無効にする構文があります。詳細は[MFMチートシート](/mfm-cheat-sheet)をご確認ください。
+
+## カスタム絵文字を追加したい
+運営者のみがカスタム絵文字を追加、編集、削除できます。それらを希望する場合は運営者に依頼してください。
+
+## Botを開発したい
+Misskey APIを利用してBotの開発が可能です。[こちら](../advanced/develop-bot)をご確認ください。
diff --git a/src/docs/th-TH/general/glossary.md b/src/docs/th-TH/general/glossary.md
new file mode 100644
index 0000000000..1f403a06d2
--- /dev/null
+++ b/src/docs/th-TH/general/glossary.md
@@ -0,0 +1,83 @@
+# 用語集
+Misskeyに関する用語集です。
+
+## AcitivityPub
+(読み: あくてぃびてぃぱぶ) 分散型を実現するために用いられるプロトコル(仕様)。このプロトコルに則ってサーバー同士通信を行うことで、連合が行われ、Fediverseを形成しています。
+
+## AiScript
+(読み: あいすくりぷと) Misskey上で使用できるプログラミング言語です。詳細は[こちら。](../advanced/aiscript)
+
+## API
+(読み: えーぴーあい) Misskeyのサーバーが公開している、プログラムからMisskeyを扱うためのインターフェース。詳細は[こちら。](../advanced/api)
+
+## Bot
+(読み: ぼっと) プログラムによって動作しているアカウント。
+
+## CW
+(読み: こんてんつわーにんぐ) Contents Warningの略。ノートの内容を、操作なしには表示しないようにできる機能。主に長大な内容を隠すためや、ネタバレ防止などに使われます。
+
+## Fediverse
+(読み: ふぇでぃばーす) Misskeyを含む様々な分散型ソフトウェアのサーバーで構成されたネットワーク。
+
+## GTL
+グローバルタイムライン(Global TimeLine)の略。タイムラインの詳細は[こちら。](../features/timeline)
+
+## HTL
+ホームタイムライン(Home TimeLine)の略。タイムラインの詳細は[こちら。](../features/timeline)
+
+## LTL
+ローカルタイムライン(Local TimeLine)の略。タイムラインの詳細は[こちら。](../features/timeline)
+
+## MFM
+(読み: えむえふえむ) Misskey Flavored Markdownの略で、Misskey上で使用できるマークアップ言語です。詳細は[こちら。](../features/mfm)
+
+## NSFW
+(読み: のっとせーふふぉーわーく) Not Safe For Workの略。画像を「閲覧注意」扱いにし、操作なしには表示しないようにすることができる機能。
+
+## Renote
+(読み: りのーと) 既にあるノートを引用、もしくはそのノートを新しいノートとして共有する行為、またそれによって作成されたノート。詳細は[こちら。](../features/note)
+
+## STL
+ソーシャルタイムライン(Social TimeLine)の略。タイムラインの詳細は[こちら。](../features/timeline)
+
+## 藍
+(読み: あい) Misskeyの看板娘(公式キャラクター)です。
+
+## アクティブユーザー
+インスタンスにアカウントを作っているユーザーのうち、現在も実際にサービスを利用しているユーザーのこと。
+
+## インスタンス
+todo
+
+## コントロールパネル
+インスタンスの設定画面のこと。
+
+## サーバー
+todo
+
+## サイレンス
+ノートをパブリックな公開範囲で投稿できなくされている状態。モデレーターの判断でユーザーごとに設定されます。詳細は[こちら。](../features/silence)
+
+## 凍結
+アカウントが使用不可に設定されている状態。
+
+## ドライブ
+Misskeyにアップロードしたファイルを管理する機能。詳細は[こちら。](../features/drive)
+
+## ノート
+Misskeyに投稿される、文章、ファイル、アンケートなどを含めることができるコンテンツ。詳細は[こちら。](../features/note)
+
+## ミスキスト
+Misskeyを使う人のこと。
+
+## モデレーター
+スパムの凍結およびサイレンスや不適切な投稿の削除など、コミュニティ運営に関する権限を持つユーザー。
+
+## リモート
+他サーバーのことを指します。リモートユーザーといったように接頭辞としても使われます。ローカルの逆です。
+
+## 連合
+サーバー上で作成された情報が他のサーバーに伝わること。
+
+## ローカル
+自サーバーのことを指します。ローカルユーザー、ローカルタイムラインといったように接頭辞としても使われます。リモートの逆です。
diff --git a/src/docs/th-TH/general/links.md b/src/docs/th-TH/general/links.md
new file mode 100644
index 0000000000..d6b16856fb
--- /dev/null
+++ b/src/docs/th-TH/general/links.md
@@ -0,0 +1,5 @@
+# リンク集
+
+## ライブラリ
+- [misskey-dev/misskey.js](https://github.com/misskey-dev/misskey.js) - JavaScriptのMisskey SDK
+- [misskey-dev/mfm.js](https://github.com/misskey-dev/mfm.js) - JavaScriptのMFMパーサー実装
diff --git a/src/docs/th-TH/general/misskey.md b/src/docs/th-TH/general/misskey.md
new file mode 100644
index 0000000000..1e64a10e28
--- /dev/null
+++ b/src/docs/th-TH/general/misskey.md
@@ -0,0 +1,87 @@
+# Misskeyについて
+
+Misskeyはオープンソースの分散型マイクロブログプラットフォームプロジェクトです。 開発は日本でsyuiloによって2014年から開始されました。 ドライブ、リアクションなどの豊富な機能や、高いカスタマイズ性を備えたUIを持つことが特徴です。
+
+## 歴史
+開発当初は掲示板がメインのサービスでしたが、ユーザーが短文を投稿し、それを時系列で流れるタイムライン機能を追加したところ人気が高まり、徐々にそれがメインとして開発が進むようになりました。 当初は分散型ではありませんでしたが、2018年にAcitivityPubを実装し分散型になったことで、より多くの方に認知され利用されるサービスになり、現在に至ります。
+<div class="info">ℹ️ Misskeyという名前は、syuiloが当時聴いていたMay'nというアーティストの楽曲、Brain Diverの歌詞に由来します。</div>
+
+誰でも開発に参加することができ、現在でも活発に開発が続いています。
+
+## 分散型とは何か?
+
+<b>分散(distributed)型</b>とは、<b>非中央集権(decentralized)</b>とも呼ばれ、コミュニティが多数のサーバーに分散して存在し、それらが相互に<b>通信(連合、federation)</b>することでコンテンツ共有<b>ネットワーク(Fediverse)</b>を形成していることが特徴のサービスです。 単一のサーバーしか存在しない、もしくは複数存在しても互いに独立している場合は中央集権なサービスと言われ、例えばTwitterやFacebookなどほとんどのサービスがそれに該当します。 分散型のメリットは、自分に合った運営者やテーマのサーバーを選択できることです。自分でサーバーを作成することもできます。連合するおかげで、どのサーバーを選んでも、同じコミュニティにアクセスできます。
+
+## 常にオープンソース
+Misskeyはこれまでもこれからも、オープンソースであり続けます。オープンソースとは、簡単に言うと<b>ソフトウェアのソースコード(プログラム)が公開されている</b>ことです。ソースコードの修正や再配布が可能であることを定義に含めることもあります。 Misskeyのすべてのソースコードは[AGPL](https://github.com/misskey-dev/misskey/blob/develop/LICENSE)というオープンソースライセンスの下に[公開](https://github.com/misskey-dev)されていて、誰でも自由に閲覧、使用、修正、改変、再配布をすることができます。 オープンソースは、自分で好きなように変えたり、有害な処理が含まれていないことを確認することができたり、誰でも開発に参加できるなどの、様々なメリットがあります。 上述の分散型を実現するためにも、オープンソースであるということは必要不可欠な要素です。 再び引き合いに出しますが、TwitterやFacebookなどの利益を得ているほとんどのサービスはオープンソースではありません。
+
+<div class="info">ℹ️ 技術的に言うと、MisskeyのソースコードはGitで管理されていて、リポジトリは<a href="https://github.com/misskey-dev" target="_blank">GitHub上でホスティングされています。</a></div>
+
+## 開発に参加する、プロジェクトを支援する
+Misskeyを気に入っていただけたら、ぜひプロジェクトを支援してください。プロジェクトに貢献するには、以下で紹介するようにいろいろな方法があります。方法によっては開発のスキルは不要なので、誰でも気軽に参加し貢献することができます。いつでもお待ちしています。
+
+### 機能を追加したり、バグを修正する
+ソフトウェアエンジニアのスキルをお持ちの方であれば、ソースコードを編集する形でプロジェクトに貢献することができます。 貢献についてのガイドは[こちら](https://github.com/misskey-dev/misskey/blob/develop/CONTRIBUTING.md)です。
+
+### 議論に参加する
+新しい機能、または既存の機能について意見を述べたり、不具合を報告したりすることでも貢献できます。 そのようなディスカッションは[GitHub](https://github.com/misskey-dev)上か、[フォーラム](https://forum.misskey.io/)等で行われます。
+
+### テキストを翻訳する
+Misskeyは様々な言語に対応しています(i18n -internationalizationの略- と呼ばれます)。元の言語は基本的に日本語ですが、有志によって他の言語へと翻訳されています。 その翻訳作業に加わっていただくことでもMisskeyに貢献できます。 Misskeyは[Crowdinというサービスを使用して翻訳の管理を行っています。](https://crowdin.com/project/misskey)
+
+### 感想を投稿する
+不具合報告等だけではなく、Misskeyの良い点、楽しい点といったポジティブな意見もぜひ共有してください。開発の励みになり、それは間接的ですがプロジェクトへの貢献です。
+
+### ミスキストを増やす
+ミスキストとは、Misskeyを使用する人のことです。 知り合いに紹介するなどしてMisskeyを広めていただければ、ミスキストが増え開発のモチベーションが上がります。
+
+### 寄付をする
+Misskeyはビジネスではなく、利用は無料であるため、収益は皆様からの寄付のみです。(インスタンスによっては広告収入を得ているような場合もありますが、それは運営者の収入であり直接開発者への収入にはなりません) 寄付をしていただければ、今後も開発を続けることが可能になり、プロジェクトへの貢献になります。 寄付は基本的には[Patreon](https://www.patreon.com/syuilo)で受け付けています。 一定額寄付していただけると、Misskeyの[情報ページ](/about-misskey)に名前を記載することができます。
+
+また、サーバーの運営者も、基本的には収益を得ていません。サーバーの運営にはコストがかかるので、運営者の支援をすることもご検討ください。 開発には直接関係しませんが、サーバーがあってこそのプロジェクトなので、運営が維持されるというのは開発と同じくらい重要なことです。
+
+## クレジット
+Misskeyの開発者や、Misskeyに寄付をしてくださった方の一覧は[こちら](/about-misskey)で見ることができます。
+
+## よくある質問
+### プロジェクトは何を目指していますか?
+強いて言うと、漠然的になりますが広く使われる汎用的なプラットフォームになることを目指しています。 Misskeyは他のプロジェクトとは違い、何らかの思想(例えば、反中央集権)やビジョンに基づいて開発が行われているわけではなく、その点ではフラットです。 それが逆に、特定の方向性に縛られないフレキシブルさを生み出すことに繋がっていると感じています。
+<!-- TODO: ここにロードマップへのリンク -->
+
+### 企業によって開発されていますか?
+いいえ。Misskeyの開発は個人で行われており、商業的でもないため、特定の企業の関りはありません。 開発メンバーも基本的にはボランティアです。 また、開発に対し企業のスポンサーがつくこともありますが、その場合でもやはり開発は個人のコミュニティが主体です。
+
+### 誰が運営していますか?
+Misskeyは分散型なため、各サーバーにそれぞれ異なった運営者がいます。従って、特定の個人や企業によって、Misskeyの全てが運営されているわけではありません。 また、開発チームが運営を行うわけでもないため、運営に関する連絡は、お使いのサーバーの運営者に行ってください。 サーバーの運営者は、[このページ](/about)で確認することができます。 あなたがサーバーを作成すれば、あなたが運営者になります。
+
+### どのサーバーを選べばいいですか?
+[サーバー一覧が公開されています。](https://join.misskey.page/ja-JP/instances) サーバーによってコミュニティのテーマ(特定のこと、ものが好き 等)が決められている場合があるので、自分に合ったテーマのサーバーがあれば、そこを選ぶと良いかもしれません。 他にも、サーバーの規模、ユーザー層、国および言語、運営者が信頼できるかどうか、などの観点があります。 なお、Misskey公式のサーバーというものはありません。自身で新しくサーバーを作成するという選択肢もあります。
+
+基本的にどのサーバーを選んだとしても、他の全てのサーバーのユーザーと繋がることができます。
+
+### サーバーを建てるにはどうしたらいいですか?
+Misskeyサーバーの作成に興味を持っていただきありがとうございます。 2021年現在、Misskeyのホスティングサービスは存在しないため、サーバーの作成にはある程度の知識が必要です。 サーバーの作成方法については[こちら](todo)をご覧ください。
+
+### どのような技術を使用していますか?
+Misskeyは開発が進むにつれ使用する技術も大きく変わってきました。開発当初はMySQL + PHP + jQueryといった構成でしたが、現在は以下のようになっています。
+- サーバーサイド: Node.js
+- データベース: PostgreSQL、Redis
+- UIフレームワーク: Vue.js
+- プログラミング言語: TypeScript
+
+また、MFMやAiScriptなどの、Misskeyから派生して独自の技術も開発しています。
+
+### Mastodonのフォークですか?
+いいえ。MisskeyはMastodonやその他のプロジェクトとは全く別のプロジェクトです。 開発に関しても、Misskeyの方が昔から開発されています。ただし、分散型になったのはMastodonの登場より後です。 同じAcitivityPubという分散のためのプロトコルを実装しているという点以外、両者に特に関りがあるわけでもありません。
+
+### iOS/Androidのアプリはありますか?
+公式にはそういったOSのネイティブアプリを開発していませんが、サードパーティ製のアプリがいくつかあります。 詳しくは[こちら](./apps)をご覧ください。
+
+ただ、サードパーティ製アプリはどうしても機能への対応が遅れてしまうため、とくに拘りがなければ公式のWebクライアントの利用をおすすめします。 なお、MisskeyのWebクライアントはPWAに対応しているので、ネイティブアプリのように動作させることも可能です。 詳しくは[こちら](todo)をご覧ください。
+
+### Misskeyのロゴ、アイコンはどこで入手できますか?
+(準備中)
+
+### 時折目にする猫耳の可愛い女の子は?
+Misskeyの守り神、藍ちゃんです。アイチャンカワイイヤッター!
+<div class="info">ℹ️ 藍ちゃんについては<a href="https://xn--931a.moe/" target="_blank">こちら</a>です。</div>
diff --git a/src/docs/th-TH/general/report-issue.md b/src/docs/th-TH/general/report-issue.md
new file mode 100644
index 0000000000..63527e32af
--- /dev/null
+++ b/src/docs/th-TH/general/report-issue.md
@@ -0,0 +1,8 @@
+# 不具合の報告
+不具合と思われる状況に遭遇したときは、まず[トラブルシューティング](./troubleshooting)をご一読ください。 それでも問題が解決しないときは、以下の情報を含めて[フォーラム](https://forum.misskey.io/)に投稿してください。 投稿することで、解決策が見つかったり、不具合と判断されれば開発チームによって修正が行われます。
+
+## 含める情報
+- Misskeyのバージョン([情報ページ](/about)で確認できます)
+- お使いのブラウザの種類とバージョン
+- お使いのOSの種類とバージョン
+- 問題の再現手順
diff --git a/src/docs/th-TH/general/troubleshooting.md b/src/docs/th-TH/general/troubleshooting.md
new file mode 100644
index 0000000000..4a35091299
--- /dev/null
+++ b/src/docs/th-TH/general/troubleshooting.md
@@ -0,0 +1,36 @@
+# トラブルシューティング
+<div class="info">ℹ️ <a href="./faq">よくある質問</a>も合わせてお役立てください。</div>
+
+問題が発生したときは、まずこちらをご確認ください。 該当する項目が無い、もしくは手順を試しても効果がない場合は、サーバーの管理者に連絡するか[不具合を報告](./report-issue)してください。
+
+## クライアントが起動しない
+ほとんどの場合、お使いのブラウザまたはOSのバージョンが古いことが原因です。 ブラウザおよびOSのバージョンを最新のものに更新してから、再度試してみてください。
+
+これは稀ですが、それでも起動しない場合は、キャッシュが原因の場合があります。ブラウザのキャッシュをクリアして、再度試してみてください。
+
+## ページが読み込めない
+クライアントが起動するもののページが読み込めないというエラーが出る場合は、ネットワークに問題がないか確認してください。また、サーバーがダウンしていないか確認してください。
+
+これは稀ですが、キャッシュが原因の場合があります。ブラウザのキャッシュをクリアして、再度試してみてください。
+
+まだ問題がある場合は、サーバーの問題と思われるのでサーバーの管理者に連絡してください。
+
+## クライアントの動作が遅い
+以下を試してみてください:
+
+- クライアント設定で「UIのアニメーションを減らす」を有効にする
+- クライアント設定で「モーダルにぼかし効果を使用」を無効にする
+- お使いのブラウザの設定でハードウェアアクセラレーションを有効にする
+- お使いのデバイスのスペックを上げる
+
+## 通知やアンテナ等の点滅が消えない
+点滅は、未読のコンテンツがあることを示しています。通常点滅が消えない場合は、コンテンツを遡ると未読なコンテンツが残っています。 すべて既読にしたと思われるのに、それでもなお点滅が続く場合(おそらく不具合と思われます)は設定から強制的にすべて既読扱いにすることができます。
+
+## Renoteができない
+フォロワー限定のノートはRenoteすることはできません。
+
+## UI上で特定の要素が表示されない
+広告ブロッカーを使用しているとそのような不具合が発生することがあります。Misskeyではオフにしてご利用ください。
+
+## UI上で未翻訳の部分がある
+ほとんどの場合、単に翻訳が間に合っていないだけで、不具合ではありません。翻訳が終わるまでお待ちください。 [翻訳に参加](./misskey)していただくことも可能です。
diff --git a/src/docs/ug-CN/admin/disable-timelines.md b/src/docs/ug-CN/admin/disable-timelines.md
new file mode 100644
index 0000000000..b081e35ab0
--- /dev/null
+++ b/src/docs/ug-CN/admin/disable-timelines.md
@@ -0,0 +1,8 @@
+# LTL/STL/GTLの無効化
+Misskeyでは、LTL/STL/GTLをそれぞれ無効化することができます。有効/無効を切り替えるには、インスタンスコントロールパネルで設定します。
+
+LTLやSTLは、そのインスタンス全員の投稿が見れるため、新規のユーザーにとってはユーザーを探す必要がなくなり、興味のあるユーザーを見つけやすいという利点があります。 しかし同時に、フォロー機能が活用されなくなったり、不適切な投稿が目につきやすくなったり、チャットのようになることで内輪感が生じて逆に新規ユーザーが参加しにくくなるといったデメリットも持ち合わせています。 サーバーによってメリット/デメリットどちらが優勢かは異なるので、オプションとして無効にできるようになっています。 もしデメリットの方が上回っていると感じたら、それらのタイムラインを無効化することも検討してください。
+
+<div class="warn">⚠️ 無効化を行うと、ユーザーが困惑し、短期的に見て利用者が減る可能性があります。そのため、無効化の際は影響を慎重に検討し、事前に説明してフォローを整える期間を一定程度設けることを推奨します。</div>
+
+なお、管理者/モデレーターは、これらのタイムラインの無効化状態は適用されず、引き続き利用することが可能です。
diff --git a/src/docs/ug-CN/admin/faq.md b/src/docs/ug-CN/admin/faq.md
new file mode 100644
index 0000000000..317b4e0655
--- /dev/null
+++ b/src/docs/ug-CN/admin/faq.md
@@ -0,0 +1,5 @@
+# よくある質問
+ここでは、サーバー管理者向けのよくある質問を掲載しています。
+
+## デフォルトテーマを設定したい
+現在、デフォルトテーマ設定機能は実装されていません。
diff --git a/src/docs/ug-CN/advanced/aiscript.md b/src/docs/ug-CN/advanced/aiscript.md
new file mode 100644
index 0000000000..604d17daa8
--- /dev/null
+++ b/src/docs/ug-CN/advanced/aiscript.md
@@ -0,0 +1,7 @@
+# AiScript
+AiScriptは、Misskeyで使用できるスクリプト言語です。
+
+<div class="info">ℹ️ AiScript実装はMisskeyとは別リポジトリで、<a href="https://github.com/syuilo/aiscript" target="_blank">オープンソースで公開されています。</a></div>
+
+## 使い方
+AiScriptの構文や組み込み関数などのドキュメントは、[こちら](https://github.com/syuilo/aiscript/tree/master/docs)で公開されています。
diff --git a/src/docs/ug-CN/advanced/api.md b/src/docs/ug-CN/advanced/api.md
new file mode 100644
index 0000000000..76019b6145
--- /dev/null
+++ b/src/docs/ug-CN/advanced/api.md
@@ -0,0 +1,58 @@
+# Misskey API
+
+MisskeyAPIを使ってMisskeyクライアント、Misskey連携Webサービス、Bot等(以下「アプリケーション」と呼びます)を開発できます。 ストリーミングAPIもあるので、リアルタイム性のあるアプリケーションを作ることも可能です。
+
+APIを使い始めるには、まずアクセストークンを取得する必要があります。 このドキュメントでは、アクセストークンを取得する手順を説明した後、基本的なAPIの使い方を説明します。
+
+## アクセストークンの取得
+基本的に、APIはリクエストにはアクセストークンが必要となります。 APIにリクエストするのが自分自身なのか、不特定の利用者に使ってもらうアプリケーションなのかによって取得手順は異なります。
+
+* 前者の場合: [「自分自身のアクセストークンを手動発行する」](#自分自身のアクセストークンを手動発行する)に進む
+* 後者の場合: [「アプリケーション利用者にアクセストークンの発行をリクエストする」](#アプリケーション利用者にアクセストークンの発行をリクエストする)に進む
+
+### 自分自身のアクセストークンを手動発行する
+「設定 > API」で、自分のアクセストークンを発行できます。
+
+[「APIの使い方」へ進む](#APIの使い方)
+
+### アプリケーション利用者にアクセストークンの発行をリクエストする
+アプリケーション利用者のアクセストークンを取得するには、以下の手順で発行をリクエストします。
+
+#### Step 1
+
+UUIDを生成する。以後これをセッションIDと呼びます。
+
+> このセッションIDは毎回生成し、使いまわさないようにしてください。
+
+#### Step 2
+
+`{_URL_}/miauth/{session}`をユーザーのブラウザで表示させる。`{session}`の部分は、セッションIDに置き換えてください。
+> 例: `{_URL_}/miauth/c1f6d42b-468b-4fd2-8274-e58abdedef6f`
+
+表示する際、URLにクエリパラメータとしていくつかのオプションを設定できます:
+* `name` ... アプリケーション名
+    * > 例: `MissDeck`
+* `icon` ... アプリケーションのアイコン画像URL
+    * > 例: `https://missdeck.example.com/icon.png`
+* `callback` ... 認証が終わった後にリダイレクトするURL
+    * > 例: `https://missdeck.example.com/callback`
+    * リダイレクト時には、`session`というクエリパラメータでセッションIDが付きます
+* `permission` ... アプリケーションが要求する権限
+    * > 例: `write:notes,write:following,read:drive`
+    * 要求する権限を`,`で区切って列挙します
+    * どのような権限があるかは[APIリファレンス](/api-doc)で確認できます
+
+#### Step 3
+ユーザーが発行を許可した後、`{_URL_}/api/miauth/{session}/check`にPOSTリクエストすると、レスポンスとしてアクセストークンを含むJSONが返ります。
+
+レスポンスに含まれるプロパティ:
+* `token` ... ユーザーのアクセストークン
+* `user` ... ユーザーの情報
+
+[「APIの使い方」へ進む](#APIの使い方)
+
+## APIの使い方
+**APIはすべてPOSTで、リクエスト/レスポンスともにJSON形式です。RESTではありません。** アクセストークンは、`i`というパラメータ名でリクエストに含めます。
+
+* [APIリファレンス](/api-doc)
+* [ストリーミングAPI](./stream)
diff --git a/src/docs/ug-CN/advanced/create-plugin.md b/src/docs/ug-CN/advanced/create-plugin.md
new file mode 100644
index 0000000000..0d2fa19178
--- /dev/null
+++ b/src/docs/ug-CN/advanced/create-plugin.md
@@ -0,0 +1,74 @@
+# プラグインの作成
+Misskey Webクライアントのプラグイン機能を使うと、クライアントを拡張し、様々な機能を追加できます。 ここではプラグインの作成にあたってのメタデータ定義や、AiScript APIリファレンスを掲載します。
+
+## メタデータ
+プラグインは、AiScriptのメタデータ埋め込み機能を使って、デフォルトとしてプラグインのメタデータを定義する必要があります。 メタデータは次のプロパティを含むオブジェクトです。
+
+### name
+プラグイン名
+
+### author
+プラグイン作者
+
+### version
+プラグインバージョン。数値を指定してください。
+
+### description
+プラグインの説明
+
+### permissions
+プラグインが要求する権限。MisskeyAPIにリクエストする際に用いられます。
+
+### config
+プラグインの設定情報を表すオブジェクト。 キーに設定名、値に以下のプロパティを含めます。
+
+#### type
+設定値の種類を表す文字列。以下から選択します。 string number boolean
+
+#### label
+ユーザーに表示する設定名
+
+#### description
+設定の説明
+
+#### default
+設定のデフォルト値
+
+## APIリファレンス
+AiScript標準で組み込まれているAPIは掲載しません。
+
+### Mk:dialog(title text type)
+ダイアログを表示します。typeには以下の値が設定できます。 info success warn error question 省略すると info になります。
+
+### Mk:confirm(title text type)
+確認ダイアログを表示します。typeには以下の値が設定できます。 info success warn error question 省略すると question になります。 ユーザーが"OK"を選択した場合は true を、"キャンセル"を選択した場合は false が返ります。
+
+### Mk:api(endpoint params)
+Misskey APIにリクエストします。第一引数にエンドポイント名、第二引数にパラメータオブジェクトを渡します。
+
+### Mk:save(key value)
+任意の値に任意の名前を付けて永続化します。永続化した値は、AiScriptコンテキストが終了しても残り、Mk:loadで読み取ることができます。
+
+### Mk:load(key)
+Mk:saveで永続化した指定の名前の値を読み取ります。
+
+### Plugin:register_post_form_action(title fn)
+投稿フォームにアクションを追加します。第一引数にアクション名、第二引数にアクションが選択された際のコールバック関数を渡します。 コールバック関数には、第一引数に投稿フォームオブジェクトが渡されます。
+
+### Plugin:register_note_action(title fn)
+ノートメニューに項目を追加します。第一引数に項目名、第二引数に項目が選択された際のコールバック関数を渡します。 コールバック関数には、第一引数に対象のノートオブジェクトが渡されます。
+
+### Plugin:register_user_action(title fn)
+ユーザーメニューに項目を追加します。第一引数に項目名、第二引数に項目が選択された際のコールバック関数を渡します。 コールバック関数には、第一引数に対象のユーザーオブジェクトが渡されます。
+
+### Plugin:register_note_view_interruptor(fn)
+UIに表示されるノート情報を書き換えます。 コールバック関数には、第一引数に対象のノートオブジェクトが渡されます。 コールバック関数の返り値でノートが書き換えられます。
+
+### Plugin:register_note_post_interruptor(fn)
+ノート投稿時にノート情報を書き換えます。 コールバック関数には、第一引数に対象のノートオブジェクトが渡されます。 コールバック関数の返り値でノートが書き換えられます。
+
+### Plugin:open_url(url)
+第一引数に渡されたURLをブラウザの新しいタブで開きます。
+
+### Plugin:config
+プラグインの設定が格納されるオブジェクト。プラグイン定義のconfigで設定したキーで値が入ります。
diff --git a/src/docs/ug-CN/advanced/develop-bot.md b/src/docs/ug-CN/advanced/develop-bot.md
new file mode 100644
index 0000000000..7f825e9bc4
--- /dev/null
+++ b/src/docs/ug-CN/advanced/develop-bot.md
@@ -0,0 +1,6 @@
+# Botの作成
+[Misskey API](./api)を利用してBotの開発が可能です。 また、いくつかのBot実装が公開されているため、ぜひ参考にしてください。
+
+- [syuilo/ai](https://github.com/syuilo/ai) ... Node.js上で動く、TypeScript製Bot実装
+
+Botを作成したときは、プロフィール設定からBotフラグをオンにしておくことを強くおすすめします。
diff --git a/src/docs/ug-CN/advanced/reversi-bot.md b/src/docs/ug-CN/advanced/reversi-bot.md
new file mode 100644
index 0000000000..7ab2a7212e
--- /dev/null
+++ b/src/docs/ug-CN/advanced/reversi-bot.md
@@ -0,0 +1,160 @@
+# MisskeyリバーシBotの開発
+Misskeyのリバーシ機能に対応したBotの開発方法をここに記します。
+
+1. `games/reversi`ストリームに以下のパラメータを付けて接続する:
+    * `i`: botアカウントのAPIキー
+
+2. 対局への招待が来たら、ストリームから`invited`イベントが流れてくる
+    * イベントの中身に、`parent`という名前で対局へ誘ってきたユーザーの情報が含まれている
+
+3. `games/reversi/match`へ、`user_id`として`parent`の`id`が含まれたリクエストを送信する
+
+4. 上手くいくとゲーム情報が返ってくるので、`games/reversi-game`ストリームへ、以下のパラメータを付けて接続する:
+    * `i`: botアカウントのAPIキー
+    * `game`: `game`の`id`
+
+5. この間、相手がゲームの設定を変更するとその都度`update-settings`イベントが流れてくるので、必要であれば何かしらの処理を行う
+
+6. 設定に満足したら、`{ type: 'accept' }`メッセージをストリームに送信する
+
+7. ゲームが開始すると、`started`イベントが流れてくる
+    * イベントの中身にはゲーム情報が含まれている
+
+8. 石を打つには、ストリームに`{ type: 'set', pos: <位置> }`を送信する(位置の計算方法は後述)
+
+9. 相手または自分が石を打つと、ストリームから`set`イベントが流れてくる
+    * `color`として石の色が含まれている
+    * `pos`として位置情報が含まれている
+
+## 位置の計算法
+8x8のマップを考える場合、各マスの位置(インデックスと呼びます)は次のようになっています:
+```
++--+--+--+--+--+--+--+--+
+| 0| 1| 2| 3| 4| 5| 6| 7|
++--+--+--+--+--+--+--+--+
+| 8| 9|10|11|12|13|14|15|
++--+--+--+--+--+--+--+--+
+|16|17|18|19|20|21|22|23|
+...
+```
+
+### X,Y座標 から インデックス に変換する
+```
+pos = x + (y * mapWidth)
+```
+`mapWidth`は、ゲーム情報の`map`から、次のようにして計算できます:
+```
+mapWidth = map[0].length
+```
+
+### インデックス から X,Y座標 に変換する
+```
+x = pos % mapWidth
+y = Math.floor(pos / mapWidth)
+```
+
+## マップ情報
+マップ情報は、ゲーム情報の`map`に入っています。 文字列の配列になっており、ひとつひとつの文字がマス情報を表しています。 それをもとにマップのデザインを知る事が出来ます:
+* `(スペース)` ... マス無し
+* `-` ... マス
+* `b` ... 初期配置される黒石
+* `w` ... 初期配置される白石
+
+例えば、4*4の次のような単純なマップがあるとします:
+```text
++---+---+---+---+
+|   |   |   |   |
++---+---+---+---+
+|   | ○ | ● |   |
++---+---+---+---+
+|   | ● | ○ |   |
++---+---+---+---+
+|   |   |   |   |
++---+---+---+---+
+```
+
+この場合、マップデータはこのようになります:
+```javascript
+['----', '-wb-', '-bw-', '----']
+```
+
+## ユーザーにフォームを提示して対話可能Botを作成する
+ユーザーとのコミュニケーションを行うため、ゲームの設定画面でユーザーにフォームを提示することができます。 例えば、Botの強さをユーザーが設定できるようにする、といったシナリオが考えられます。
+
+フォームを提示するには、`reversi-game`ストリームに次のメッセージを送信します:
+```javascript
+{
+  type: 'init-form',
+  body: [フォームコントロールの配列]
+}
+```
+
+フォームコントロールの配列については今から説明します。 フォームコントロールは、次のようなオブジェクトです:
+```javascript
+{
+  id: 'switch1',
+  type: 'switch',
+  label: 'Enable hoge',
+  value: false
+}
+```
+`id` ... コントロールのID。 `type` ... コントロールの種類。後述します。 `label` ... コントロールと一緒に表記するテキスト。 `value` ... コントロールのデフォルト値。
+
+### フォームの操作を受け取る
+ユーザーがフォームを操作すると、ストリームから`update-form`イベントが流れてきます。 イベントの中身には、コントロールのIDと、ユーザーが設定した値が含まれています。 例えば、上で示したスイッチをユーザーがオンにしたとすると、次のイベントが流れてきます:
+```javascript
+{
+  id: 'switch1',
+  value: true
+}
+```
+
+### フォームコントロールの種類
+#### スイッチ
+type: `switch` スイッチを表示します。何かの機能をオン/オフさせたい場合に有用です。
+
+##### プロパティ
+`label` ... スイッチに表記するテキスト。
+
+#### ラジオボタン
+type: `radio` ラジオボタンを表示します。選択肢を提示するのに有用です。例えば、Botの強さを設定させるなどです。
+
+##### プロパティ
+`items` ... ラジオボタンの選択肢。例:
+```javascript
+items: [{
+  label: 'å¼±',
+  value: 1
+}, {
+  label: '中',
+  value: 2
+}, {
+  label: 'å¼·',
+  value: 3
+}]
+```
+
+#### スライダー
+type: `slider` スライダーを表示します。
+
+##### プロパティ
+`min` ... スライダーの下限。 `max` ... スライダーの上限。 `step` ... 入力欄で刻むステップ値。
+
+#### テキストボックス
+type: `textbox` テキストボックスを表示します。ユーザーになにか入力させる一般的な用途に利用できます。
+
+## ユーザーにメッセージを表示する
+設定画面でユーザーと対話する、フォーム以外のもうひとつの方法がこれです。ユーザーになにかメッセージを表示することができます。 例えば、ユーザーがBotの対応していないモードやマップを選択したとき、警告を表示するなどです。 メッセージを表示するには、次のメッセージをストリームに送信します:
+```javascript
+{
+  type: 'message',
+  body: {
+    text: 'メッセージ内容',
+    type: 'メッセージの種類'
+  }
+}
+```
+メッセージの種類: `success`, `info`, `warning`, `error`。
+
+## 投了する
+投了をするには、<a href="./api/endpoints/games/reversi/games/surrender">このエンドポイント</a>にリクエストします。
diff --git a/src/docs/ug-CN/advanced/stream.md b/src/docs/ug-CN/advanced/stream.md
new file mode 100644
index 0000000000..0e5edd2b0c
--- /dev/null
+++ b/src/docs/ug-CN/advanced/stream.md
@@ -0,0 +1,350 @@
+# ストリーミングAPI
+
+ストリーミングAPIを使うと、リアルタイムで様々な情報(例えばタイムラインに新しい投稿が流れてきた、メッセージが届いた、フォローされた、など)を受け取ったり、様々な操作を行ったりすることができます。
+
+## ストリームに接続する
+
+ストリーミングAPIを利用するには、まずMisskeyサーバーに**websocket**接続する必要があります。
+
+以下のURLに、`i`というパラメータ名で認証情報を含めて、websocket接続してください。例:
+```
+%WS_URL%/streaming?i=xxxxxxxxxxxxxxx
+```
+
+認証情報は、自分のAPIキーや、アプリケーションからストリームに接続する際はユーザーのアクセストークンのことを指します。
+
+<div class="info">ℹ️ 認証情報の取得については、<a href="./api">こちらのドキュメント</a>をご確認ください。</div>
+
+---
+
+認証情報は省略することもできますが、その場合非ログインでの利用ということになり、受信できる情報や可能な操作は限られます。例:
+
+```
+%WS_URL%/streaming
+```
+
+---
+
+ストリームに接続すると、後述するAPI操作や、投稿の購読を行ったりすることができます。 しかしまだこの段階では、例えばタイムラインへの新しい投稿を受信したりすることはできません。 それを行うには、ストリーム上で、後述する**チャンネル**に接続する必要があります。
+
+**ストリームでのやり取りはすべてJSONです。**
+
+## チャンネル
+MisskeyのストリーミングAPIにはチャンネルという概念があります。これは、送受信する情報を分離するための仕組みです。 Misskeyのストリームに接続しただけでは、まだリアルタイムでタイムラインの投稿を受信したりはできません。 ストリーム上でチャンネルに接続することで、様々な情報を受け取ったり情報を送信したりすることができるようになります。
+
+ひとつのストリーム上で、同時に複数のチャンネルに接続することができます。
+
+### チャンネルに接続する
+チャンネルに接続するには、次のようなデータをJSONでストリームに送信します:
+
+```json
+{
+    type: 'connect',
+    body: {
+        channel: 'xxxxxxxx',
+        id: 'foobar',
+        params: {
+            ...
+        }
+    }
+}
+```
+
+ここで、
+* `channel`には接続したいチャンネル名を設定します。チャンネルの種類については後述します。
+* `id`にはそのチャンネルとやり取りするための任意のIDを設定します。ストリームでは様々なメッセージが流れるので、そのメッセージがどのチャンネルからのものなのか識別する必要があるからです。このIDは、UUIDや、乱数のようなもので構いません。
+* `params`はチャンネルに接続する際のパラメータです。チャンネルによって接続時に必要とされるパラメータは異なります。パラメータ不要のチャンネルに接続する際は、このプロパティは省略可能です。
+
+<div class="info">ℹ️ IDはチャンネルごとではなく「チャンネルの接続ごと」です。なぜなら、同じチャンネルに異なるパラメータで複数接続するケースもあるからです。</div>
+
+### チャンネルからのメッセージを受け取る
+例えばタイムラインのチャンネルなら、新しい投稿があった時にメッセージを発します。そのメッセージを受け取ることで、タイムラインに新しい投稿がされたことをリアルタイムで知ることができます。
+
+チャンネルがメッセージを発すると、次のようなデータがJSONでストリームに流れてきます:
+```json
+{
+    type: 'channel',
+    body: {
+        id: 'foobar',
+        type: 'something',
+        body: {
+            some: 'thing'
+        }
+    }
+}
+```
+
+ここで、
+* `id`には前述したそのチャンネルに接続する際に設定したIDが設定されています。これで、このメッセージがどのチャンネルからのものなのか知ることができます。
+* `type`にはメッセージの種類が設定されます。チャンネルによって、どのような種類のメッセージが流れてくるかは異なります。
+* `body`にはメッセージの内容が設定されます。チャンネルによって、どのような内容のメッセージが流れてくるかは異なります。
+
+### チャンネルに向けてメッセージを送信する
+チャンネルによっては、メッセージを受け取るだけでなく、こちらから何かメッセージを送信し、何らかの操作を行える場合があります。
+
+チャンネルにメッセージを送信するには、次のようなデータをJSONでストリームに送信します:
+```json
+{
+    type: 'channel',
+    body: {
+        id: 'foobar',
+        type: 'something',
+        body: {
+            some: 'thing'
+        }
+    }
+}
+```
+
+ここで、
+* `id`には前述したそのチャンネルに接続する際に設定したIDを設定します。これで、このメッセージがどのチャンネルに向けたものなのか識別させることができます。
+* `type`にはメッセージの種類を設定します。チャンネルによって、どのような種類のメッセージを受け付けるかは異なります。
+* `body`にはメッセージの内容を設定します。チャンネルによって、どのような内容のメッセージを受け付けるかは異なります。
+
+### チャンネルから切断する
+チャンネルから切断するには、次のようなデータをJSONでストリームに送信します:
+
+```json
+{
+    type: 'disconnect',
+    body: {
+        id: 'foobar'
+    }
+}
+```
+
+ここで、
+* `id`には前述したそのチャンネルに接続する際に設定したIDを設定します。
+
+## ストリームを経由してAPIリクエストする
+
+ストリームを経由してAPIリクエストすると、HTTPリクエストを発生させずにAPIを利用できます。そのため、コードを簡潔にできたり、パフォーマンスの向上を見込めるかもしれません。
+
+ストリームを経由してAPIリクエストするには、次のようなデータをJSONでストリームに送信します:
+```json
+{
+    type: 'api',
+    body: {
+        id: 'xxxxxxxxxxxxxxxx',
+        endpoint: 'notes/create',
+        data: {
+            text: 'yee haw!'
+        }
+    }
+}
+```
+
+ここで、
+* `id`には、APIのレスポンスを識別するための、APIリクエストごとの一意なIDを設定する必要があります。UUIDや、簡単な乱数のようなもので構いません。
+* `endpoint`には、あなたがリクエストしたいAPIのエンドポイントを指定します。
+* `data`には、エンドポイントのパラメータを含めます。
+
+<div class="info">ℹ️ APIのエンドポイントやパラメータについてはAPIリファレンスをご確認ください。</div>
+
+### レスポンスの受信
+
+APIへリクエストすると、レスポンスがストリームから次のような形式で流れてきます。
+
+```json
+{
+    type: 'api:xxxxxxxxxxxxxxxx',
+    body: {
+        ...
+    }
+}
+```
+
+ここで、
+* `xxxxxxxxxxxxxxxx`の部分には、リクエストの際に設定された`id`が含まれています。これにより、どのリクエストに対するレスポンスなのか判別することができます。
+* `body`には、レスポンスが含まれています。
+
+## 投稿のキャプチャ
+
+Misskeyは投稿のキャプチャと呼ばれる仕組みを提供しています。これは、指定した投稿のイベントをストリームで受け取る機能です。
+
+例えばタイムラインを取得してユーザーに表示したとします。ここで誰かがそのタイムラインに含まれるどれかの投稿に対してリアクションしたとします。
+
+しかし、クライアントからするとある投稿にリアクションが付いたことなどは知る由がないため、リアルタイムでリアクションをタイムライン上の投稿に反映して表示するといったことができません。
+
+この問題を解決するために、Misskeyは投稿のキャプチャ機構を用意しています。投稿をキャプチャすると、その投稿に関するイベントを受け取ることができるため、リアルタイムでリアクションを反映させたりすることが可能になります。
+
+### 投稿をキャプチャする
+
+投稿をキャプチャするには、ストリームに次のようなメッセージを送信します:
+
+```json
+{
+    type: 'subNote',
+    body: {
+        id: 'xxxxxxxxxxxxxxxx'
+    }
+}
+```
+
+ここで、
+* `id`にキャプチャしたい投稿の`id`を設定します。
+
+このメッセージを送信すると、Misskeyにキャプチャを要請したことになり、以後、その投稿に関するイベントが流れてくるようになります。
+
+例えば投稿にリアクションが付いたとすると、次のようなメッセージが流れてきます:
+
+```json
+{
+    type: 'noteUpdated',
+    body: {
+        id: 'xxxxxxxxxxxxxxxx',
+        type: 'reacted',
+        body: {
+            reaction: 'like',
+            userId: 'yyyyyyyyyyyyyyyy'
+        }
+    }
+}
+```
+
+ここで、
+* `body`内の`id`に、イベントを発生させた投稿のIDが設定されます。
+* `body`内の`type`に、イベントの種類が設定されます。
+* `body`内の`body`に、イベントの詳細が設定されます。
+
+#### イベントの種類
+
+##### `reacted`
+その投稿にリアクションがされた時に発生します。
+
+* `reaction`に、リアクションの種類が設定されます。
+* `userId`に、リアクションを行ったユーザーのIDが設定されます。
+
+例:
+```json
+{
+    type: 'noteUpdated',
+    body: {
+        id: 'xxxxxxxxxxxxxxxx',
+        type: 'reacted',
+        body: {
+            reaction: 'like',
+            userId: 'yyyyyyyyyyyyyyyy'
+        }
+    }
+}
+```
+
+##### `deleted`
+その投稿が削除された時に発生します。
+
+* `deletedAt`に、削除日時が設定されます。
+
+例:
+```json
+{
+    type: 'noteUpdated',
+    body: {
+        id: 'xxxxxxxxxxxxxxxx',
+        type: 'deleted',
+        body: {
+            deletedAt: '2018-10-22T02:17:09.703Z'
+        }
+    }
+}
+```
+
+##### `pollVoted`
+その投稿に添付されたアンケートに投票された時に発生します。
+
+* `choice`に、選択肢IDが設定されます。
+* `userId`に、投票を行ったユーザーのIDが設定されます。
+
+例:
+```json
+{
+    type: 'noteUpdated',
+    body: {
+        id: 'xxxxxxxxxxxxxxxx',
+        type: 'pollVoted',
+        body: {
+            choice: 2,
+            userId: 'yyyyyyyyyyyyyyyy'
+        }
+    }
+}
+```
+
+### 投稿のキャプチャを解除する
+
+その投稿がもう画面に表示されなくなったりして、その投稿に関するイベントをもう受け取る必要がなくなったときは、キャプチャの解除を申請してください。
+
+次のメッセージを送信します:
+
+```json
+{
+    type: 'unsubNote',
+    body: {
+        id: 'xxxxxxxxxxxxxxxx'
+    }
+}
+```
+
+ここで、
+* `id`にキャプチャを解除したい投稿の`id`を設定します。
+
+このメッセージを送信すると、以後、その投稿に関するイベントは流れてこないようになります。
+
+# チャンネル一覧
+## `main`
+アカウントに関する基本的な情報が流れてきます。このチャンネルにパラメータはありません。
+
+### 流れてくるイベント一覧
+
+#### `renote`
+自分の投稿がRenoteされた時に発生するイベントです。自分自身の投稿をRenoteしたときは発生しません。
+
+#### `mention`
+誰かからメンションされたときに発生するイベントです。
+
+#### `readAllNotifications`
+自分宛ての通知がすべて既読になったことを表すイベントです。このイベントを利用して、「通知があることを示すアイコン」のようなものをオフにしたりする等のケースが想定されます。
+
+#### `meUpdated`
+自分の情報が更新されたことを表すイベントです。
+
+#### `follow`
+自分が誰かをフォローしたときに発生するイベントです。
+
+#### `unfollow`
+自分が誰かのフォローを解除したときに発生するイベントです。
+
+#### `followed`
+自分が誰かにフォローされたときに発生するイベントです。
+
+## `homeTimeline`
+ホームタイムラインの投稿情報が流れてきます。このチャンネルにパラメータはありません。
+
+### 流れてくるイベント一覧
+
+#### `note`
+タイムラインに新しい投稿が流れてきたときに発生するイベントです。
+
+## `localTimeline`
+ローカルタイムラインの投稿情報が流れてきます。このチャンネルにパラメータはありません。
+
+### 流れてくるイベント一覧
+
+#### `note`
+ローカルタイムラインに新しい投稿が流れてきたときに発生するイベントです。
+
+## `hybridTimeline`
+ソーシャルタイムラインの投稿情報が流れてきます。このチャンネルにパラメータはありません。
+
+### 流れてくるイベント一覧
+
+#### `note`
+ソーシャルタイムラインに新しい投稿が流れてきたときに発生するイベントです。
+
+## `globalTimeline`
+グローバルタイムラインの投稿情報が流れてきます。このチャンネルにパラメータはありません。
+
+### 流れてくるイベント一覧
+
+#### `note`
+グローバルタイムラインに新しい投稿が流れてきたときに発生するイベントです。
diff --git a/src/docs/ug-CN/features/antenna.md b/src/docs/ug-CN/features/antenna.md
new file mode 100644
index 0000000000..94ad9e4aea
--- /dev/null
+++ b/src/docs/ug-CN/features/antenna.md
@@ -0,0 +1,4 @@
+# アンテナ
+アンテナは、自由に条件を設定して、合致するノートを自動で収集することができる機能です。
+
+条件を設定したアンテナが作成された状態で、条件に合致するノートが投稿されると、リアルタイムでそのアンテナのタイムラインにノートが追加されます。
diff --git a/src/docs/ug-CN/features/custom-emoji.md b/src/docs/ug-CN/features/custom-emoji.md
new file mode 100644
index 0000000000..ed2e92be16
--- /dev/null
+++ b/src/docs/ug-CN/features/custom-emoji.md
@@ -0,0 +1,2 @@
+# カスタム絵文字
+カスタム絵文字は、インスタンスで用意された画像を絵文字のように使える機能です。 ノート、リアクション、チャット、自己紹介、名前などの場所で使うことができます。 カスタム絵文字をそれらの場所で使うには、絵文字ピッカーボタン(ある場合)を押すか、`:`を入力して絵文字サジェストを表示します。 テキスト内に`:foo:`のような形式の文字列が見つかると、`foo`の部分がカスタム絵文字名と解釈され、表示時には対応したカスタム絵文字に置き換わります。
diff --git a/src/docs/ug-CN/features/deck.md b/src/docs/ug-CN/features/deck.md
new file mode 100644
index 0000000000..8057e262fd
--- /dev/null
+++ b/src/docs/ug-CN/features/deck.md
@@ -0,0 +1,18 @@
+# デッキ
+
+デッキは利用可能なUIのひとつです。「カラム」と呼ばれるビューを複数並べて表示させることで、カスタマイズ性が高く、情報量の多いUIが構築できることが特徴です。
+
+## カラムの追加
+デッキの背景を右クリックし、「カラムを追加」して任意のカラムを追加できます。
+
+## カラムの移動
+カラムは、ドラッグアンドドロップで他のカラムと位置を入れ替えることが出来るほか、カラムメニュー(カラムのヘッダー右クリック)から位置を移動させることもできます。
+
+## カラムの水平分割
+カラムは左右だけでなく、上下に並べることもできます。 カラムメニューを開き、「左に重ねる」を選択すると、左のカラムの下に現在のカラムが移動します。 上下分割を解除するには、カラムメニューの「右に出す」を選択します。
+
+## カラムの設定
+カラムメニューの「編集」を選択するとカラムの設定を編集できます。カラムの名前を変えたり、幅を変えたりできます。
+
+## デッキの設定
+デッキに関する設定は、[settings/deck](/settings/deck)で行えます。
diff --git a/src/docs/ug-CN/features/drive.md b/src/docs/ug-CN/features/drive.md
new file mode 100644
index 0000000000..b82a41082a
--- /dev/null
+++ b/src/docs/ug-CN/features/drive.md
@@ -0,0 +1,17 @@
+# ドライブ
+ドライブは、Misskey上でファイルを管理できる機能です。
+
+[ドライブのページ](/my/drive)から任意のファイルをアップロードできるほか、アバターに設定した画像や、ノートに添付したファイルなどもすべてドライブにアップロードされます。
+
+<div class="warn">⚠️ ドライブからファイルを削除すると、そのファイルが添付されたノートも消えます。</div>
+
+ドライブにアップロードされたファイルは、いつでもダウンロードすることができるほか、ノート作成時に「ドライブからファイルを添付」することでファイルを再利用することもできます。
+
+ドライブ内にフォルダを作り、複数のファイルをまとめて整理することもできます。
+
+## 閲覧注意 (NSFW)
+<div class="info">ℹ️ この項目が閲覧注意なわけではありません</div>
+
+閲覧注意またはNSFW (Not safe for work) は、ドライブのファイルに設定することができるフラグです。 閲覧注意フラグを設定されたファイルは、表示される際に閲覧者の操作なしには表示されなくなります。 このフラグは、例えば職場や公共の場で閲覧するのに適切でないと思われる画像などに設定し、そのような画像が突然表示されてしまうことを防ぐ目的で使われます。
+
+このフラグは手動でオンオフを切り替えられるほか、モデレーターの判断で設定される場合もあります。
diff --git a/src/docs/ug-CN/features/favorite.md b/src/docs/ug-CN/features/favorite.md
new file mode 100644
index 0000000000..a0e5f8bf78
--- /dev/null
+++ b/src/docs/ug-CN/features/favorite.md
@@ -0,0 +1,4 @@
+# お気に入り
+[ノート](./node)をお気に入りとして登録できる機能です。 お気に入り登録したノートは、[お気に入りページ](./my/favorites)で一覧することができます。 お気に入りに登録したことは相手に通知されず、お気に入りは自分しか見ることができません。
+
+ノートをお気に入り登録するには、ノートメニューの「お気に入り」を押します。お気に入り解除するには、ノートメニューの「お気に入り解除」を押します。
diff --git a/src/docs/ug-CN/features/follow.md b/src/docs/ug-CN/features/follow.md
new file mode 100644
index 0000000000..3c1ea7bbe0
--- /dev/null
+++ b/src/docs/ug-CN/features/follow.md
@@ -0,0 +1,2 @@
+# フォロー
+ユーザーをフォローすると、タイムラインにそのユーザーの投稿が表示されるようになります。ただし、他のユーザーに対する返信は含まれません。 ユーザーをフォローするには、ユーザーページの「フォロー」ボタンをクリックします。フォローを解除するには、もう一度クリックします。
diff --git a/src/docs/ug-CN/features/keyboard-shortcut.md b/src/docs/ug-CN/features/keyboard-shortcut.md
new file mode 100644
index 0000000000..cde62f29c4
--- /dev/null
+++ b/src/docs/ug-CN/features/keyboard-shortcut.md
@@ -0,0 +1,66 @@
+# キーボードショートカット
+
+## グローバル
+これらのショートカットは基本的にどこでも使えます。
+<table>
+    <thead>
+        <tr><th>ショートカット</th><th>効果</th><th>由来</th></tr>
+    </thead>
+    <tbody>
+        <tr><td><kbd class="key">P</kbd>, <kbd class="key">N</kbd></td><td>新規投稿</td><td><b>P</b>ost, <b>N</b>ew, <b>N</b>ote</td></tr>
+        <tr><td><kbd class="key">T</kbd></td><td>タイムラインの最も新しい投稿にフォーカス</td><td><b>T</b>imeline, <b>T</b>op</td></tr>
+        <tr><td><kbd class="group"><kbd class="key">Shift</kbd> + <kbd class="key">N</kbd></kbd></td><td>通知を表示/隠す</td><td><b>N</b>otifications</td></tr>
+        <tr><td><kbd class="key">S</kbd></td><td>ئىزدەش</td><td><b>S</b>earch</td></tr>
+        <tr><td><kbd class="key">H</kbd>, <kbd class="key">?</kbd></td><td>ヘルプを表示</td><td><b>H</b>elp</td></tr>
+    </tbody>
+</table>
+
+## 投稿にフォーカスされた状態
+<table>
+    <thead>
+        <tr><th>ショートカット</th><th>効果</th><th>由来</th></tr>
+    </thead>
+    <tbody>
+        <tr><td><kbd class="key">↑</kbd>, <kbd class="key">K</kbd>, <kbd class="group"><kbd class="key">Shift</kbd> + <kbd class="key">Tab</kbd></kbd></td><td>上の投稿にフォーカスを移動</td><td>-</td></tr>
+        <tr><td><kbd class="key">↓</kbd>, <kbd class="key">J</kbd>, <kbd class="key">Tab</kbd></td><td>下の投稿にフォーカスを移動</td><td>-</td></tr>
+        <tr><td><kbd class="key">R</kbd></td><td>返信フォームを開く</td><td><b>R</b>eply</td></tr>
+        <tr><td><kbd class="key">Q</kbd></td><td>Renoteフォームを開く</td><td><b>Q</b>uote</td></tr>
+        <tr><td><kbd class="group"><kbd class="key">Ctrl</kbd> + <kbd class="key">Q</kbd></kbd></td><td>即刻Renoteする(フォームを開かずに)</td><td>-</td></tr>
+        <tr><td><kbd class="key">E</kbd>, <kbd class="key">A</kbd>, <kbd class="key">+</kbd></td><td>リアクションフォームを開く</td><td><b>E</b>mote, re<b>A</b>ction</td></tr>
+        <tr><td><kbd class="key">0</kbd>~<kbd class="key">9</kbd></td><td>数字に対応したリアクションをする(対応については後述)</td><td>-</td></tr>
+        <tr><td><kbd class="key">F</kbd>, <kbd class="key">B</kbd></td><td>お気に入りに登録</td><td><b>F</b>avorite, <b>B</b>ookmark</td></tr>
+        <tr><td><kbd class="key">Del</kbd>, <kbd class="group"><kbd class="key">Ctrl</kbd> + <kbd class="key">D</kbd></kbd></td><td>投稿を削除</td><td><b>D</b>elete</tr>
+        <tr><td><kbd class="key">M</kbd>, <kbd class="key">O</kbd></td><td>投稿に対するメニューを開く</td><td><b>M</b>ore, <b>O</b>ther</td></tr>
+        <tr><td><kbd class="key">S</kbd></td><td>CWで隠された部分を表示 or 隠す</td><td><b>S</b>how, <b>S</b>ee</td></tr>
+        <tr><td><kbd class="key">Esc</kbd></td><td>フォーカスを外す</td><td>-</td></tr>
+    </tbody>
+</table>
+
+## Renoteフォーム
+<table>
+    <thead>
+        <tr><th>ショートカット</th><th>効果</th><th>由来</th></tr>
+    </thead>
+    <tbody>
+        <tr><td><kbd class="key">Enter</kbd></td><td>Renoteする</td><td>-</td></tr>
+        <tr><td><kbd class="key">Q</kbd></td><td>フォームを展開する</td><td><b>Q</b>uote</td></tr>
+        <tr><td><kbd class="key">Esc</kbd></td><td>フォームを閉じる</td><td>-</td></tr>
+    </tbody>
+</table>
+
+## リアクションフォーム
+デフォルトで「👍」にフォーカスが当たっている状態です。
+<table>
+    <thead>
+        <tr><th>ショートカット</th><th>効果</th><th>由来</th></tr>
+    </thead>
+    <tbody>
+        <tr><td><kbd class="key">↑</kbd>, <kbd class="key">K</kbd></td><td>上のリアクションにフォーカスを移動</td><td>-</td></tr>
+        <tr><td><kbd class="key">↓</kbd>, <kbd class="key">J</kbd></td><td>下のリアクションにフォーカスを移動</td><td>-</td></tr>
+        <tr><td><kbd class="key">←</kbd>, <kbd class="key">H</kbd>, <kbd class="group"><kbd class="key">Shift</kbd> + <kbd class="key">Tab</kbd></kbd></td><td>左のリアクションにフォーカスを移動</td><td>-</td></tr>
+        <tr><td><kbd class="key">→</kbd>, <kbd class="key">L</kbd>, <kbd class="key">Tab</kbd></td><td>右のリアクションにフォーカスを移動</td><td>-</td></tr>
+        <tr><td><kbd class="key">Enter</kbd>, <kbd class="key">Space</kbd>, <kbd class="key">+</kbd></td><td>リアクション確定</td><td>-</td></tr>
+        <tr><td><kbd class="key">0</kbd>~<kbd class="key">9</kbd></td><td>数字に対応したリアクションで確定</td><td>-</td></tr>
+        <tr><td><kbd class="key">Esc</kbd></td><td>リアクションするのをやめる</td><td>-</td></tr>
+    </tbody>
+</table>
diff --git a/src/docs/ug-CN/features/mfm.md b/src/docs/ug-CN/features/mfm.md
new file mode 100644
index 0000000000..5be2df4f30
--- /dev/null
+++ b/src/docs/ug-CN/features/mfm.md
@@ -0,0 +1,12 @@
+# MFM
+MFMは、Misskey Flavored Markdownの略で、Misskeyの様々な場所で使用できる専用のマークアップ言語です。 MFMで使用可能な構文は[MFMチートシート](/mfm-cheat-sheet)で確認できます。
+
+## MFMが使用可能な場所の例
+- ノート本文
+- CW注釈
+- ユーザーの名前
+- ユーザーの自己紹介
+
+## 開発者向け情報
+MFMのパーサー実装はライブラリとして公開されており、簡単にクライアントにMFMを組み込むことが可能です。
+- [misskey-dev/mfm.js](https://github.com/misskey-dev/mfm.js) - JavaScriptパーサー実装
diff --git a/src/docs/ug-CN/features/mute.md b/src/docs/ug-CN/features/mute.md
new file mode 100644
index 0000000000..6a9608662a
--- /dev/null
+++ b/src/docs/ug-CN/features/mute.md
@@ -0,0 +1,13 @@
+# ミュート
+
+ユーザーをミュートすると、そのユーザーに関する次のコンテンツがMisskeyに表示されなくなります:
+
+* タイムラインや投稿の検索結果内の、そのユーザーの投稿(およびそれらの投稿に対する返信やRenote)
+* そのユーザーからの通知
+* メッセージ履歴一覧内の、そのユーザーとのメッセージ履歴
+
+ユーザーをミュートするには、対象のユーザーのユーザーページに表示されている「ミュート」ボタンを押します。
+
+ミュートを行ったことは相手に通知されず、ミュートされていることを知ることもできません。
+
+設定>ミュート から、自分がミュートしているユーザー一覧を確認することができます。
diff --git a/src/docs/ug-CN/features/note.md b/src/docs/ug-CN/features/note.md
new file mode 100644
index 0000000000..62440b25f9
--- /dev/null
+++ b/src/docs/ug-CN/features/note.md
@@ -0,0 +1,51 @@
+# ノート
+ノートは、Misskeyに投稿される、文章、ファイル、アンケートなどを含むコンテンツで、Misskeyの中心的概念です。また、そのノートを作成する行為自体もノートと呼ばれます。
+
+ノートが作成されると、[タイムライン](./timeline)に追加され、自分の[フォロワー](./follow)やサーバーのユーザーが見れるようになります。
+
+ノートには、[リアクション](./reaction)を行うことができます。また、返信や引用もできます。
+
+ノートを[お気に入り](./favorite)登録することで、後で簡単に見返すことができます。
+
+## ノートを作成する
+ノートを作成するには、画面上にある鉛筆マークのボタンを押して、作成フォームを開きます。作成フォームに内容を入力し、「ノート」ボタンを押すことでノートが作成されます。 ノートには、画像、動画など任意のファイルや、[アンケート](./poll)を添付することができます。また、本文中には[MFM](./mfm)が使用でき、[メンション](./mention)や[ハッシュタグ](./hashtag)を含めることもできます。 他にも、CWや公開範囲といった設定も行えます(詳細は後述)。
+<div class="info">ℹ️ コンピューターのクリップボードに画像データがある状態で、フォーム内のテキストボックスにペーストするとその画像を添付することができます。</div>
+<div class="info">ℹ️ テキストボックス内で<kbd class="key">Ctrl + Enter</kbd>を押すことでも投稿できます。</div>
+
+## Renote
+既にあるノートを引用、もしくはそのノートを新しいノートとして共有する行為、またそれによって作成されたノートをRenoteと呼びます。 自分がフォローしているユーザーの、気に入ったノートを自分のフォロワーに共有したい場合や、過去の自分のノートを再度共有したい場合に使います。 同じノートに対して無制限にRenoteを行うことができますが、あまり連続して使用すると迷惑になる場合もあるので、注意しましょう。
+<div class="warn">⚠️ 公開範囲がフォロワーやダイレクトのノートはRenoteできません</div>
+
+Renoteを削除するには、Renoteの時刻表示の隣にある「...」を押し、「Renote解除」を選択します。
+
+## CW
+Contents Warningの略で、ノートの内容を、閲覧者の操作なしには表示しないようにできる機能です。主に長大な内容を隠すためや、ネタバレ防止などに使うことができます。 設定するには、フォームの「内容を隠す」ボタン(目のアイコン)を押します。すると新しい入力エリアが表れるので、そこに内容の要約を記入します。
+
+## 公開範囲
+ノートごとに、そのノートが公開される範囲を設定することができます。フォームの「ノート」ボタンの左にあるアイコンを押すと公開範囲を以下から選択できます。
+
+### パブリック
+全ての人に対してノートが公開されるほか、サーバーの全てのタイムライン(ホームタイムライン、ローカルタイムライン、ソーシャルタイムライン、グローバルタイムライン)にノートが流れます。
+<div class="warn">⚠️ アカウントが<a href="./silence">サイレンス</a>状態の時は、この公開範囲は使用できません。</div>
+
+### ホーム
+全ての人に対してノートが公開されますが、フォロワー以外のローカルタイムライン、ソーシャルタイムライン、グローバルタイムラインにはノートは流れません。
+
+### フォロワー
+自分のフォロワーに対してのみノートを公開します。フォロワーの全てのタイムラインに流れます。
+
+### ダイレクト
+指定したユーザーに対してのみノートを公開します。指定したユーザーの全てのタイムラインに流れます。
+
+### 「ローカルのみ」オプション
+このオプションを有効にすると、リモートにノートを連合しなくなります。
+
+### 公開範囲の比較
+<table>
+    <tr><th></th><th>パブリック</th><th>ホーム</th><th>フォロワー</th><th>ダイレクト</th></tr>
+    <tr><th>フォロワーのLTL/STL/GTL</th><td>✔</td><td>✔</td><td>✔</td><td></td></tr>
+    <tr><th>非フォロワーのLTL/STL/GTL</th><td>✔</td><td></td><td></td><td></td></tr>
+</table>
+
+## ピン留め
+ノートをピン留めすると、ユーザーページに常にそのノートを表示しておくことができます。 ノートのメニューを開き、「ピン留め」を選択してピン留めできます。 複数のノートをピン留めできます。
diff --git a/src/docs/ug-CN/features/pages.md b/src/docs/ug-CN/features/pages.md
new file mode 100644
index 0000000000..a7311b95e6
--- /dev/null
+++ b/src/docs/ug-CN/features/pages.md
@@ -0,0 +1,10 @@
+# Pages
+
+## 変数
+変数を使うことで動的なページを作成できます。テキスト内で <b>{ 変数名 }</b> と書くとそこに変数の値を埋め込めます。例えば <b>Hello { thing } world!</b> というテキストで、変数(thing)の値が <b>ai</b> だった場合、テキストは <b>Hello ai world!</b> になります。
+
+変数の評価(値を算出すること)は上から下に行われるので、ある変数の中で自分より下の変数を参照することはできません。例えば上から <b>A、B、C</b> と3つの変数を定義したとき、<b>C</b>の中で<b>A</b>や<b>B</b>を参照することはできますが、<b>A</b>の中で<b>B</b>や<b>C</b>を参照することはできません。
+
+ユーザーからの入力を受け取るには、ページに「ユーザー入力」ブロックを設置し、「変数名」に入力を格納したい変数名を設定します(変数は自動で作成されます)。その変数を使ってユーザー入力に応じた動作を行えます。
+
+関数を使うと、値の算出処理を再利用可能な形にまとめることができます。関数を作るには、「関数」タイプの変数を作成します。関数にはスロット(引数)を設定することができ、スロットの値は関数内で変数として利用可能です。また、関数を引数に取る関数(高階関数と呼ばれます)も存在します。関数は予め定義しておくほかに、このような高階関数のスロットに即席でセットすることもできます。
diff --git a/src/docs/ug-CN/features/reaction.md b/src/docs/ug-CN/features/reaction.md
new file mode 100644
index 0000000000..4d479fd416
--- /dev/null
+++ b/src/docs/ug-CN/features/reaction.md
@@ -0,0 +1,11 @@
+# リアクション
+他の人のノートに、絵文字を付けて簡単にあなたの反応を伝えられる機能です。 リアクションするには、ノートの + アイコンをクリックしてピッカーを表示し、絵文字を選択します。 リアクションには[カスタム絵文字](./custom-emoji)も使用できます。
+
+## リアクションピッカーのカスタマイズ
+ピッカーに表示される絵文字を自分好みにカスタマイズすることができます。 設定の「リアクション」で設定します。
+
+## リモート投稿へのリアクションについて
+リアクションはMisskeyオリジナルの機能であるため、リモートインスタンスがMisskeyでない限りは、ほとんどの場合「Like」としてアクティビティが送信されます。一般的にはLikeは「お気に入り」として実装されているようです。
+
+## リモートからのリアクションについて
+リモートから「Like」アクティビティを受信したとき、Misskeyでは「👍」のリアクションとして解釈されます。
diff --git a/src/docs/ug-CN/features/silence.md b/src/docs/ug-CN/features/silence.md
new file mode 100644
index 0000000000..7e26feab0d
--- /dev/null
+++ b/src/docs/ug-CN/features/silence.md
@@ -0,0 +1,6 @@
+# サイレンス
+サイレンスは、アカウントに設定される状態のひとつです。
+
+アカウントがサイレンス状態になると、ノートの公開範囲をパブリックにできなくなります。 ホーム、フォロワー、ダイレクトは選択可能なため、サイレンスを受けた場合でもフォロワーやあなたのユーザーページを直接訪れた場合は投稿を閲覧できますが、GTL(連合タイムライン)やLTL(ローカルタイムライン)には投稿が流れません。
+
+アカウントのサイレンス状態は、サーバーのモデレーターによって有効化/無効化されます。
diff --git a/src/docs/ug-CN/features/theme.md b/src/docs/ug-CN/features/theme.md
new file mode 100644
index 0000000000..a406f3433c
--- /dev/null
+++ b/src/docs/ug-CN/features/theme.md
@@ -0,0 +1,68 @@
+# テーマ
+
+テーマを設定して、Misskeyクライアントの見た目を変更できます。
+
+## テーマの設定
+設定 > テーマ
+
+## テーマを作成する
+テーマコードはJSON5で記述されたテーマオブジェクトです。 テーマは以下のようなオブジェクトです。
+``` js
+{
+    id: '17587283-dd92-4a2c-a22c-be0637c9e22a',
+
+    name: 'Danboard',
+    author: 'syuilo',
+
+    base: 'light',
+
+    props: {
+        accent: 'rgb(218, 141, 49)',
+        bg: 'rgb(218, 212, 190)',
+        fg: 'rgb(115, 108, 92)',
+        panel: 'rgb(236, 232, 220)',
+        renote: 'rgb(100, 152, 106)',
+        link: 'rgb(100, 152, 106)',
+        mention: '@accent',
+        hashtag: 'rgb(100, 152, 106)',
+        header: 'rgba(239, 227, 213, 0.75)',
+        navBg: 'rgb(216, 206, 182)',
+        inputBorder: 'rgba(0, 0, 0, 0.1)',
+    },
+}
+
+```
+
+* `id` ... テーマの一意なID。UUIDをおすすめします。
+* `name` ... テーマ名
+* `author` ... テーマの作者
+* `desc` ... テーマの説明(オプション)
+* `base` ... 明るいテーマか、暗いテーマか
+    * `light`にすると明るいテーマになり、`dark`にすると暗いテーマになります。
+    * テーマはここで設定されたベーステーマを継承します。
+* `props` ... テーマのスタイル定義。これから説明します。
+
+### テーマのスタイル定義
+`props`下にはテーマのスタイルを定義します。 キーがCSSの変数名になり、バリューで中身を指定します。 なお、この`props`オブジェクトはベーステーマから継承されます。 ベーステーマは、このテーマの`base`が`light`なら[_light.json5](https://github.com/misskey-dev/misskey/blob/develop/src/client/themes/_light.json5)で、`dark`なら[_dark.json5](https://github.com/misskey-dev/misskey/blob/develop/src/client/themes/_dark.json5)です。 つまり、このテーマ内の`props`に`panel`というキーが無くても、そこにはベーステーマの`panel`があると見なされます。
+
+#### バリューで使える構文
+* 16進数で表された色
+    * 例: `#00ff00`
+* `rgb(r, g, b)`形式で表された色
+    * 例: `rgb(0, 255, 0)`
+* `rgb(r, g, b, a)`形式で表された透明度を含む色
+    * 例: `rgba(0, 255, 0, 0.5)`
+* 他のキーの値の参照
+    * `@{キー名}`と書くと他のキーの値の参照になります。`{キー名}`は参照したいキーの名前に置き換えます。
+    * 例: `@panel`
+* 定数(後述)の参照
+    * `${定数名}`と書くと定数の参照になります。`{定数名}`は参照したい定数の名前に置き換えます。
+    * 例: `$main`
+* 関数(後述)
+    * `:{関数名}<{引数}<{色}`
+
+#### 定数
+「CSS変数として出力はしたくないが、他のCSS変数の値として使いまわしたい」値があるときは、定数を使うと便利です。 キー名を`$`で始めると、そのキーはCSS変数として出力されません。
+
+#### 関数
+wip
diff --git a/src/docs/ug-CN/features/timeline.md b/src/docs/ug-CN/features/timeline.md
new file mode 100644
index 0000000000..f431014f84
--- /dev/null
+++ b/src/docs/ug-CN/features/timeline.md
@@ -0,0 +1,31 @@
+# タイムライン
+タイムラインは、[ノート](./note)が時系列で表示される機能です。 タイムラインには以下で示す種類があり、種類によって表示されるノートも異なります。 なお、タイムラインの種類によってはサーバーにより無効になっている場合があります。
+
+## ホーム
+自分のフォローしているユーザーの投稿が流れます。HTLと略されます。
+
+## ローカル
+全てのローカルユーザーの「ホーム」指定されていない投稿が流れます。LTLと略されます。
+
+## ソーシャル
+自分のフォローしているユーザーの投稿と、全てのローカルユーザーの「ホーム」指定されていない投稿が流れます。STLと略されます。
+
+## グローバル
+全てのローカルユーザーの「ホーム」指定されていない投稿と、サーバーに届いた全てのリモートユーザーの「ホーム」指定されていない投稿が流れます。GTLと略されます。
+
+## 比較
+| ソース          |       |     | タイムライン |       |       |
+| ------------ | ----- | --- | ------ | ----- | ----- |
+| ユーザー         | 公開範囲  | ホーム | ローカル   | ソーシャル | グローバル |
+| ローカル (フォロー)  | 公開    | ✔   | ✔      | ✔     | ✔     |
+|              | ホーム   | ✔   |        | ✔     |       |
+|              | フォロワー | ✔   | ✔      | ✔     | ✔     |
+| リモート (フォロー)  | 公開    | ✔   |        | ✔     | ✔     |
+|              | ホーム   | ✔   |        | ✔     |       |
+|              | フォロワー | ✔   |        | ✔     | ✔     |
+| ローカル (未フォロー) | 公開    |     | ✔      | ✔     | ✔     |
+|              | ホーム   |     |        |       |       |
+|              | フォロワー |     |        |       |       |
+| リモート (未フォロー) | 公開    |     |        |       | ✔     |
+|              | ホーム   |     |        |       |       |
+|              | フォロワー |     |        |       |       |
diff --git a/src/docs/ug-CN/features/widgets.md b/src/docs/ug-CN/features/widgets.md
new file mode 100644
index 0000000000..a7c2c1d1d6
--- /dev/null
+++ b/src/docs/ug-CN/features/widgets.md
@@ -0,0 +1,7 @@
+# ウィジェット
+ウィジェットは、MisskeyのUI上に設置できる小型の情報表示、操作が行えるパーツです。
+
+ウィジェットを編集するには、ウィジェット編集モードに切り替えます。切り替え方法はUIによって異なります。 ウィジェット編集モードでは、ウィジェットの追加、削除、並び替え、およびそれぞれのウィジェットの設定を行えます。
+
+## 利用可能なウィジェット一覧
+todo
diff --git a/src/docs/ug-CN/general/apps.md b/src/docs/ug-CN/general/apps.md
new file mode 100644
index 0000000000..1f4c85fe8f
--- /dev/null
+++ b/src/docs/ug-CN/general/apps.md
@@ -0,0 +1,6 @@
+# サードパーティアプリのリスト
+## クライアント
+todo
+
+## 連携サービス
+todo
diff --git a/src/docs/ug-CN/general/faq.md b/src/docs/ug-CN/general/faq.md
new file mode 100644
index 0000000000..ecb664e32e
--- /dev/null
+++ b/src/docs/ug-CN/general/faq.md
@@ -0,0 +1,22 @@
+# よくある質問
+ここでは利用上のよくある質問について掲載しています。 Misskeyのプロジェクト自体についてのよくある質問は[こちら](./misskey)に掲載されています。
+
+### iOS/Androidのアプリはありますか?
+公式にはそういったOSのネイティブアプリを開発していませんが、サードパーティ製のアプリがいくつかあります。 詳しくは[こちら](./apps)をご覧ください。
+
+ただ、サードパーティ製アプリはどうしても機能への対応が遅れてしまうため、とくに拘りがなければ公式のWebクライアントの利用をおすすめします。 なお、MisskeyのWebクライアントはPWAに対応しているので、ネイティブアプリのように動作させることも可能です。 詳しくは[こちら](todo)をご覧ください。
+
+## 他のサーバーのユーザーをフォローするときは?
+メニューから検索を選び、ユーザー名をホスト込みで入力します。例: `@syuilo@misskey.io`
+
+## Renoteを削除するには?
+Renoteの時刻表示の隣にある「...」を押し、「Renote解除」を選択します。 Renoteについては[こちら](../features/note)をご確認ください。
+
+## URLのプレビューを表示させたくない
+MFMには、そのURLのプレビューを無効にする構文があります。詳細は[MFMチートシート](/mfm-cheat-sheet)をご確認ください。
+
+## カスタム絵文字を追加したい
+運営者のみがカスタム絵文字を追加、編集、削除できます。それらを希望する場合は運営者に依頼してください。
+
+## Botを開発したい
+Misskey APIを利用してBotの開発が可能です。[こちら](../advanced/develop-bot)をご確認ください。
diff --git a/src/docs/ug-CN/general/glossary.md b/src/docs/ug-CN/general/glossary.md
new file mode 100644
index 0000000000..1f403a06d2
--- /dev/null
+++ b/src/docs/ug-CN/general/glossary.md
@@ -0,0 +1,83 @@
+# 用語集
+Misskeyに関する用語集です。
+
+## AcitivityPub
+(読み: あくてぃびてぃぱぶ) 分散型を実現するために用いられるプロトコル(仕様)。このプロトコルに則ってサーバー同士通信を行うことで、連合が行われ、Fediverseを形成しています。
+
+## AiScript
+(読み: あいすくりぷと) Misskey上で使用できるプログラミング言語です。詳細は[こちら。](../advanced/aiscript)
+
+## API
+(読み: えーぴーあい) Misskeyのサーバーが公開している、プログラムからMisskeyを扱うためのインターフェース。詳細は[こちら。](../advanced/api)
+
+## Bot
+(読み: ぼっと) プログラムによって動作しているアカウント。
+
+## CW
+(読み: こんてんつわーにんぐ) Contents Warningの略。ノートの内容を、操作なしには表示しないようにできる機能。主に長大な内容を隠すためや、ネタバレ防止などに使われます。
+
+## Fediverse
+(読み: ふぇでぃばーす) Misskeyを含む様々な分散型ソフトウェアのサーバーで構成されたネットワーク。
+
+## GTL
+グローバルタイムライン(Global TimeLine)の略。タイムラインの詳細は[こちら。](../features/timeline)
+
+## HTL
+ホームタイムライン(Home TimeLine)の略。タイムラインの詳細は[こちら。](../features/timeline)
+
+## LTL
+ローカルタイムライン(Local TimeLine)の略。タイムラインの詳細は[こちら。](../features/timeline)
+
+## MFM
+(読み: えむえふえむ) Misskey Flavored Markdownの略で、Misskey上で使用できるマークアップ言語です。詳細は[こちら。](../features/mfm)
+
+## NSFW
+(読み: のっとせーふふぉーわーく) Not Safe For Workの略。画像を「閲覧注意」扱いにし、操作なしには表示しないようにすることができる機能。
+
+## Renote
+(読み: りのーと) 既にあるノートを引用、もしくはそのノートを新しいノートとして共有する行為、またそれによって作成されたノート。詳細は[こちら。](../features/note)
+
+## STL
+ソーシャルタイムライン(Social TimeLine)の略。タイムラインの詳細は[こちら。](../features/timeline)
+
+## 藍
+(読み: あい) Misskeyの看板娘(公式キャラクター)です。
+
+## アクティブユーザー
+インスタンスにアカウントを作っているユーザーのうち、現在も実際にサービスを利用しているユーザーのこと。
+
+## インスタンス
+todo
+
+## コントロールパネル
+インスタンスの設定画面のこと。
+
+## サーバー
+todo
+
+## サイレンス
+ノートをパブリックな公開範囲で投稿できなくされている状態。モデレーターの判断でユーザーごとに設定されます。詳細は[こちら。](../features/silence)
+
+## 凍結
+アカウントが使用不可に設定されている状態。
+
+## ドライブ
+Misskeyにアップロードしたファイルを管理する機能。詳細は[こちら。](../features/drive)
+
+## ノート
+Misskeyに投稿される、文章、ファイル、アンケートなどを含めることができるコンテンツ。詳細は[こちら。](../features/note)
+
+## ミスキスト
+Misskeyを使う人のこと。
+
+## モデレーター
+スパムの凍結およびサイレンスや不適切な投稿の削除など、コミュニティ運営に関する権限を持つユーザー。
+
+## リモート
+他サーバーのことを指します。リモートユーザーといったように接頭辞としても使われます。ローカルの逆です。
+
+## 連合
+サーバー上で作成された情報が他のサーバーに伝わること。
+
+## ローカル
+自サーバーのことを指します。ローカルユーザー、ローカルタイムラインといったように接頭辞としても使われます。リモートの逆です。
diff --git a/src/docs/ug-CN/general/links.md b/src/docs/ug-CN/general/links.md
new file mode 100644
index 0000000000..d6b16856fb
--- /dev/null
+++ b/src/docs/ug-CN/general/links.md
@@ -0,0 +1,5 @@
+# リンク集
+
+## ライブラリ
+- [misskey-dev/misskey.js](https://github.com/misskey-dev/misskey.js) - JavaScriptのMisskey SDK
+- [misskey-dev/mfm.js](https://github.com/misskey-dev/mfm.js) - JavaScriptのMFMパーサー実装
diff --git a/src/docs/ug-CN/general/misskey.md b/src/docs/ug-CN/general/misskey.md
new file mode 100644
index 0000000000..1e64a10e28
--- /dev/null
+++ b/src/docs/ug-CN/general/misskey.md
@@ -0,0 +1,87 @@
+# Misskeyについて
+
+Misskeyはオープンソースの分散型マイクロブログプラットフォームプロジェクトです。 開発は日本でsyuiloによって2014年から開始されました。 ドライブ、リアクションなどの豊富な機能や、高いカスタマイズ性を備えたUIを持つことが特徴です。
+
+## 歴史
+開発当初は掲示板がメインのサービスでしたが、ユーザーが短文を投稿し、それを時系列で流れるタイムライン機能を追加したところ人気が高まり、徐々にそれがメインとして開発が進むようになりました。 当初は分散型ではありませんでしたが、2018年にAcitivityPubを実装し分散型になったことで、より多くの方に認知され利用されるサービスになり、現在に至ります。
+<div class="info">ℹ️ Misskeyという名前は、syuiloが当時聴いていたMay'nというアーティストの楽曲、Brain Diverの歌詞に由来します。</div>
+
+誰でも開発に参加することができ、現在でも活発に開発が続いています。
+
+## 分散型とは何か?
+
+<b>分散(distributed)型</b>とは、<b>非中央集権(decentralized)</b>とも呼ばれ、コミュニティが多数のサーバーに分散して存在し、それらが相互に<b>通信(連合、federation)</b>することでコンテンツ共有<b>ネットワーク(Fediverse)</b>を形成していることが特徴のサービスです。 単一のサーバーしか存在しない、もしくは複数存在しても互いに独立している場合は中央集権なサービスと言われ、例えばTwitterやFacebookなどほとんどのサービスがそれに該当します。 分散型のメリットは、自分に合った運営者やテーマのサーバーを選択できることです。自分でサーバーを作成することもできます。連合するおかげで、どのサーバーを選んでも、同じコミュニティにアクセスできます。
+
+## 常にオープンソース
+Misskeyはこれまでもこれからも、オープンソースであり続けます。オープンソースとは、簡単に言うと<b>ソフトウェアのソースコード(プログラム)が公開されている</b>ことです。ソースコードの修正や再配布が可能であることを定義に含めることもあります。 Misskeyのすべてのソースコードは[AGPL](https://github.com/misskey-dev/misskey/blob/develop/LICENSE)というオープンソースライセンスの下に[公開](https://github.com/misskey-dev)されていて、誰でも自由に閲覧、使用、修正、改変、再配布をすることができます。 オープンソースは、自分で好きなように変えたり、有害な処理が含まれていないことを確認することができたり、誰でも開発に参加できるなどの、様々なメリットがあります。 上述の分散型を実現するためにも、オープンソースであるということは必要不可欠な要素です。 再び引き合いに出しますが、TwitterやFacebookなどの利益を得ているほとんどのサービスはオープンソースではありません。
+
+<div class="info">ℹ️ 技術的に言うと、MisskeyのソースコードはGitで管理されていて、リポジトリは<a href="https://github.com/misskey-dev" target="_blank">GitHub上でホスティングされています。</a></div>
+
+## 開発に参加する、プロジェクトを支援する
+Misskeyを気に入っていただけたら、ぜひプロジェクトを支援してください。プロジェクトに貢献するには、以下で紹介するようにいろいろな方法があります。方法によっては開発のスキルは不要なので、誰でも気軽に参加し貢献することができます。いつでもお待ちしています。
+
+### 機能を追加したり、バグを修正する
+ソフトウェアエンジニアのスキルをお持ちの方であれば、ソースコードを編集する形でプロジェクトに貢献することができます。 貢献についてのガイドは[こちら](https://github.com/misskey-dev/misskey/blob/develop/CONTRIBUTING.md)です。
+
+### 議論に参加する
+新しい機能、または既存の機能について意見を述べたり、不具合を報告したりすることでも貢献できます。 そのようなディスカッションは[GitHub](https://github.com/misskey-dev)上か、[フォーラム](https://forum.misskey.io/)等で行われます。
+
+### テキストを翻訳する
+Misskeyは様々な言語に対応しています(i18n -internationalizationの略- と呼ばれます)。元の言語は基本的に日本語ですが、有志によって他の言語へと翻訳されています。 その翻訳作業に加わっていただくことでもMisskeyに貢献できます。 Misskeyは[Crowdinというサービスを使用して翻訳の管理を行っています。](https://crowdin.com/project/misskey)
+
+### 感想を投稿する
+不具合報告等だけではなく、Misskeyの良い点、楽しい点といったポジティブな意見もぜひ共有してください。開発の励みになり、それは間接的ですがプロジェクトへの貢献です。
+
+### ミスキストを増やす
+ミスキストとは、Misskeyを使用する人のことです。 知り合いに紹介するなどしてMisskeyを広めていただければ、ミスキストが増え開発のモチベーションが上がります。
+
+### 寄付をする
+Misskeyはビジネスではなく、利用は無料であるため、収益は皆様からの寄付のみです。(インスタンスによっては広告収入を得ているような場合もありますが、それは運営者の収入であり直接開発者への収入にはなりません) 寄付をしていただければ、今後も開発を続けることが可能になり、プロジェクトへの貢献になります。 寄付は基本的には[Patreon](https://www.patreon.com/syuilo)で受け付けています。 一定額寄付していただけると、Misskeyの[情報ページ](/about-misskey)に名前を記載することができます。
+
+また、サーバーの運営者も、基本的には収益を得ていません。サーバーの運営にはコストがかかるので、運営者の支援をすることもご検討ください。 開発には直接関係しませんが、サーバーがあってこそのプロジェクトなので、運営が維持されるというのは開発と同じくらい重要なことです。
+
+## クレジット
+Misskeyの開発者や、Misskeyに寄付をしてくださった方の一覧は[こちら](/about-misskey)で見ることができます。
+
+## よくある質問
+### プロジェクトは何を目指していますか?
+強いて言うと、漠然的になりますが広く使われる汎用的なプラットフォームになることを目指しています。 Misskeyは他のプロジェクトとは違い、何らかの思想(例えば、反中央集権)やビジョンに基づいて開発が行われているわけではなく、その点ではフラットです。 それが逆に、特定の方向性に縛られないフレキシブルさを生み出すことに繋がっていると感じています。
+<!-- TODO: ここにロードマップへのリンク -->
+
+### 企業によって開発されていますか?
+いいえ。Misskeyの開発は個人で行われており、商業的でもないため、特定の企業の関りはありません。 開発メンバーも基本的にはボランティアです。 また、開発に対し企業のスポンサーがつくこともありますが、その場合でもやはり開発は個人のコミュニティが主体です。
+
+### 誰が運営していますか?
+Misskeyは分散型なため、各サーバーにそれぞれ異なった運営者がいます。従って、特定の個人や企業によって、Misskeyの全てが運営されているわけではありません。 また、開発チームが運営を行うわけでもないため、運営に関する連絡は、お使いのサーバーの運営者に行ってください。 サーバーの運営者は、[このページ](/about)で確認することができます。 あなたがサーバーを作成すれば、あなたが運営者になります。
+
+### どのサーバーを選べばいいですか?
+[サーバー一覧が公開されています。](https://join.misskey.page/ja-JP/instances) サーバーによってコミュニティのテーマ(特定のこと、ものが好き 等)が決められている場合があるので、自分に合ったテーマのサーバーがあれば、そこを選ぶと良いかもしれません。 他にも、サーバーの規模、ユーザー層、国および言語、運営者が信頼できるかどうか、などの観点があります。 なお、Misskey公式のサーバーというものはありません。自身で新しくサーバーを作成するという選択肢もあります。
+
+基本的にどのサーバーを選んだとしても、他の全てのサーバーのユーザーと繋がることができます。
+
+### サーバーを建てるにはどうしたらいいですか?
+Misskeyサーバーの作成に興味を持っていただきありがとうございます。 2021年現在、Misskeyのホスティングサービスは存在しないため、サーバーの作成にはある程度の知識が必要です。 サーバーの作成方法については[こちら](todo)をご覧ください。
+
+### どのような技術を使用していますか?
+Misskeyは開発が進むにつれ使用する技術も大きく変わってきました。開発当初はMySQL + PHP + jQueryといった構成でしたが、現在は以下のようになっています。
+- サーバーサイド: Node.js
+- データベース: PostgreSQL、Redis
+- UIフレームワーク: Vue.js
+- プログラミング言語: TypeScript
+
+また、MFMやAiScriptなどの、Misskeyから派生して独自の技術も開発しています。
+
+### Mastodonのフォークですか?
+いいえ。MisskeyはMastodonやその他のプロジェクトとは全く別のプロジェクトです。 開発に関しても、Misskeyの方が昔から開発されています。ただし、分散型になったのはMastodonの登場より後です。 同じAcitivityPubという分散のためのプロトコルを実装しているという点以外、両者に特に関りがあるわけでもありません。
+
+### iOS/Androidのアプリはありますか?
+公式にはそういったOSのネイティブアプリを開発していませんが、サードパーティ製のアプリがいくつかあります。 詳しくは[こちら](./apps)をご覧ください。
+
+ただ、サードパーティ製アプリはどうしても機能への対応が遅れてしまうため、とくに拘りがなければ公式のWebクライアントの利用をおすすめします。 なお、MisskeyのWebクライアントはPWAに対応しているので、ネイティブアプリのように動作させることも可能です。 詳しくは[こちら](todo)をご覧ください。
+
+### Misskeyのロゴ、アイコンはどこで入手できますか?
+(準備中)
+
+### 時折目にする猫耳の可愛い女の子は?
+Misskeyの守り神、藍ちゃんです。アイチャンカワイイヤッター!
+<div class="info">ℹ️ 藍ちゃんについては<a href="https://xn--931a.moe/" target="_blank">こちら</a>です。</div>
diff --git a/src/docs/ug-CN/general/report-issue.md b/src/docs/ug-CN/general/report-issue.md
new file mode 100644
index 0000000000..63527e32af
--- /dev/null
+++ b/src/docs/ug-CN/general/report-issue.md
@@ -0,0 +1,8 @@
+# 不具合の報告
+不具合と思われる状況に遭遇したときは、まず[トラブルシューティング](./troubleshooting)をご一読ください。 それでも問題が解決しないときは、以下の情報を含めて[フォーラム](https://forum.misskey.io/)に投稿してください。 投稿することで、解決策が見つかったり、不具合と判断されれば開発チームによって修正が行われます。
+
+## 含める情報
+- Misskeyのバージョン([情報ページ](/about)で確認できます)
+- お使いのブラウザの種類とバージョン
+- お使いのOSの種類とバージョン
+- 問題の再現手順
diff --git a/src/docs/ug-CN/general/troubleshooting.md b/src/docs/ug-CN/general/troubleshooting.md
new file mode 100644
index 0000000000..4a35091299
--- /dev/null
+++ b/src/docs/ug-CN/general/troubleshooting.md
@@ -0,0 +1,36 @@
+# トラブルシューティング
+<div class="info">ℹ️ <a href="./faq">よくある質問</a>も合わせてお役立てください。</div>
+
+問題が発生したときは、まずこちらをご確認ください。 該当する項目が無い、もしくは手順を試しても効果がない場合は、サーバーの管理者に連絡するか[不具合を報告](./report-issue)してください。
+
+## クライアントが起動しない
+ほとんどの場合、お使いのブラウザまたはOSのバージョンが古いことが原因です。 ブラウザおよびOSのバージョンを最新のものに更新してから、再度試してみてください。
+
+これは稀ですが、それでも起動しない場合は、キャッシュが原因の場合があります。ブラウザのキャッシュをクリアして、再度試してみてください。
+
+## ページが読み込めない
+クライアントが起動するもののページが読み込めないというエラーが出る場合は、ネットワークに問題がないか確認してください。また、サーバーがダウンしていないか確認してください。
+
+これは稀ですが、キャッシュが原因の場合があります。ブラウザのキャッシュをクリアして、再度試してみてください。
+
+まだ問題がある場合は、サーバーの問題と思われるのでサーバーの管理者に連絡してください。
+
+## クライアントの動作が遅い
+以下を試してみてください:
+
+- クライアント設定で「UIのアニメーションを減らす」を有効にする
+- クライアント設定で「モーダルにぼかし効果を使用」を無効にする
+- お使いのブラウザの設定でハードウェアアクセラレーションを有効にする
+- お使いのデバイスのスペックを上げる
+
+## 通知やアンテナ等の点滅が消えない
+点滅は、未読のコンテンツがあることを示しています。通常点滅が消えない場合は、コンテンツを遡ると未読なコンテンツが残っています。 すべて既読にしたと思われるのに、それでもなお点滅が続く場合(おそらく不具合と思われます)は設定から強制的にすべて既読扱いにすることができます。
+
+## Renoteができない
+フォロワー限定のノートはRenoteすることはできません。
+
+## UI上で特定の要素が表示されない
+広告ブロッカーを使用しているとそのような不具合が発生することがあります。Misskeyではオフにしてご利用ください。
+
+## UI上で未翻訳の部分がある
+ほとんどの場合、単に翻訳が間に合っていないだけで、不具合ではありません。翻訳が終わるまでお待ちください。 [翻訳に参加](./misskey)していただくことも可能です。
diff --git a/src/docs/uk-UA/admin/disable-timelines.md b/src/docs/uk-UA/admin/disable-timelines.md
new file mode 100644
index 0000000000..b081e35ab0
--- /dev/null
+++ b/src/docs/uk-UA/admin/disable-timelines.md
@@ -0,0 +1,8 @@
+# LTL/STL/GTLの無効化
+Misskeyでは、LTL/STL/GTLをそれぞれ無効化することができます。有効/無効を切り替えるには、インスタンスコントロールパネルで設定します。
+
+LTLやSTLは、そのインスタンス全員の投稿が見れるため、新規のユーザーにとってはユーザーを探す必要がなくなり、興味のあるユーザーを見つけやすいという利点があります。 しかし同時に、フォロー機能が活用されなくなったり、不適切な投稿が目につきやすくなったり、チャットのようになることで内輪感が生じて逆に新規ユーザーが参加しにくくなるといったデメリットも持ち合わせています。 サーバーによってメリット/デメリットどちらが優勢かは異なるので、オプションとして無効にできるようになっています。 もしデメリットの方が上回っていると感じたら、それらのタイムラインを無効化することも検討してください。
+
+<div class="warn">⚠️ 無効化を行うと、ユーザーが困惑し、短期的に見て利用者が減る可能性があります。そのため、無効化の際は影響を慎重に検討し、事前に説明してフォローを整える期間を一定程度設けることを推奨します。</div>
+
+なお、管理者/モデレーターは、これらのタイムラインの無効化状態は適用されず、引き続き利用することが可能です。
diff --git a/src/docs/uk-UA/admin/faq.md b/src/docs/uk-UA/admin/faq.md
new file mode 100644
index 0000000000..317b4e0655
--- /dev/null
+++ b/src/docs/uk-UA/admin/faq.md
@@ -0,0 +1,5 @@
+# よくある質問
+ここでは、サーバー管理者向けのよくある質問を掲載しています。
+
+## デフォルトテーマを設定したい
+現在、デフォルトテーマ設定機能は実装されていません。
diff --git a/src/docs/uk-UA/advanced/aiscript.md b/src/docs/uk-UA/advanced/aiscript.md
new file mode 100644
index 0000000000..604d17daa8
--- /dev/null
+++ b/src/docs/uk-UA/advanced/aiscript.md
@@ -0,0 +1,7 @@
+# AiScript
+AiScriptは、Misskeyで使用できるスクリプト言語です。
+
+<div class="info">ℹ️ AiScript実装はMisskeyとは別リポジトリで、<a href="https://github.com/syuilo/aiscript" target="_blank">オープンソースで公開されています。</a></div>
+
+## 使い方
+AiScriptの構文や組み込み関数などのドキュメントは、[こちら](https://github.com/syuilo/aiscript/tree/master/docs)で公開されています。
diff --git a/src/docs/uk-UA/advanced/api.md b/src/docs/uk-UA/advanced/api.md
new file mode 100644
index 0000000000..76019b6145
--- /dev/null
+++ b/src/docs/uk-UA/advanced/api.md
@@ -0,0 +1,58 @@
+# Misskey API
+
+MisskeyAPIを使ってMisskeyクライアント、Misskey連携Webサービス、Bot等(以下「アプリケーション」と呼びます)を開発できます。 ストリーミングAPIもあるので、リアルタイム性のあるアプリケーションを作ることも可能です。
+
+APIを使い始めるには、まずアクセストークンを取得する必要があります。 このドキュメントでは、アクセストークンを取得する手順を説明した後、基本的なAPIの使い方を説明します。
+
+## アクセストークンの取得
+基本的に、APIはリクエストにはアクセストークンが必要となります。 APIにリクエストするのが自分自身なのか、不特定の利用者に使ってもらうアプリケーションなのかによって取得手順は異なります。
+
+* 前者の場合: [「自分自身のアクセストークンを手動発行する」](#自分自身のアクセストークンを手動発行する)に進む
+* 後者の場合: [「アプリケーション利用者にアクセストークンの発行をリクエストする」](#アプリケーション利用者にアクセストークンの発行をリクエストする)に進む
+
+### 自分自身のアクセストークンを手動発行する
+「設定 > API」で、自分のアクセストークンを発行できます。
+
+[「APIの使い方」へ進む](#APIの使い方)
+
+### アプリケーション利用者にアクセストークンの発行をリクエストする
+アプリケーション利用者のアクセストークンを取得するには、以下の手順で発行をリクエストします。
+
+#### Step 1
+
+UUIDを生成する。以後これをセッションIDと呼びます。
+
+> このセッションIDは毎回生成し、使いまわさないようにしてください。
+
+#### Step 2
+
+`{_URL_}/miauth/{session}`をユーザーのブラウザで表示させる。`{session}`の部分は、セッションIDに置き換えてください。
+> 例: `{_URL_}/miauth/c1f6d42b-468b-4fd2-8274-e58abdedef6f`
+
+表示する際、URLにクエリパラメータとしていくつかのオプションを設定できます:
+* `name` ... アプリケーション名
+    * > 例: `MissDeck`
+* `icon` ... アプリケーションのアイコン画像URL
+    * > 例: `https://missdeck.example.com/icon.png`
+* `callback` ... 認証が終わった後にリダイレクトするURL
+    * > 例: `https://missdeck.example.com/callback`
+    * リダイレクト時には、`session`というクエリパラメータでセッションIDが付きます
+* `permission` ... アプリケーションが要求する権限
+    * > 例: `write:notes,write:following,read:drive`
+    * 要求する権限を`,`で区切って列挙します
+    * どのような権限があるかは[APIリファレンス](/api-doc)で確認できます
+
+#### Step 3
+ユーザーが発行を許可した後、`{_URL_}/api/miauth/{session}/check`にPOSTリクエストすると、レスポンスとしてアクセストークンを含むJSONが返ります。
+
+レスポンスに含まれるプロパティ:
+* `token` ... ユーザーのアクセストークン
+* `user` ... ユーザーの情報
+
+[「APIの使い方」へ進む](#APIの使い方)
+
+## APIの使い方
+**APIはすべてPOSTで、リクエスト/レスポンスともにJSON形式です。RESTではありません。** アクセストークンは、`i`というパラメータ名でリクエストに含めます。
+
+* [APIリファレンス](/api-doc)
+* [ストリーミングAPI](./stream)
diff --git a/src/docs/uk-UA/advanced/create-plugin.md b/src/docs/uk-UA/advanced/create-plugin.md
new file mode 100644
index 0000000000..5c60b47800
--- /dev/null
+++ b/src/docs/uk-UA/advanced/create-plugin.md
@@ -0,0 +1,74 @@
+# プラグインの作成
+Misskey Webクライアントのプラグイン機能を使うと、クライアントを拡張し、様々な機能を追加できます。 ここではプラグインの作成にあたってのメタデータ定義や、AiScript APIリファレンスを掲載します。
+
+## Метадані
+プラグインは、AiScriptのメタデータ埋め込み機能を使って、デフォルトとしてプラグインのメタデータを定義する必要があります。 メタデータは次のプロパティを含むオブジェクトです。
+
+### name
+プラグイン名
+
+### author
+プラグイン作者
+
+### version
+プラグインバージョン。数値を指定してください。
+
+### description
+プラグインの説明
+
+### permissions
+プラグインが要求する権限。MisskeyAPIにリクエストする際に用いられます。
+
+### config
+プラグインの設定情報を表すオブジェクト。 キーに設定名、値に以下のプロパティを含めます。
+
+#### type
+設定値の種類を表す文字列。以下から選択します。 string number boolean
+
+#### label
+ユーザーに表示する設定名
+
+#### description
+設定の説明
+
+#### default
+設定のデフォルト値
+
+## APIリファレンス
+AiScript標準で組み込まれているAPIは掲載しません。
+
+### Mk:dialog(title text type)
+ダイアログを表示します。typeには以下の値が設定できます。 info success warn error question 省略すると info になります。
+
+### Mk:confirm(title text type)
+確認ダイアログを表示します。typeには以下の値が設定できます。 info success warn error question 省略すると question になります。 ユーザーが"OK"を選択した場合は true を、"キャンセル"を選択した場合は false が返ります。
+
+### Mk:api(endpoint params)
+Misskey APIにリクエストします。第一引数にエンドポイント名、第二引数にパラメータオブジェクトを渡します。
+
+### Mk:save(key value)
+任意の値に任意の名前を付けて永続化します。永続化した値は、AiScriptコンテキストが終了しても残り、Mk:loadで読み取ることができます。
+
+### Mk:load(key)
+Mk:saveで永続化した指定の名前の値を読み取ります。
+
+### Plugin:register_post_form_action(title fn)
+投稿フォームにアクションを追加します。第一引数にアクション名、第二引数にアクションが選択された際のコールバック関数を渡します。 コールバック関数には、第一引数に投稿フォームオブジェクトが渡されます。
+
+### Plugin:register_note_action(title fn)
+ノートメニューに項目を追加します。第一引数に項目名、第二引数に項目が選択された際のコールバック関数を渡します。 コールバック関数には、第一引数に対象のノートオブジェクトが渡されます。
+
+### Plugin:register_user_action(title fn)
+ユーザーメニューに項目を追加します。第一引数に項目名、第二引数に項目が選択された際のコールバック関数を渡します。 コールバック関数には、第一引数に対象のユーザーオブジェクトが渡されます。
+
+### Plugin:register_note_view_interruptor(fn)
+UIに表示されるノート情報を書き換えます。 コールバック関数には、第一引数に対象のノートオブジェクトが渡されます。 コールバック関数の返り値でノートが書き換えられます。
+
+### Plugin:register_note_post_interruptor(fn)
+ノート投稿時にノート情報を書き換えます。 コールバック関数には、第一引数に対象のノートオブジェクトが渡されます。 コールバック関数の返り値でノートが書き換えられます。
+
+### Plugin:open_url(url)
+第一引数に渡されたURLをブラウザの新しいタブで開きます。
+
+### Plugin:config
+プラグインの設定が格納されるオブジェクト。プラグイン定義のconfigで設定したキーで値が入ります。
diff --git a/src/docs/uk-UA/advanced/develop-bot.md b/src/docs/uk-UA/advanced/develop-bot.md
new file mode 100644
index 0000000000..7f825e9bc4
--- /dev/null
+++ b/src/docs/uk-UA/advanced/develop-bot.md
@@ -0,0 +1,6 @@
+# Botの作成
+[Misskey API](./api)を利用してBotの開発が可能です。 また、いくつかのBot実装が公開されているため、ぜひ参考にしてください。
+
+- [syuilo/ai](https://github.com/syuilo/ai) ... Node.js上で動く、TypeScript製Bot実装
+
+Botを作成したときは、プロフィール設定からBotフラグをオンにしておくことを強くおすすめします。
diff --git a/src/docs/uk-UA/advanced/reversi-bot.md b/src/docs/uk-UA/advanced/reversi-bot.md
new file mode 100644
index 0000000000..ae49801193
--- /dev/null
+++ b/src/docs/uk-UA/advanced/reversi-bot.md
@@ -0,0 +1,160 @@
+# MisskeyリバーシBotの開発
+Misskeyのリバーシ機能に対応したBotの開発方法をここに記します。
+
+1. `games/reversi`ストリームに以下のパラメータを付けて接続する:
+    * `i`: botアカウントのAPIキー
+
+2. 対局への招待が来たら、ストリームから`invited`イベントが流れてくる
+    * イベントの中身に、`parent`という名前で対局へ誘ってきたユーザーの情報が含まれている
+
+3. `games/reversi/match`へ、`user_id`として`parent`の`id`が含まれたリクエストを送信する
+
+4. 上手くいくとゲーム情報が返ってくるので、`games/reversi-game`ストリームへ、以下のパラメータを付けて接続する:
+    * `i`: botアカウントのAPIキー
+    * `game`: `game`の`id`
+
+5. この間、相手がゲームの設定を変更するとその都度`update-settings`イベントが流れてくるので、必要であれば何かしらの処理を行う
+
+6. 設定に満足したら、`{ type: 'accept' }`メッセージをストリームに送信する
+
+7. ゲームが開始すると、`started`イベントが流れてくる
+    * イベントの中身にはゲーム情報が含まれている
+
+8. 石を打つには、ストリームに`{ type: 'set', pos: <位置> }`を送信する(位置の計算方法は後述)
+
+9. 相手または自分が石を打つと、ストリームから`set`イベントが流れてくる
+    * `color`として石の色が含まれている
+    * `pos`として位置情報が含まれている
+
+## 位置の計算法
+8x8のマップを考える場合、各マスの位置(インデックスと呼びます)は次のようになっています:
+```
++--+--+--+--+--+--+--+--+
+| 0| 1| 2| 3| 4| 5| 6| 7|
++--+--+--+--+--+--+--+--+
+| 8| 9|10|11|12|13|14|15|
++--+--+--+--+--+--+--+--+
+|16|17|18|19|20|21|22|23|
+...
+```
+
+### X,Y座標 から インデックス に変換する
+```
+pos = x + (y * mapWidth)
+```
+`mapWidth`は、ゲーム情報の`map`から、次のようにして計算できます:
+```
+mapWidth = map[0].length
+```
+
+### インデックス から X,Y座標 に変換する
+```
+x = pos % mapWidth
+y = Math.floor(pos / mapWidth)
+```
+
+## マップ情報
+マップ情報は、ゲーム情報の`map`に入っています。 文字列の配列になっており、ひとつひとつの文字がマス情報を表しています。 それをもとにマップのデザインを知る事が出来ます:
+* `(スペース)` ... マス無し
+* `-` ... マス
+* `b` ... 初期配置される黒石
+* `w` ... 初期配置される白石
+
+例えば、4*4の次のような単純なマップがあるとします:
+```text
++---+---+---+---+
+|   |   |   |   |
++---+---+---+---+
+|   | ○ | ● |   |
++---+---+---+---+
+|   | ● | ○ |   |
++---+---+---+---+
+|   |   |   |   |
++---+---+---+---+
+```
+
+この場合、マップデータはこのようになります:
+```javascript
+['----', '-wb-', '-bw-', '----']
+```
+
+## ユーザーにフォームを提示して対話可能Botを作成する
+ユーザーとのコミュニケーションを行うため、ゲームの設定画面でユーザーにフォームを提示することができます。 例えば、Botの強さをユーザーが設定できるようにする、といったシナリオが考えられます。
+
+フォームを提示するには、`reversi-game`ストリームに次のメッセージを送信します:
+```javascript
+{
+  type: 'init-form',
+  body: [フォームコントロールの配列]
+}
+```
+
+フォームコントロールの配列については今から説明します。 フォームコントロールは、次のようなオブジェクトです:
+```javascript
+{
+  id: 'switch1',
+  type: 'switch',
+  label: 'Enable hoge',
+  value: false
+}
+```
+`id` ... コントロールのID。 `type` ... コントロールの種類。後述します。 `label` ... コントロールと一緒に表記するテキスト。 `value` ... コントロールのデフォルト値。
+
+### フォームの操作を受け取る
+ユーザーがフォームを操作すると、ストリームから`update-form`イベントが流れてきます。 イベントの中身には、コントロールのIDと、ユーザーが設定した値が含まれています。 例えば、上で示したスイッチをユーザーがオンにしたとすると、次のイベントが流れてきます:
+```javascript
+{
+  id: 'switch1',
+  value: true
+}
+```
+
+### フォームコントロールの種類
+#### Перемикач
+type: `switch` スイッチを表示します。何かの機能をオン/オフさせたい場合に有用です。
+
+##### プロパティ
+`label` ... スイッチに表記するテキスト。
+
+#### ラジオボタン
+type: `radio` ラジオボタンを表示します。選択肢を提示するのに有用です。例えば、Botの強さを設定させるなどです。
+
+##### プロパティ
+`items` ... ラジオボタンの選択肢。例:
+```javascript
+items: [{
+  label: 'å¼±',
+  value: 1
+}, {
+  label: '中',
+  value: 2
+}, {
+  label: 'å¼·',
+  value: 3
+}]
+```
+
+#### スライダー
+type: `slider` スライダーを表示します。
+
+##### プロパティ
+`min` ... スライダーの下限。 `max` ... スライダーの上限。 `step` ... 入力欄で刻むステップ値。
+
+#### テキストボックス
+type: `textbox` テキストボックスを表示します。ユーザーになにか入力させる一般的な用途に利用できます。
+
+## ユーザーにメッセージを表示する
+設定画面でユーザーと対話する、フォーム以外のもうひとつの方法がこれです。ユーザーになにかメッセージを表示することができます。 例えば、ユーザーがBotの対応していないモードやマップを選択したとき、警告を表示するなどです。 メッセージを表示するには、次のメッセージをストリームに送信します:
+```javascript
+{
+  type: 'message',
+  body: {
+    text: 'メッセージ内容',
+    type: 'メッセージの種類'
+  }
+}
+```
+メッセージの種類: `success`, `info`, `warning`, `error`。
+
+## 投了する
+投了をするには、<a href="./api/endpoints/games/reversi/games/surrender">このエンドポイント</a>にリクエストします。
diff --git a/src/docs/uk-UA/advanced/stream.md b/src/docs/uk-UA/advanced/stream.md
new file mode 100644
index 0000000000..978df6a211
--- /dev/null
+++ b/src/docs/uk-UA/advanced/stream.md
@@ -0,0 +1,350 @@
+# ストリーミングAPI
+
+ストリーミングAPIを使うと、リアルタイムで様々な情報(例えばタイムラインに新しい投稿が流れてきた、メッセージが届いた、フォローされた、など)を受け取ったり、様々な操作を行ったりすることができます。
+
+## ストリームに接続する
+
+ストリーミングAPIを利用するには、まずMisskeyサーバーに**websocket**接続する必要があります。
+
+以下のURLに、`i`というパラメータ名で認証情報を含めて、websocket接続してください。例:
+```
+%WS_URL%/streaming?i=xxxxxxxxxxxxxxx
+```
+
+認証情報は、自分のAPIキーや、アプリケーションからストリームに接続する際はユーザーのアクセストークンのことを指します。
+
+<div class="info">ℹ️ 認証情報の取得については、<a href="./api">こちらのドキュメント</a>をご確認ください。</div>
+
+---
+
+認証情報は省略することもできますが、その場合非ログインでの利用ということになり、受信できる情報や可能な操作は限られます。例:
+
+```
+%WS_URL%/streaming
+```
+
+---
+
+ストリームに接続すると、後述するAPI操作や、投稿の購読を行ったりすることができます。 しかしまだこの段階では、例えばタイムラインへの新しい投稿を受信したりすることはできません。 それを行うには、ストリーム上で、後述する**チャンネル**に接続する必要があります。
+
+**ストリームでのやり取りはすべてJSONです。**
+
+## Канали
+MisskeyのストリーミングAPIにはチャンネルという概念があります。これは、送受信する情報を分離するための仕組みです。 Misskeyのストリームに接続しただけでは、まだリアルタイムでタイムラインの投稿を受信したりはできません。 ストリーム上でチャンネルに接続することで、様々な情報を受け取ったり情報を送信したりすることができるようになります。
+
+ひとつのストリーム上で、同時に複数のチャンネルに接続することができます。
+
+### チャンネルに接続する
+チャンネルに接続するには、次のようなデータをJSONでストリームに送信します:
+
+```json
+{
+    type: 'connect',
+    body: {
+        channel: 'xxxxxxxx',
+        id: 'foobar',
+        params: {
+            ...
+        }
+    }
+}
+```
+
+ここで、
+* `channel`には接続したいチャンネル名を設定します。チャンネルの種類については後述します。
+* `id`にはそのチャンネルとやり取りするための任意のIDを設定します。ストリームでは様々なメッセージが流れるので、そのメッセージがどのチャンネルからのものなのか識別する必要があるからです。このIDは、UUIDや、乱数のようなもので構いません。
+* `params`はチャンネルに接続する際のパラメータです。チャンネルによって接続時に必要とされるパラメータは異なります。パラメータ不要のチャンネルに接続する際は、このプロパティは省略可能です。
+
+<div class="info">ℹ️ IDはチャンネルごとではなく「チャンネルの接続ごと」です。なぜなら、同じチャンネルに異なるパラメータで複数接続するケースもあるからです。</div>
+
+### チャンネルからのメッセージを受け取る
+例えばタイムラインのチャンネルなら、新しい投稿があった時にメッセージを発します。そのメッセージを受け取ることで、タイムラインに新しい投稿がされたことをリアルタイムで知ることができます。
+
+チャンネルがメッセージを発すると、次のようなデータがJSONでストリームに流れてきます:
+```json
+{
+    type: 'channel',
+    body: {
+        id: 'foobar',
+        type: 'something',
+        body: {
+            some: 'thing'
+        }
+    }
+}
+```
+
+ここで、
+* `id`には前述したそのチャンネルに接続する際に設定したIDが設定されています。これで、このメッセージがどのチャンネルからのものなのか知ることができます。
+* `type`にはメッセージの種類が設定されます。チャンネルによって、どのような種類のメッセージが流れてくるかは異なります。
+* `body`にはメッセージの内容が設定されます。チャンネルによって、どのような内容のメッセージが流れてくるかは異なります。
+
+### チャンネルに向けてメッセージを送信する
+チャンネルによっては、メッセージを受け取るだけでなく、こちらから何かメッセージを送信し、何らかの操作を行える場合があります。
+
+チャンネルにメッセージを送信するには、次のようなデータをJSONでストリームに送信します:
+```json
+{
+    type: 'channel',
+    body: {
+        id: 'foobar',
+        type: 'something',
+        body: {
+            some: 'thing'
+        }
+    }
+}
+```
+
+ここで、
+* `id`には前述したそのチャンネルに接続する際に設定したIDを設定します。これで、このメッセージがどのチャンネルに向けたものなのか識別させることができます。
+* `type`にはメッセージの種類を設定します。チャンネルによって、どのような種類のメッセージを受け付けるかは異なります。
+* `body`にはメッセージの内容を設定します。チャンネルによって、どのような内容のメッセージを受け付けるかは異なります。
+
+### チャンネルから切断する
+チャンネルから切断するには、次のようなデータをJSONでストリームに送信します:
+
+```json
+{
+    type: 'disconnect',
+    body: {
+        id: 'foobar'
+    }
+}
+```
+
+ここで、
+* `id`には前述したそのチャンネルに接続する際に設定したIDを設定します。
+
+## ストリームを経由してAPIリクエストする
+
+ストリームを経由してAPIリクエストすると、HTTPリクエストを発生させずにAPIを利用できます。そのため、コードを簡潔にできたり、パフォーマンスの向上を見込めるかもしれません。
+
+ストリームを経由してAPIリクエストするには、次のようなデータをJSONでストリームに送信します:
+```json
+{
+    type: 'api',
+    body: {
+        id: 'xxxxxxxxxxxxxxxx',
+        endpoint: 'notes/create',
+        data: {
+            text: 'yee haw!'
+        }
+    }
+}
+```
+
+ここで、
+* `id`には、APIのレスポンスを識別するための、APIリクエストごとの一意なIDを設定する必要があります。UUIDや、簡単な乱数のようなもので構いません。
+* `endpoint`には、あなたがリクエストしたいAPIのエンドポイントを指定します。
+* `data`には、エンドポイントのパラメータを含めます。
+
+<div class="info">ℹ️ APIのエンドポイントやパラメータについてはAPIリファレンスをご確認ください。</div>
+
+### レスポンスの受信
+
+APIへリクエストすると、レスポンスがストリームから次のような形式で流れてきます。
+
+```json
+{
+    type: 'api:xxxxxxxxxxxxxxxx',
+    body: {
+        ...
+    }
+}
+```
+
+ここで、
+* `xxxxxxxxxxxxxxxx`の部分には、リクエストの際に設定された`id`が含まれています。これにより、どのリクエストに対するレスポンスなのか判別することができます。
+* `body`には、レスポンスが含まれています。
+
+## 投稿のキャプチャ
+
+Misskeyは投稿のキャプチャと呼ばれる仕組みを提供しています。これは、指定した投稿のイベントをストリームで受け取る機能です。
+
+例えばタイムラインを取得してユーザーに表示したとします。ここで誰かがそのタイムラインに含まれるどれかの投稿に対してリアクションしたとします。
+
+しかし、クライアントからするとある投稿にリアクションが付いたことなどは知る由がないため、リアルタイムでリアクションをタイムライン上の投稿に反映して表示するといったことができません。
+
+この問題を解決するために、Misskeyは投稿のキャプチャ機構を用意しています。投稿をキャプチャすると、その投稿に関するイベントを受け取ることができるため、リアルタイムでリアクションを反映させたりすることが可能になります。
+
+### 投稿をキャプチャする
+
+投稿をキャプチャするには、ストリームに次のようなメッセージを送信します:
+
+```json
+{
+    type: 'subNote',
+    body: {
+        id: 'xxxxxxxxxxxxxxxx'
+    }
+}
+```
+
+ここで、
+* `id`にキャプチャしたい投稿の`id`を設定します。
+
+このメッセージを送信すると、Misskeyにキャプチャを要請したことになり、以後、その投稿に関するイベントが流れてくるようになります。
+
+例えば投稿にリアクションが付いたとすると、次のようなメッセージが流れてきます:
+
+```json
+{
+    type: 'noteUpdated',
+    body: {
+        id: 'xxxxxxxxxxxxxxxx',
+        type: 'reacted',
+        body: {
+            reaction: 'like',
+            userId: 'yyyyyyyyyyyyyyyy'
+        }
+    }
+}
+```
+
+ここで、
+* `body`内の`id`に、イベントを発生させた投稿のIDが設定されます。
+* `body`内の`type`に、イベントの種類が設定されます。
+* `body`内の`body`に、イベントの詳細が設定されます。
+
+#### イベントの種類
+
+##### `reacted`
+その投稿にリアクションがされた時に発生します。
+
+* `reaction`に、リアクションの種類が設定されます。
+* `userId`に、リアクションを行ったユーザーのIDが設定されます。
+
+例:
+```json
+{
+    type: 'noteUpdated',
+    body: {
+        id: 'xxxxxxxxxxxxxxxx',
+        type: 'reacted',
+        body: {
+            reaction: 'like',
+            userId: 'yyyyyyyyyyyyyyyy'
+        }
+    }
+}
+```
+
+##### `deleted`
+その投稿が削除された時に発生します。
+
+* `deletedAt`に、削除日時が設定されます。
+
+例:
+```json
+{
+    type: 'noteUpdated',
+    body: {
+        id: 'xxxxxxxxxxxxxxxx',
+        type: 'deleted',
+        body: {
+            deletedAt: '2018-10-22T02:17:09.703Z'
+        }
+    }
+}
+```
+
+##### `pollVoted`
+その投稿に添付されたアンケートに投票された時に発生します。
+
+* `choice`に、選択肢IDが設定されます。
+* `userId`に、投票を行ったユーザーのIDが設定されます。
+
+例:
+```json
+{
+    type: 'noteUpdated',
+    body: {
+        id: 'xxxxxxxxxxxxxxxx',
+        type: 'pollVoted',
+        body: {
+            choice: 2,
+            userId: 'yyyyyyyyyyyyyyyy'
+        }
+    }
+}
+```
+
+### 投稿のキャプチャを解除する
+
+その投稿がもう画面に表示されなくなったりして、その投稿に関するイベントをもう受け取る必要がなくなったときは、キャプチャの解除を申請してください。
+
+次のメッセージを送信します:
+
+```json
+{
+    type: 'unsubNote',
+    body: {
+        id: 'xxxxxxxxxxxxxxxx'
+    }
+}
+```
+
+ここで、
+* `id`にキャプチャを解除したい投稿の`id`を設定します。
+
+このメッセージを送信すると、以後、その投稿に関するイベントは流れてこないようになります。
+
+# チャンネル一覧
+## `main`
+アカウントに関する基本的な情報が流れてきます。このチャンネルにパラメータはありません。
+
+### 流れてくるイベント一覧
+
+#### `renote`
+自分の投稿がRenoteされた時に発生するイベントです。自分自身の投稿をRenoteしたときは発生しません。
+
+#### `mention`
+誰かからメンションされたときに発生するイベントです。
+
+#### `readAllNotifications`
+自分宛ての通知がすべて既読になったことを表すイベントです。このイベントを利用して、「通知があることを示すアイコン」のようなものをオフにしたりする等のケースが想定されます。
+
+#### `meUpdated`
+自分の情報が更新されたことを表すイベントです。
+
+#### `follow`
+自分が誰かをフォローしたときに発生するイベントです。
+
+#### `unfollow`
+自分が誰かのフォローを解除したときに発生するイベントです。
+
+#### `followed`
+自分が誰かにフォローされたときに発生するイベントです。
+
+## `homeTimeline`
+ホームタイムラインの投稿情報が流れてきます。このチャンネルにパラメータはありません。
+
+### 流れてくるイベント一覧
+
+#### `note`
+タイムラインに新しい投稿が流れてきたときに発生するイベントです。
+
+## `localTimeline`
+ローカルタイムラインの投稿情報が流れてきます。このチャンネルにパラメータはありません。
+
+### 流れてくるイベント一覧
+
+#### `note`
+ローカルタイムラインに新しい投稿が流れてきたときに発生するイベントです。
+
+## `hybridTimeline`
+ソーシャルタイムラインの投稿情報が流れてきます。このチャンネルにパラメータはありません。
+
+### 流れてくるイベント一覧
+
+#### `note`
+ソーシャルタイムラインに新しい投稿が流れてきたときに発生するイベントです。
+
+## `globalTimeline`
+グローバルタイムラインの投稿情報が流れてきます。このチャンネルにパラメータはありません。
+
+### 流れてくるイベント一覧
+
+#### `note`
+グローバルタイムラインに新しい投稿が流れてきたときに発生するイベントです。
diff --git a/src/docs/uk-UA/features/antenna.md b/src/docs/uk-UA/features/antenna.md
new file mode 100644
index 0000000000..68a72648f5
--- /dev/null
+++ b/src/docs/uk-UA/features/antenna.md
@@ -0,0 +1,4 @@
+# Антени
+アンテナは、自由に条件を設定して、合致するノートを自動で収集することができる機能です。
+
+条件を設定したアンテナが作成された状態で、条件に合致するノートが投稿されると、リアルタイムでそのアンテナのタイムラインにノートが追加されます。
diff --git a/src/docs/uk-UA/features/custom-emoji.md b/src/docs/uk-UA/features/custom-emoji.md
new file mode 100644
index 0000000000..2a130cb1d9
--- /dev/null
+++ b/src/docs/uk-UA/features/custom-emoji.md
@@ -0,0 +1,2 @@
+# Кастомні емоджі
+カスタム絵文字は、インスタンスで用意された画像を絵文字のように使える機能です。 ノート、リアクション、チャット、自己紹介、名前などの場所で使うことができます。 カスタム絵文字をそれらの場所で使うには、絵文字ピッカーボタン(ある場合)を押すか、`:`を入力して絵文字サジェストを表示します。 テキスト内に`:foo:`のような形式の文字列が見つかると、`foo`の部分がカスタム絵文字名と解釈され、表示時には対応したカスタム絵文字に置き換わります。
diff --git a/src/docs/uk-UA/features/deck.md b/src/docs/uk-UA/features/deck.md
new file mode 100644
index 0000000000..acb80815c6
--- /dev/null
+++ b/src/docs/uk-UA/features/deck.md
@@ -0,0 +1,18 @@
+# Дек
+
+デッキは利用可能なUIのひとつです。「カラム」と呼ばれるビューを複数並べて表示させることで、カスタマイズ性が高く、情報量の多いUIが構築できることが特徴です。
+
+## カラムの追加
+デッキの背景を右クリックし、「カラムを追加」して任意のカラムを追加できます。
+
+## カラムの移動
+カラムは、ドラッグアンドドロップで他のカラムと位置を入れ替えることが出来るほか、カラムメニュー(カラムのヘッダー右クリック)から位置を移動させることもできます。
+
+## カラムの水平分割
+カラムは左右だけでなく、上下に並べることもできます。 カラムメニューを開き、「左に重ねる」を選択すると、左のカラムの下に現在のカラムが移動します。 上下分割を解除するには、カラムメニューの「右に出す」を選択します。
+
+## カラムの設定
+カラムメニューの「編集」を選択するとカラムの設定を編集できます。カラムの名前を変えたり、幅を変えたりできます。
+
+## デッキの設定
+デッキに関する設定は、[settings/deck](/settings/deck)で行えます。
diff --git a/src/docs/uk-UA/features/drive.md b/src/docs/uk-UA/features/drive.md
new file mode 100644
index 0000000000..0ab6865642
--- /dev/null
+++ b/src/docs/uk-UA/features/drive.md
@@ -0,0 +1,17 @@
+# Диск
+ドライブは、Misskey上でファイルを管理できる機能です。
+
+[ドライブのページ](/my/drive)から任意のファイルをアップロードできるほか、アバターに設定した画像や、ノートに添付したファイルなどもすべてドライブにアップロードされます。
+
+<div class="warn">⚠️ ドライブからファイルを削除すると、そのファイルが添付されたノートも消えます。</div>
+
+ドライブにアップロードされたファイルは、いつでもダウンロードすることができるほか、ノート作成時に「ドライブからファイルを添付」することでファイルを再利用することもできます。
+
+ドライブ内にフォルダを作り、複数のファイルをまとめて整理することもできます。
+
+## 閲覧注意 (NSFW)
+<div class="info">ℹ️ この項目が閲覧注意なわけではありません</div>
+
+閲覧注意またはNSFW (Not safe for work) は、ドライブのファイルに設定することができるフラグです。 閲覧注意フラグを設定されたファイルは、表示される際に閲覧者の操作なしには表示されなくなります。 このフラグは、例えば職場や公共の場で閲覧するのに適切でないと思われる画像などに設定し、そのような画像が突然表示されてしまうことを防ぐ目的で使われます。
+
+このフラグは手動でオンオフを切り替えられるほか、モデレーターの判断で設定される場合もあります。
diff --git a/src/docs/uk-UA/features/favorite.md b/src/docs/uk-UA/features/favorite.md
new file mode 100644
index 0000000000..31f7835fcf
--- /dev/null
+++ b/src/docs/uk-UA/features/favorite.md
@@ -0,0 +1,4 @@
+# Обране
+[ノート](./node)をお気に入りとして登録できる機能です。 お気に入り登録したノートは、[お気に入りページ](./my/favorites)で一覧することができます。 お気に入りに登録したことは相手に通知されず、お気に入りは自分しか見ることができません。
+
+ノートをお気に入り登録するには、ノートメニューの「お気に入り」を押します。お気に入り解除するには、ノートメニューの「お気に入り解除」を押します。
diff --git a/src/docs/uk-UA/features/follow.md b/src/docs/uk-UA/features/follow.md
new file mode 100644
index 0000000000..db2a4c3318
--- /dev/null
+++ b/src/docs/uk-UA/features/follow.md
@@ -0,0 +1,2 @@
+# Підписки
+ユーザーをフォローすると、タイムラインにそのユーザーの投稿が表示されるようになります。ただし、他のユーザーに対する返信は含まれません。 ユーザーをフォローするには、ユーザーページの「フォロー」ボタンをクリックします。フォローを解除するには、もう一度クリックします。
diff --git a/src/docs/uk-UA/features/keyboard-shortcut.md b/src/docs/uk-UA/features/keyboard-shortcut.md
new file mode 100644
index 0000000000..86820bd5f4
--- /dev/null
+++ b/src/docs/uk-UA/features/keyboard-shortcut.md
@@ -0,0 +1,66 @@
+# キーボードショートカット
+
+## Глобальна
+これらのショートカットは基本的にどこでも使えます。
+<table>
+    <thead>
+        <tr><th>ショートカット</th><th>効果</th><th>由来</th></tr>
+    </thead>
+    <tbody>
+        <tr><td><kbd class="key">P</kbd>, <kbd class="key">N</kbd></td><td>新規投稿</td><td><b>P</b>ost, <b>N</b>ew, <b>N</b>ote</td></tr>
+        <tr><td><kbd class="key">T</kbd></td><td>タイムラインの最も新しい投稿にフォーカス</td><td><b>T</b>imeline, <b>T</b>op</td></tr>
+        <tr><td><kbd class="group"><kbd class="key">Shift</kbd> + <kbd class="key">N</kbd></kbd></td><td>通知を表示/隠す</td><td><b>N</b>otifications</td></tr>
+        <tr><td><kbd class="key">S</kbd></td><td>Пошук</td><td><b>S</b>earch</td></tr>
+        <tr><td><kbd class="key">H</kbd>, <kbd class="key">?</kbd></td><td>ヘルプを表示</td><td><b>H</b>elp</td></tr>
+    </tbody>
+</table>
+
+## 投稿にフォーカスされた状態
+<table>
+    <thead>
+        <tr><th>ショートカット</th><th>効果</th><th>由来</th></tr>
+    </thead>
+    <tbody>
+        <tr><td><kbd class="key">↑</kbd>, <kbd class="key">K</kbd>, <kbd class="group"><kbd class="key">Shift</kbd> + <kbd class="key">Tab</kbd></kbd></td><td>上の投稿にフォーカスを移動</td><td>-</td></tr>
+        <tr><td><kbd class="key">↓</kbd>, <kbd class="key">J</kbd>, <kbd class="key">Tab</kbd></td><td>下の投稿にフォーカスを移動</td><td>-</td></tr>
+        <tr><td><kbd class="key">R</kbd></td><td>返信フォームを開く</td><td><b>R</b>eply</td></tr>
+        <tr><td><kbd class="key">Q</kbd></td><td>Renoteフォームを開く</td><td><b>Q</b>uote</td></tr>
+        <tr><td><kbd class="group"><kbd class="key">Ctrl</kbd> + <kbd class="key">Q</kbd></kbd></td><td>即刻Renoteする(フォームを開かずに)</td><td>-</td></tr>
+        <tr><td><kbd class="key">E</kbd>, <kbd class="key">A</kbd>, <kbd class="key">+</kbd></td><td>リアクションフォームを開く</td><td><b>E</b>mote, re<b>A</b>ction</td></tr>
+        <tr><td><kbd class="key">0</kbd>~<kbd class="key">9</kbd></td><td>数字に対応したリアクションをする(対応については後述)</td><td>-</td></tr>
+        <tr><td><kbd class="key">F</kbd>, <kbd class="key">B</kbd></td><td>お気に入りに登録</td><td><b>F</b>avorite, <b>B</b>ookmark</td></tr>
+        <tr><td><kbd class="key">Del</kbd>, <kbd class="group"><kbd class="key">Ctrl</kbd> + <kbd class="key">D</kbd></kbd></td><td>投稿を削除</td><td><b>D</b>elete</tr>
+        <tr><td><kbd class="key">M</kbd>, <kbd class="key">O</kbd></td><td>投稿に対するメニューを開く</td><td><b>M</b>ore, <b>O</b>ther</td></tr>
+        <tr><td><kbd class="key">S</kbd></td><td>CWで隠された部分を表示 or 隠す</td><td><b>S</b>how, <b>S</b>ee</td></tr>
+        <tr><td><kbd class="key">Esc</kbd></td><td>フォーカスを外す</td><td>-</td></tr>
+    </tbody>
+</table>
+
+## Renoteフォーム
+<table>
+    <thead>
+        <tr><th>ショートカット</th><th>効果</th><th>由来</th></tr>
+    </thead>
+    <tbody>
+        <tr><td><kbd class="key">Enter</kbd></td><td>Renoteする</td><td>-</td></tr>
+        <tr><td><kbd class="key">Q</kbd></td><td>フォームを展開する</td><td><b>Q</b>uote</td></tr>
+        <tr><td><kbd class="key">Esc</kbd></td><td>フォームを閉じる</td><td>-</td></tr>
+    </tbody>
+</table>
+
+## リアクションフォーム
+デフォルトで「👍」にフォーカスが当たっている状態です。
+<table>
+    <thead>
+        <tr><th>ショートカット</th><th>効果</th><th>由来</th></tr>
+    </thead>
+    <tbody>
+        <tr><td><kbd class="key">↑</kbd>, <kbd class="key">K</kbd></td><td>上のリアクションにフォーカスを移動</td><td>-</td></tr>
+        <tr><td><kbd class="key">↓</kbd>, <kbd class="key">J</kbd></td><td>下のリアクションにフォーカスを移動</td><td>-</td></tr>
+        <tr><td><kbd class="key">←</kbd>, <kbd class="key">H</kbd>, <kbd class="group"><kbd class="key">Shift</kbd> + <kbd class="key">Tab</kbd></kbd></td><td>左のリアクションにフォーカスを移動</td><td>-</td></tr>
+        <tr><td><kbd class="key">→</kbd>, <kbd class="key">L</kbd>, <kbd class="key">Tab</kbd></td><td>右のリアクションにフォーカスを移動</td><td>-</td></tr>
+        <tr><td><kbd class="key">Enter</kbd>, <kbd class="key">Space</kbd>, <kbd class="key">+</kbd></td><td>リアクション確定</td><td>-</td></tr>
+        <tr><td><kbd class="key">0</kbd>~<kbd class="key">9</kbd></td><td>数字に対応したリアクションで確定</td><td>-</td></tr>
+        <tr><td><kbd class="key">Esc</kbd></td><td>リアクションするのをやめる</td><td>-</td></tr>
+    </tbody>
+</table>
diff --git a/src/docs/uk-UA/features/mfm.md b/src/docs/uk-UA/features/mfm.md
new file mode 100644
index 0000000000..5be2df4f30
--- /dev/null
+++ b/src/docs/uk-UA/features/mfm.md
@@ -0,0 +1,12 @@
+# MFM
+MFMは、Misskey Flavored Markdownの略で、Misskeyの様々な場所で使用できる専用のマークアップ言語です。 MFMで使用可能な構文は[MFMチートシート](/mfm-cheat-sheet)で確認できます。
+
+## MFMが使用可能な場所の例
+- ノート本文
+- CW注釈
+- ユーザーの名前
+- ユーザーの自己紹介
+
+## 開発者向け情報
+MFMのパーサー実装はライブラリとして公開されており、簡単にクライアントにMFMを組み込むことが可能です。
+- [misskey-dev/mfm.js](https://github.com/misskey-dev/mfm.js) - JavaScriptパーサー実装
diff --git a/src/docs/uk-UA/features/mute.md b/src/docs/uk-UA/features/mute.md
new file mode 100644
index 0000000000..da3cfcc368
--- /dev/null
+++ b/src/docs/uk-UA/features/mute.md
@@ -0,0 +1,13 @@
+# Ігнорувати
+
+ユーザーをミュートすると、そのユーザーに関する次のコンテンツがMisskeyに表示されなくなります:
+
+* タイムラインや投稿の検索結果内の、そのユーザーの投稿(およびそれらの投稿に対する返信やRenote)
+* そのユーザーからの通知
+* メッセージ履歴一覧内の、そのユーザーとのメッセージ履歴
+
+ユーザーをミュートするには、対象のユーザーのユーザーページに表示されている「ミュート」ボタンを押します。
+
+ミュートを行ったことは相手に通知されず、ミュートされていることを知ることもできません。
+
+設定>ミュート から、自分がミュートしているユーザー一覧を確認することができます。
diff --git a/src/docs/uk-UA/features/note.md b/src/docs/uk-UA/features/note.md
new file mode 100644
index 0000000000..1ad874ca68
--- /dev/null
+++ b/src/docs/uk-UA/features/note.md
@@ -0,0 +1,51 @@
+# Записи
+ノートは、Misskeyに投稿される、文章、ファイル、アンケートなどを含むコンテンツで、Misskeyの中心的概念です。また、そのノートを作成する行為自体もノートと呼ばれます。
+
+ノートが作成されると、[タイムライン](./timeline)に追加され、自分の[フォロワー](./follow)やサーバーのユーザーが見れるようになります。
+
+ノートには、[リアクション](./reaction)を行うことができます。また、返信や引用もできます。
+
+ノートを[お気に入り](./favorite)登録することで、後で簡単に見返すことができます。
+
+## ノートを作成する
+ノートを作成するには、画面上にある鉛筆マークのボタンを押して、作成フォームを開きます。作成フォームに内容を入力し、「ノート」ボタンを押すことでノートが作成されます。 ノートには、画像、動画など任意のファイルや、[アンケート](./poll)を添付することができます。また、本文中には[MFM](./mfm)が使用でき、[メンション](./mention)や[ハッシュタグ](./hashtag)を含めることもできます。 他にも、CWや公開範囲といった設定も行えます(詳細は後述)。
+<div class="info">ℹ️ コンピューターのクリップボードに画像データがある状態で、フォーム内のテキストボックスにペーストするとその画像を添付することができます。</div>
+<div class="info">ℹ️ テキストボックス内で<kbd class="key">Ctrl + Enter</kbd>を押すことでも投稿できます。</div>
+
+## Поширити
+既にあるノートを引用、もしくはそのノートを新しいノートとして共有する行為、またそれによって作成されたノートをRenoteと呼びます。 自分がフォローしているユーザーの、気に入ったノートを自分のフォロワーに共有したい場合や、過去の自分のノートを再度共有したい場合に使います。 同じノートに対して無制限にRenoteを行うことができますが、あまり連続して使用すると迷惑になる場合もあるので、注意しましょう。
+<div class="warn">⚠️ 公開範囲がフォロワーやダイレクトのノートはRenoteできません</div>
+
+Renoteを削除するには、Renoteの時刻表示の隣にある「...」を押し、「Renote解除」を選択します。
+
+## CW
+Contents Warningの略で、ノートの内容を、閲覧者の操作なしには表示しないようにできる機能です。主に長大な内容を隠すためや、ネタバレ防止などに使うことができます。 設定するには、フォームの「内容を隠す」ボタン(目のアイコン)を押します。すると新しい入力エリアが表れるので、そこに内容の要約を記入します。
+
+## Видимість
+ノートごとに、そのノートが公開される範囲を設定することができます。フォームの「ノート」ボタンの左にあるアイコンを押すと公開範囲を以下から選択できます。
+
+### Публічний
+全ての人に対してノートが公開されるほか、サーバーの全てのタイムライン(ホームタイムライン、ローカルタイムライン、ソーシャルタイムライン、グローバルタイムライン)にノートが流れます。
+<div class="warn">⚠️ アカウントが<a href="./silence">サイレンス</a>状態の時は、この公開範囲は使用できません。</div>
+
+### Домівка
+全ての人に対してノートが公開されますが、フォロワー以外のローカルタイムライン、ソーシャルタイムライン、グローバルタイムラインにはノートは流れません。
+
+### Підписники
+自分のフォロワーに対してのみノートを公開します。フォロワーの全てのタイムラインに流れます。
+
+### Особисто
+指定したユーザーに対してのみノートを公開します。指定したユーザーの全てのタイムラインに流れます。
+
+### 「ローカルのみ」オプション
+このオプションを有効にすると、リモートにノートを連合しなくなります。
+
+### 公開範囲の比較
+<table>
+    <tr><th></th><th>Публічний</th><th>Домівка</th><th>Підписники</th><th>Особисто</th></tr>
+    <tr><th>フォロワーのLTL/STL/GTL</th><td>✔</td><td>✔</td><td>✔</td><td></td></tr>
+    <tr><th>非フォロワーのLTL/STL/GTL</th><td>✔</td><td></td><td></td><td></td></tr>
+</table>
+
+## Закріпити
+ノートをピン留めすると、ユーザーページに常にそのノートを表示しておくことができます。 ノートのメニューを開き、「ピン留め」を選択してピン留めできます。 複数のノートをピン留めできます。
diff --git a/src/docs/uk-UA/features/pages.md b/src/docs/uk-UA/features/pages.md
new file mode 100644
index 0000000000..55cd74544b
--- /dev/null
+++ b/src/docs/uk-UA/features/pages.md
@@ -0,0 +1,10 @@
+# Pages
+
+## Змінні
+変数を使うことで動的なページを作成できます。テキスト内で <b>{ 変数名 }</b> と書くとそこに変数の値を埋め込めます。例えば <b>Hello { thing } world!</b> というテキストで、変数(thing)の値が <b>ai</b> だった場合、テキストは <b>Hello ai world!</b> になります。
+
+変数の評価(値を算出すること)は上から下に行われるので、ある変数の中で自分より下の変数を参照することはできません。例えば上から <b>A、B、C</b> と3つの変数を定義したとき、<b>C</b>の中で<b>A</b>や<b>B</b>を参照することはできますが、<b>A</b>の中で<b>B</b>や<b>C</b>を参照することはできません。
+
+ユーザーからの入力を受け取るには、ページに「ユーザー入力」ブロックを設置し、「変数名」に入力を格納したい変数名を設定します(変数は自動で作成されます)。その変数を使ってユーザー入力に応じた動作を行えます。
+
+関数を使うと、値の算出処理を再利用可能な形にまとめることができます。関数を作るには、「関数」タイプの変数を作成します。関数にはスロット(引数)を設定することができ、スロットの値は関数内で変数として利用可能です。また、関数を引数に取る関数(高階関数と呼ばれます)も存在します。関数は予め定義しておくほかに、このような高階関数のスロットに即席でセットすることもできます。
diff --git a/src/docs/uk-UA/features/reaction.md b/src/docs/uk-UA/features/reaction.md
new file mode 100644
index 0000000000..b73f7bf1d0
--- /dev/null
+++ b/src/docs/uk-UA/features/reaction.md
@@ -0,0 +1,11 @@
+# Реакції
+他の人のノートに、絵文字を付けて簡単にあなたの反応を伝えられる機能です。 リアクションするには、ノートの + アイコンをクリックしてピッカーを表示し、絵文字を選択します。 リアクションには[カスタム絵文字](./custom-emoji)も使用できます。
+
+## リアクションピッカーのカスタマイズ
+ピッカーに表示される絵文字を自分好みにカスタマイズすることができます。 設定の「リアクション」で設定します。
+
+## リモート投稿へのリアクションについて
+リアクションはMisskeyオリジナルの機能であるため、リモートインスタンスがMisskeyでない限りは、ほとんどの場合「Like」としてアクティビティが送信されます。一般的にはLikeは「お気に入り」として実装されているようです。
+
+## リモートからのリアクションについて
+リモートから「Like」アクティビティを受信したとき、Misskeyでは「👍」のリアクションとして解釈されます。
diff --git a/src/docs/uk-UA/features/silence.md b/src/docs/uk-UA/features/silence.md
new file mode 100644
index 0000000000..654ffcaeab
--- /dev/null
+++ b/src/docs/uk-UA/features/silence.md
@@ -0,0 +1,6 @@
+# Заглушити
+サイレンスは、アカウントに設定される状態のひとつです。
+
+アカウントがサイレンス状態になると、ノートの公開範囲をパブリックにできなくなります。 ホーム、フォロワー、ダイレクトは選択可能なため、サイレンスを受けた場合でもフォロワーやあなたのユーザーページを直接訪れた場合は投稿を閲覧できますが、GTL(連合タイムライン)やLTL(ローカルタイムライン)には投稿が流れません。
+
+アカウントのサイレンス状態は、サーバーのモデレーターによって有効化/無効化されます。
diff --git a/src/docs/uk-UA/features/theme.md b/src/docs/uk-UA/features/theme.md
new file mode 100644
index 0000000000..baa74c33e4
--- /dev/null
+++ b/src/docs/uk-UA/features/theme.md
@@ -0,0 +1,68 @@
+# Тема
+
+テーマを設定して、Misskeyクライアントの見た目を変更できます。
+
+## テーマの設定
+設定 > テーマ
+
+## テーマを作成する
+テーマコードはJSON5で記述されたテーマオブジェクトです。 テーマは以下のようなオブジェクトです。
+``` js
+{
+    id: '17587283-dd92-4a2c-a22c-be0637c9e22a',
+
+    name: 'Danboard',
+    author: 'syuilo',
+
+    base: 'light',
+
+    props: {
+        accent: 'rgb(218, 141, 49)',
+        bg: 'rgb(218, 212, 190)',
+        fg: 'rgb(115, 108, 92)',
+        panel: 'rgb(236, 232, 220)',
+        renote: 'rgb(100, 152, 106)',
+        link: 'rgb(100, 152, 106)',
+        mention: '@accent',
+        hashtag: 'rgb(100, 152, 106)',
+        header: 'rgba(239, 227, 213, 0.75)',
+        navBg: 'rgb(216, 206, 182)',
+        inputBorder: 'rgba(0, 0, 0, 0.1)',
+    },
+}
+
+```
+
+* `id` ... テーマの一意なID。UUIDをおすすめします。
+* `name` ... テーマ名
+* `author` ... テーマの作者
+* `desc` ... テーマの説明(オプション)
+* `base` ... 明るいテーマか、暗いテーマか
+    * `light`にすると明るいテーマになり、`dark`にすると暗いテーマになります。
+    * テーマはここで設定されたベーステーマを継承します。
+* `props` ... テーマのスタイル定義。これから説明します。
+
+### テーマのスタイル定義
+`props`下にはテーマのスタイルを定義します。 キーがCSSの変数名になり、バリューで中身を指定します。 なお、この`props`オブジェクトはベーステーマから継承されます。 ベーステーマは、このテーマの`base`が`light`なら[_light.json5](https://github.com/misskey-dev/misskey/blob/develop/src/client/themes/_light.json5)で、`dark`なら[_dark.json5](https://github.com/misskey-dev/misskey/blob/develop/src/client/themes/_dark.json5)です。 つまり、このテーマ内の`props`に`panel`というキーが無くても、そこにはベーステーマの`panel`があると見なされます。
+
+#### バリューで使える構文
+* 16進数で表された色
+    * 例: `#00ff00`
+* `rgb(r, g, b)`形式で表された色
+    * 例: `rgb(0, 255, 0)`
+* `rgb(r, g, b, a)`形式で表された透明度を含む色
+    * 例: `rgba(0, 255, 0, 0.5)`
+* 他のキーの値の参照
+    * `@{キー名}`と書くと他のキーの値の参照になります。`{キー名}`は参照したいキーの名前に置き換えます。
+    * 例: `@panel`
+* 定数(後述)の参照
+    * `${定数名}`と書くと定数の参照になります。`{定数名}`は参照したい定数の名前に置き換えます。
+    * 例: `$main`
+* 関数(後述)
+    * `:{関数名}<{引数}<{色}`
+
+#### 定数
+「CSS変数として出力はしたくないが、他のCSS変数の値として使いまわしたい」値があるときは、定数を使うと便利です。 キー名を`$`で始めると、そのキーはCSS変数として出力されません。
+
+#### Функції
+wip
diff --git a/src/docs/uk-UA/features/timeline.md b/src/docs/uk-UA/features/timeline.md
new file mode 100644
index 0000000000..3acb613c73
--- /dev/null
+++ b/src/docs/uk-UA/features/timeline.md
@@ -0,0 +1,31 @@
+# Стрічка
+タイムラインは、[ノート](./note)が時系列で表示される機能です。 タイムラインには以下で示す種類があり、種類によって表示されるノートも異なります。 なお、タイムラインの種類によってはサーバーにより無効になっている場合があります。
+
+## Домівка
+自分のフォローしているユーザーの投稿が流れます。HTLと略されます。
+
+## Локальна
+全てのローカルユーザーの「ホーム」指定されていない投稿が流れます。LTLと略されます。
+
+## Соціальна
+自分のフォローしているユーザーの投稿と、全てのローカルユーザーの「ホーム」指定されていない投稿が流れます。STLと略されます。
+
+## Глобальна
+全てのローカルユーザーの「ホーム」指定されていない投稿と、サーバーに届いた全てのリモートユーザーの「ホーム」指定されていない投稿が流れます。GTLと略されます。
+
+## Порівняння
+| ソース          |            |         | Стрічка  |           |           |
+| ------------ | ---------- | ------- | -------- | --------- | --------- |
+| Користувачі  | Видимість  | Домівка | Локальна | Соціальна | Глобальна |
+| ローカル (フォロー)  | 公開         | ✔       | ✔        | ✔         | ✔         |
+|              | Домівка    | ✔       |          | ✔         |           |
+|              | Підписники | ✔       | ✔        | ✔         | ✔         |
+| リモート (フォロー)  | 公開         | ✔       |          | ✔         | ✔         |
+|              | Домівка    | ✔       |          | ✔         |           |
+|              | Підписники | ✔       |          | ✔         | ✔         |
+| ローカル (未フォロー) | 公開         |         | ✔        | ✔         | ✔         |
+|              | Домівка    |         |          |           |           |
+|              | Підписники |         |          |           |           |
+| リモート (未フォロー) | 公開         |         |          |           | ✔         |
+|              | Домівка    |         |          |           |           |
+|              | Підписники |         |          |           |           |
diff --git a/src/docs/uk-UA/features/widgets.md b/src/docs/uk-UA/features/widgets.md
new file mode 100644
index 0000000000..13e848fbe7
--- /dev/null
+++ b/src/docs/uk-UA/features/widgets.md
@@ -0,0 +1,7 @@
+# Віджети
+ウィジェットは、MisskeyのUI上に設置できる小型の情報表示、操作が行えるパーツです。
+
+ウィジェットを編集するには、ウィジェット編集モードに切り替えます。切り替え方法はUIによって異なります。 ウィジェット編集モードでは、ウィジェットの追加、削除、並び替え、およびそれぞれのウィジェットの設定を行えます。
+
+## 利用可能なウィジェット一覧
+todo
diff --git a/src/docs/uk-UA/general/apps.md b/src/docs/uk-UA/general/apps.md
new file mode 100644
index 0000000000..1f4c85fe8f
--- /dev/null
+++ b/src/docs/uk-UA/general/apps.md
@@ -0,0 +1,6 @@
+# サードパーティアプリのリスト
+## クライアント
+todo
+
+## 連携サービス
+todo
diff --git a/src/docs/uk-UA/general/faq.md b/src/docs/uk-UA/general/faq.md
new file mode 100644
index 0000000000..ecb664e32e
--- /dev/null
+++ b/src/docs/uk-UA/general/faq.md
@@ -0,0 +1,22 @@
+# よくある質問
+ここでは利用上のよくある質問について掲載しています。 Misskeyのプロジェクト自体についてのよくある質問は[こちら](./misskey)に掲載されています。
+
+### iOS/Androidのアプリはありますか?
+公式にはそういったOSのネイティブアプリを開発していませんが、サードパーティ製のアプリがいくつかあります。 詳しくは[こちら](./apps)をご覧ください。
+
+ただ、サードパーティ製アプリはどうしても機能への対応が遅れてしまうため、とくに拘りがなければ公式のWebクライアントの利用をおすすめします。 なお、MisskeyのWebクライアントはPWAに対応しているので、ネイティブアプリのように動作させることも可能です。 詳しくは[こちら](todo)をご覧ください。
+
+## 他のサーバーのユーザーをフォローするときは?
+メニューから検索を選び、ユーザー名をホスト込みで入力します。例: `@syuilo@misskey.io`
+
+## Renoteを削除するには?
+Renoteの時刻表示の隣にある「...」を押し、「Renote解除」を選択します。 Renoteについては[こちら](../features/note)をご確認ください。
+
+## URLのプレビューを表示させたくない
+MFMには、そのURLのプレビューを無効にする構文があります。詳細は[MFMチートシート](/mfm-cheat-sheet)をご確認ください。
+
+## カスタム絵文字を追加したい
+運営者のみがカスタム絵文字を追加、編集、削除できます。それらを希望する場合は運営者に依頼してください。
+
+## Botを開発したい
+Misskey APIを利用してBotの開発が可能です。[こちら](../advanced/develop-bot)をご確認ください。
diff --git a/src/docs/uk-UA/general/glossary.md b/src/docs/uk-UA/general/glossary.md
new file mode 100644
index 0000000000..809babdca4
--- /dev/null
+++ b/src/docs/uk-UA/general/glossary.md
@@ -0,0 +1,83 @@
+# 用語集
+Misskeyに関する用語集です。
+
+## AcitivityPub
+(読み: あくてぃびてぃぱぶ) 分散型を実現するために用いられるプロトコル(仕様)。このプロトコルに則ってサーバー同士通信を行うことで、連合が行われ、Fediverseを形成しています。
+
+## AiScript
+(読み: あいすくりぷと) Misskey上で使用できるプログラミング言語です。詳細は[こちら。](../advanced/aiscript)
+
+## API
+(読み: えーぴーあい) Misskeyのサーバーが公開している、プログラムからMisskeyを扱うためのインターフェース。詳細は[こちら。](../advanced/api)
+
+## Bot
+(読み: ぼっと) プログラムによって動作しているアカウント。
+
+## CW
+(読み: こんてんつわーにんぐ) Contents Warningの略。ノートの内容を、操作なしには表示しないようにできる機能。主に長大な内容を隠すためや、ネタバレ防止などに使われます。
+
+## Fediverse
+(読み: ふぇでぃばーす) Misskeyを含む様々な分散型ソフトウェアのサーバーで構成されたネットワーク。
+
+## GTL
+グローバルタイムライン(Global TimeLine)の略。タイムラインの詳細は[こちら。](../features/timeline)
+
+## HTL
+ホームタイムライン(Home TimeLine)の略。タイムラインの詳細は[こちら。](../features/timeline)
+
+## LTL
+ローカルタイムライン(Local TimeLine)の略。タイムラインの詳細は[こちら。](../features/timeline)
+
+## MFM
+(読み: えむえふえむ) Misskey Flavored Markdownの略で、Misskey上で使用できるマークアップ言語です。詳細は[こちら。](../features/mfm)
+
+## NSFW
+(読み: のっとせーふふぉーわーく) Not Safe For Workの略。画像を「閲覧注意」扱いにし、操作なしには表示しないようにすることができる機能。
+
+## Поширити
+(読み: りのーと) 既にあるノートを引用、もしくはそのノートを新しいノートとして共有する行為、またそれによって作成されたノート。詳細は[こちら。](../features/note)
+
+## STL
+ソーシャルタイムライン(Social TimeLine)の略。タイムラインの詳細は[こちら。](../features/timeline)
+
+## 藍
+(読み: あい) Misskeyの看板娘(公式キャラクター)です。
+
+## アクティブユーザー
+インスタンスにアカウントを作っているユーザーのうち、現在も実際にサービスを利用しているユーザーのこと。
+
+## Інстанс
+todo
+
+## コントロールパネル
+インスタンスの設定画面のこと。
+
+## Сервер
+todo
+
+## Заглушити
+ノートをパブリックな公開範囲で投稿できなくされている状態。モデレーターの判断でユーザーごとに設定されます。詳細は[こちら。](../features/silence)
+
+## Призупинити
+アカウントが使用不可に設定されている状態。
+
+## Диск
+Misskeyにアップロードしたファイルを管理する機能。詳細は[こちら。](../features/drive)
+
+## Записи
+Misskeyに投稿される、文章、ファイル、アンケートなどを含めることができるコンテンツ。詳細は[こちら。](../features/note)
+
+## ミスキスト
+Misskeyを使う人のこと。
+
+## Модератор
+スパムの凍結およびサイレンスや不適切な投稿の削除など、コミュニティ運営に関する権限を持つユーザー。
+
+## Віддалені
+他サーバーのことを指します。リモートユーザーといったように接頭辞としても使われます。ローカルの逆です。
+
+## Федіверс
+サーバー上で作成された情報が他のサーバーに伝わること。
+
+## Локальна
+自サーバーのことを指します。ローカルユーザー、ローカルタイムラインといったように接頭辞としても使われます。リモートの逆です。
diff --git a/src/docs/uk-UA/general/links.md b/src/docs/uk-UA/general/links.md
new file mode 100644
index 0000000000..d6b16856fb
--- /dev/null
+++ b/src/docs/uk-UA/general/links.md
@@ -0,0 +1,5 @@
+# リンク集
+
+## ライブラリ
+- [misskey-dev/misskey.js](https://github.com/misskey-dev/misskey.js) - JavaScriptのMisskey SDK
+- [misskey-dev/mfm.js](https://github.com/misskey-dev/mfm.js) - JavaScriptのMFMパーサー実装
diff --git a/src/docs/uk-UA/general/misskey.md b/src/docs/uk-UA/general/misskey.md
new file mode 100644
index 0000000000..293d7093fb
--- /dev/null
+++ b/src/docs/uk-UA/general/misskey.md
@@ -0,0 +1,87 @@
+# Про Misskey
+
+Misskeyはオープンソースの分散型マイクロブログプラットフォームプロジェクトです。 開発は日本でsyuiloによって2014年から開始されました。 ドライブ、リアクションなどの豊富な機能や、高いカスタマイズ性を備えたUIを持つことが特徴です。
+
+## 歴史
+開発当初は掲示板がメインのサービスでしたが、ユーザーが短文を投稿し、それを時系列で流れるタイムライン機能を追加したところ人気が高まり、徐々にそれがメインとして開発が進むようになりました。 当初は分散型ではありませんでしたが、2018年にAcitivityPubを実装し分散型になったことで、より多くの方に認知され利用されるサービスになり、現在に至ります。
+<div class="info">ℹ️ Misskeyという名前は、syuiloが当時聴いていたMay'nというアーティストの楽曲、Brain Diverの歌詞に由来します。</div>
+
+誰でも開発に参加することができ、現在でも活発に開発が続いています。
+
+## 分散型とは何か?
+
+<b>分散(distributed)型</b>とは、<b>非中央集権(decentralized)</b>とも呼ばれ、コミュニティが多数のサーバーに分散して存在し、それらが相互に<b>通信(連合、federation)</b>することでコンテンツ共有<b>ネットワーク(Fediverse)</b>を形成していることが特徴のサービスです。 単一のサーバーしか存在しない、もしくは複数存在しても互いに独立している場合は中央集権なサービスと言われ、例えばTwitterやFacebookなどほとんどのサービスがそれに該当します。 分散型のメリットは、自分に合った運営者やテーマのサーバーを選択できることです。自分でサーバーを作成することもできます。連合するおかげで、どのサーバーを選んでも、同じコミュニティにアクセスできます。
+
+## 常にオープンソース
+Misskeyはこれまでもこれからも、オープンソースであり続けます。オープンソースとは、簡単に言うと<b>ソフトウェアのソースコード(プログラム)が公開されている</b>ことです。ソースコードの修正や再配布が可能であることを定義に含めることもあります。 Misskeyのすべてのソースコードは[AGPL](https://github.com/misskey-dev/misskey/blob/develop/LICENSE)というオープンソースライセンスの下に[公開](https://github.com/misskey-dev)されていて、誰でも自由に閲覧、使用、修正、改変、再配布をすることができます。 オープンソースは、自分で好きなように変えたり、有害な処理が含まれていないことを確認することができたり、誰でも開発に参加できるなどの、様々なメリットがあります。 上述の分散型を実現するためにも、オープンソースであるということは必要不可欠な要素です。 再び引き合いに出しますが、TwitterやFacebookなどの利益を得ているほとんどのサービスはオープンソースではありません。
+
+<div class="info">ℹ️ 技術的に言うと、MisskeyのソースコードはGitで管理されていて、リポジトリは<a href="https://github.com/misskey-dev" target="_blank">GitHub上でホスティングされています。</a></div>
+
+## 開発に参加する、プロジェクトを支援する
+Misskeyを気に入っていただけたら、ぜひプロジェクトを支援してください。プロジェクトに貢献するには、以下で紹介するようにいろいろな方法があります。方法によっては開発のスキルは不要なので、誰でも気軽に参加し貢献することができます。いつでもお待ちしています。
+
+### 機能を追加したり、バグを修正する
+ソフトウェアエンジニアのスキルをお持ちの方であれば、ソースコードを編集する形でプロジェクトに貢献することができます。 貢献についてのガイドは[こちら](https://github.com/misskey-dev/misskey/blob/develop/CONTRIBUTING.md)です。
+
+### 議論に参加する
+新しい機能、または既存の機能について意見を述べたり、不具合を報告したりすることでも貢献できます。 そのようなディスカッションは[GitHub](https://github.com/misskey-dev)上か、[フォーラム](https://forum.misskey.io/)等で行われます。
+
+### テキストを翻訳する
+Misskeyは様々な言語に対応しています(i18n -internationalizationの略- と呼ばれます)。元の言語は基本的に日本語ですが、有志によって他の言語へと翻訳されています。 その翻訳作業に加わっていただくことでもMisskeyに貢献できます。 Misskeyは[Crowdinというサービスを使用して翻訳の管理を行っています。](https://crowdin.com/project/misskey)
+
+### 感想を投稿する
+不具合報告等だけではなく、Misskeyの良い点、楽しい点といったポジティブな意見もぜひ共有してください。開発の励みになり、それは間接的ですがプロジェクトへの貢献です。
+
+### ミスキストを増やす
+ミスキストとは、Misskeyを使用する人のことです。 知り合いに紹介するなどしてMisskeyを広めていただければ、ミスキストが増え開発のモチベーションが上がります。
+
+### 寄付をする
+Misskeyはビジネスではなく、利用は無料であるため、収益は皆様からの寄付のみです。(インスタンスによっては広告収入を得ているような場合もありますが、それは運営者の収入であり直接開発者への収入にはなりません) 寄付をしていただければ、今後も開発を続けることが可能になり、プロジェクトへの貢献になります。 寄付は基本的には[Patreon](https://www.patreon.com/syuilo)で受け付けています。 一定額寄付していただけると、Misskeyの[情報ページ](/about-misskey)に名前を記載することができます。
+
+また、サーバーの運営者も、基本的には収益を得ていません。サーバーの運営にはコストがかかるので、運営者の支援をすることもご検討ください。 開発には直接関係しませんが、サーバーがあってこそのプロジェクトなので、運営が維持されるというのは開発と同じくらい重要なことです。
+
+## クレジット
+Misskeyの開発者や、Misskeyに寄付をしてくださった方の一覧は[こちら](/about-misskey)で見ることができます。
+
+## よくある質問
+### プロジェクトは何を目指していますか?
+強いて言うと、漠然的になりますが広く使われる汎用的なプラットフォームになることを目指しています。 Misskeyは他のプロジェクトとは違い、何らかの思想(例えば、反中央集権)やビジョンに基づいて開発が行われているわけではなく、その点ではフラットです。 それが逆に、特定の方向性に縛られないフレキシブルさを生み出すことに繋がっていると感じています。
+<!-- TODO: ここにロードマップへのリンク -->
+
+### 企業によって開発されていますか?
+いいえ。Misskeyの開発は個人で行われており、商業的でもないため、特定の企業の関りはありません。 開発メンバーも基本的にはボランティアです。 また、開発に対し企業のスポンサーがつくこともありますが、その場合でもやはり開発は個人のコミュニティが主体です。
+
+### 誰が運営していますか?
+Misskeyは分散型なため、各サーバーにそれぞれ異なった運営者がいます。従って、特定の個人や企業によって、Misskeyの全てが運営されているわけではありません。 また、開発チームが運営を行うわけでもないため、運営に関する連絡は、お使いのサーバーの運営者に行ってください。 サーバーの運営者は、[このページ](/about)で確認することができます。 あなたがサーバーを作成すれば、あなたが運営者になります。
+
+### どのサーバーを選べばいいですか?
+[サーバー一覧が公開されています。](https://join.misskey.page/ja-JP/instances) サーバーによってコミュニティのテーマ(特定のこと、ものが好き 等)が決められている場合があるので、自分に合ったテーマのサーバーがあれば、そこを選ぶと良いかもしれません。 他にも、サーバーの規模、ユーザー層、国および言語、運営者が信頼できるかどうか、などの観点があります。 なお、Misskey公式のサーバーというものはありません。自身で新しくサーバーを作成するという選択肢もあります。
+
+基本的にどのサーバーを選んだとしても、他の全てのサーバーのユーザーと繋がることができます。
+
+### サーバーを建てるにはどうしたらいいですか?
+Misskeyサーバーの作成に興味を持っていただきありがとうございます。 2021年現在、Misskeyのホスティングサービスは存在しないため、サーバーの作成にはある程度の知識が必要です。 サーバーの作成方法については[こちら](todo)をご覧ください。
+
+### どのような技術を使用していますか?
+Misskeyは開発が進むにつれ使用する技術も大きく変わってきました。開発当初はMySQL + PHP + jQueryといった構成でしたが、現在は以下のようになっています。
+- サーバーサイド: Node.js
+- データベース: PostgreSQL、Redis
+- UIフレームワーク: Vue.js
+- プログラミング言語: TypeScript
+
+また、MFMやAiScriptなどの、Misskeyから派生して独自の技術も開発しています。
+
+### Mastodonのフォークですか?
+いいえ。MisskeyはMastodonやその他のプロジェクトとは全く別のプロジェクトです。 開発に関しても、Misskeyの方が昔から開発されています。ただし、分散型になったのはMastodonの登場より後です。 同じAcitivityPubという分散のためのプロトコルを実装しているという点以外、両者に特に関りがあるわけでもありません。
+
+### iOS/Androidのアプリはありますか?
+公式にはそういったOSのネイティブアプリを開発していませんが、サードパーティ製のアプリがいくつかあります。 詳しくは[こちら](./apps)をご覧ください。
+
+ただ、サードパーティ製アプリはどうしても機能への対応が遅れてしまうため、とくに拘りがなければ公式のWebクライアントの利用をおすすめします。 なお、MisskeyのWebクライアントはPWAに対応しているので、ネイティブアプリのように動作させることも可能です。 詳しくは[こちら](todo)をご覧ください。
+
+### Misskeyのロゴ、アイコンはどこで入手できますか?
+(準備中)
+
+### 時折目にする猫耳の可愛い女の子は?
+Misskeyの守り神、藍ちゃんです。アイチャンカワイイヤッター!
+<div class="info">ℹ️ 藍ちゃんについては<a href="https://xn--931a.moe/" target="_blank">こちら</a>です。</div>
diff --git a/src/docs/uk-UA/general/report-issue.md b/src/docs/uk-UA/general/report-issue.md
new file mode 100644
index 0000000000..63527e32af
--- /dev/null
+++ b/src/docs/uk-UA/general/report-issue.md
@@ -0,0 +1,8 @@
+# 不具合の報告
+不具合と思われる状況に遭遇したときは、まず[トラブルシューティング](./troubleshooting)をご一読ください。 それでも問題が解決しないときは、以下の情報を含めて[フォーラム](https://forum.misskey.io/)に投稿してください。 投稿することで、解決策が見つかったり、不具合と判断されれば開発チームによって修正が行われます。
+
+## 含める情報
+- Misskeyのバージョン([情報ページ](/about)で確認できます)
+- お使いのブラウザの種類とバージョン
+- お使いのOSの種類とバージョン
+- 問題の再現手順
diff --git a/src/docs/uk-UA/general/troubleshooting.md b/src/docs/uk-UA/general/troubleshooting.md
new file mode 100644
index 0000000000..4a35091299
--- /dev/null
+++ b/src/docs/uk-UA/general/troubleshooting.md
@@ -0,0 +1,36 @@
+# トラブルシューティング
+<div class="info">ℹ️ <a href="./faq">よくある質問</a>も合わせてお役立てください。</div>
+
+問題が発生したときは、まずこちらをご確認ください。 該当する項目が無い、もしくは手順を試しても効果がない場合は、サーバーの管理者に連絡するか[不具合を報告](./report-issue)してください。
+
+## クライアントが起動しない
+ほとんどの場合、お使いのブラウザまたはOSのバージョンが古いことが原因です。 ブラウザおよびOSのバージョンを最新のものに更新してから、再度試してみてください。
+
+これは稀ですが、それでも起動しない場合は、キャッシュが原因の場合があります。ブラウザのキャッシュをクリアして、再度試してみてください。
+
+## ページが読み込めない
+クライアントが起動するもののページが読み込めないというエラーが出る場合は、ネットワークに問題がないか確認してください。また、サーバーがダウンしていないか確認してください。
+
+これは稀ですが、キャッシュが原因の場合があります。ブラウザのキャッシュをクリアして、再度試してみてください。
+
+まだ問題がある場合は、サーバーの問題と思われるのでサーバーの管理者に連絡してください。
+
+## クライアントの動作が遅い
+以下を試してみてください:
+
+- クライアント設定で「UIのアニメーションを減らす」を有効にする
+- クライアント設定で「モーダルにぼかし効果を使用」を無効にする
+- お使いのブラウザの設定でハードウェアアクセラレーションを有効にする
+- お使いのデバイスのスペックを上げる
+
+## 通知やアンテナ等の点滅が消えない
+点滅は、未読のコンテンツがあることを示しています。通常点滅が消えない場合は、コンテンツを遡ると未読なコンテンツが残っています。 すべて既読にしたと思われるのに、それでもなお点滅が続く場合(おそらく不具合と思われます)は設定から強制的にすべて既読扱いにすることができます。
+
+## Renoteができない
+フォロワー限定のノートはRenoteすることはできません。
+
+## UI上で特定の要素が表示されない
+広告ブロッカーを使用しているとそのような不具合が発生することがあります。Misskeyではオフにしてご利用ください。
+
+## UI上で未翻訳の部分がある
+ほとんどの場合、単に翻訳が間に合っていないだけで、不具合ではありません。翻訳が終わるまでお待ちください。 [翻訳に参加](./misskey)していただくことも可能です。
diff --git a/src/docs/zh-CN/admin/disable-timelines.md b/src/docs/zh-CN/admin/disable-timelines.md
new file mode 100644
index 0000000000..b081e35ab0
--- /dev/null
+++ b/src/docs/zh-CN/admin/disable-timelines.md
@@ -0,0 +1,8 @@
+# LTL/STL/GTLの無効化
+Misskeyでは、LTL/STL/GTLをそれぞれ無効化することができます。有効/無効を切り替えるには、インスタンスコントロールパネルで設定します。
+
+LTLやSTLは、そのインスタンス全員の投稿が見れるため、新規のユーザーにとってはユーザーを探す必要がなくなり、興味のあるユーザーを見つけやすいという利点があります。 しかし同時に、フォロー機能が活用されなくなったり、不適切な投稿が目につきやすくなったり、チャットのようになることで内輪感が生じて逆に新規ユーザーが参加しにくくなるといったデメリットも持ち合わせています。 サーバーによってメリット/デメリットどちらが優勢かは異なるので、オプションとして無効にできるようになっています。 もしデメリットの方が上回っていると感じたら、それらのタイムラインを無効化することも検討してください。
+
+<div class="warn">⚠️ 無効化を行うと、ユーザーが困惑し、短期的に見て利用者が減る可能性があります。そのため、無効化の際は影響を慎重に検討し、事前に説明してフォローを整える期間を一定程度設けることを推奨します。</div>
+
+なお、管理者/モデレーターは、これらのタイムラインの無効化状態は適用されず、引き続き利用することが可能です。
diff --git a/src/docs/zh-CN/admin/faq.md b/src/docs/zh-CN/admin/faq.md
new file mode 100644
index 0000000000..317b4e0655
--- /dev/null
+++ b/src/docs/zh-CN/admin/faq.md
@@ -0,0 +1,5 @@
+# よくある質問
+ここでは、サーバー管理者向けのよくある質問を掲載しています。
+
+## デフォルトテーマを設定したい
+現在、デフォルトテーマ設定機能は実装されていません。
diff --git a/src/docs/zh-CN/advanced/aiscript.md b/src/docs/zh-CN/advanced/aiscript.md
new file mode 100644
index 0000000000..604d17daa8
--- /dev/null
+++ b/src/docs/zh-CN/advanced/aiscript.md
@@ -0,0 +1,7 @@
+# AiScript
+AiScriptは、Misskeyで使用できるスクリプト言語です。
+
+<div class="info">ℹ️ AiScript実装はMisskeyとは別リポジトリで、<a href="https://github.com/syuilo/aiscript" target="_blank">オープンソースで公開されています。</a></div>
+
+## 使い方
+AiScriptの構文や組み込み関数などのドキュメントは、[こちら](https://github.com/syuilo/aiscript/tree/master/docs)で公開されています。
diff --git a/src/docs/zh-CN/advanced/api.md b/src/docs/zh-CN/advanced/api.md
new file mode 100644
index 0000000000..76019b6145
--- /dev/null
+++ b/src/docs/zh-CN/advanced/api.md
@@ -0,0 +1,58 @@
+# Misskey API
+
+MisskeyAPIを使ってMisskeyクライアント、Misskey連携Webサービス、Bot等(以下「アプリケーション」と呼びます)を開発できます。 ストリーミングAPIもあるので、リアルタイム性のあるアプリケーションを作ることも可能です。
+
+APIを使い始めるには、まずアクセストークンを取得する必要があります。 このドキュメントでは、アクセストークンを取得する手順を説明した後、基本的なAPIの使い方を説明します。
+
+## アクセストークンの取得
+基本的に、APIはリクエストにはアクセストークンが必要となります。 APIにリクエストするのが自分自身なのか、不特定の利用者に使ってもらうアプリケーションなのかによって取得手順は異なります。
+
+* 前者の場合: [「自分自身のアクセストークンを手動発行する」](#自分自身のアクセストークンを手動発行する)に進む
+* 後者の場合: [「アプリケーション利用者にアクセストークンの発行をリクエストする」](#アプリケーション利用者にアクセストークンの発行をリクエストする)に進む
+
+### 自分自身のアクセストークンを手動発行する
+「設定 > API」で、自分のアクセストークンを発行できます。
+
+[「APIの使い方」へ進む](#APIの使い方)
+
+### アプリケーション利用者にアクセストークンの発行をリクエストする
+アプリケーション利用者のアクセストークンを取得するには、以下の手順で発行をリクエストします。
+
+#### Step 1
+
+UUIDを生成する。以後これをセッションIDと呼びます。
+
+> このセッションIDは毎回生成し、使いまわさないようにしてください。
+
+#### Step 2
+
+`{_URL_}/miauth/{session}`をユーザーのブラウザで表示させる。`{session}`の部分は、セッションIDに置き換えてください。
+> 例: `{_URL_}/miauth/c1f6d42b-468b-4fd2-8274-e58abdedef6f`
+
+表示する際、URLにクエリパラメータとしていくつかのオプションを設定できます:
+* `name` ... アプリケーション名
+    * > 例: `MissDeck`
+* `icon` ... アプリケーションのアイコン画像URL
+    * > 例: `https://missdeck.example.com/icon.png`
+* `callback` ... 認証が終わった後にリダイレクトするURL
+    * > 例: `https://missdeck.example.com/callback`
+    * リダイレクト時には、`session`というクエリパラメータでセッションIDが付きます
+* `permission` ... アプリケーションが要求する権限
+    * > 例: `write:notes,write:following,read:drive`
+    * 要求する権限を`,`で区切って列挙します
+    * どのような権限があるかは[APIリファレンス](/api-doc)で確認できます
+
+#### Step 3
+ユーザーが発行を許可した後、`{_URL_}/api/miauth/{session}/check`にPOSTリクエストすると、レスポンスとしてアクセストークンを含むJSONが返ります。
+
+レスポンスに含まれるプロパティ:
+* `token` ... ユーザーのアクセストークン
+* `user` ... ユーザーの情報
+
+[「APIの使い方」へ進む](#APIの使い方)
+
+## APIの使い方
+**APIはすべてPOSTで、リクエスト/レスポンスともにJSON形式です。RESTではありません。** アクセストークンは、`i`というパラメータ名でリクエストに含めます。
+
+* [APIリファレンス](/api-doc)
+* [ストリーミングAPI](./stream)
diff --git a/src/docs/zh-CN/advanced/create-plugin.md b/src/docs/zh-CN/advanced/create-plugin.md
new file mode 100644
index 0000000000..e444b9ed37
--- /dev/null
+++ b/src/docs/zh-CN/advanced/create-plugin.md
@@ -0,0 +1,74 @@
+# プラグインの作成
+Misskey Webクライアントのプラグイン機能を使うと、クライアントを拡張し、様々な機能を追加できます。 ここではプラグインの作成にあたってのメタデータ定義や、AiScript APIリファレンスを掲載します。
+
+## 元数据
+プラグインは、AiScriptのメタデータ埋め込み機能を使って、デフォルトとしてプラグインのメタデータを定義する必要があります。 メタデータは次のプロパティを含むオブジェクトです。
+
+### name
+プラグイン名
+
+### author
+プラグイン作者
+
+### version
+プラグインバージョン。数値を指定してください。
+
+### description
+プラグインの説明
+
+### permissions
+プラグインが要求する権限。MisskeyAPIにリクエストする際に用いられます。
+
+### config
+プラグインの設定情報を表すオブジェクト。 キーに設定名、値に以下のプロパティを含めます。
+
+#### type
+設定値の種類を表す文字列。以下から選択します。 string number boolean
+
+#### label
+ユーザーに表示する設定名
+
+#### description
+設定の説明
+
+#### default
+設定のデフォルト値
+
+## APIリファレンス
+AiScript標準で組み込まれているAPIは掲載しません。
+
+### Mk:dialog(title text type)
+ダイアログを表示します。typeには以下の値が設定できます。 info success warn error question 省略すると info になります。
+
+### Mk:confirm(title text type)
+確認ダイアログを表示します。typeには以下の値が設定できます。 info success warn error question 省略すると question になります。 ユーザーが"OK"を選択した場合は true を、"キャンセル"を選択した場合は false が返ります。
+
+### Mk:api(endpoint params)
+Misskey APIにリクエストします。第一引数にエンドポイント名、第二引数にパラメータオブジェクトを渡します。
+
+### Mk:save(key value)
+任意の値に任意の名前を付けて永続化します。永続化した値は、AiScriptコンテキストが終了しても残り、Mk:loadで読み取ることができます。
+
+### Mk:load(key)
+Mk:saveで永続化した指定の名前の値を読み取ります。
+
+### Plugin:register_post_form_action(title fn)
+投稿フォームにアクションを追加します。第一引数にアクション名、第二引数にアクションが選択された際のコールバック関数を渡します。 コールバック関数には、第一引数に投稿フォームオブジェクトが渡されます。
+
+### Plugin:register_note_action(title fn)
+ノートメニューに項目を追加します。第一引数に項目名、第二引数に項目が選択された際のコールバック関数を渡します。 コールバック関数には、第一引数に対象のノートオブジェクトが渡されます。
+
+### Plugin:register_user_action(title fn)
+ユーザーメニューに項目を追加します。第一引数に項目名、第二引数に項目が選択された際のコールバック関数を渡します。 コールバック関数には、第一引数に対象のユーザーオブジェクトが渡されます。
+
+### Plugin:register_note_view_interruptor(fn)
+UIに表示されるノート情報を書き換えます。 コールバック関数には、第一引数に対象のノートオブジェクトが渡されます。 コールバック関数の返り値でノートが書き換えられます。
+
+### Plugin:register_note_post_interruptor(fn)
+ノート投稿時にノート情報を書き換えます。 コールバック関数には、第一引数に対象のノートオブジェクトが渡されます。 コールバック関数の返り値でノートが書き換えられます。
+
+### Plugin:open_url(url)
+第一引数に渡されたURLをブラウザの新しいタブで開きます。
+
+### Plugin:config
+プラグインの設定が格納されるオブジェクト。プラグイン定義のconfigで設定したキーで値が入ります。
diff --git a/src/docs/zh-CN/advanced/develop-bot.md b/src/docs/zh-CN/advanced/develop-bot.md
new file mode 100644
index 0000000000..7f825e9bc4
--- /dev/null
+++ b/src/docs/zh-CN/advanced/develop-bot.md
@@ -0,0 +1,6 @@
+# Botの作成
+[Misskey API](./api)を利用してBotの開発が可能です。 また、いくつかのBot実装が公開されているため、ぜひ参考にしてください。
+
+- [syuilo/ai](https://github.com/syuilo/ai) ... Node.js上で動く、TypeScript製Bot実装
+
+Botを作成したときは、プロフィール設定からBotフラグをオンにしておくことを強くおすすめします。
diff --git a/src/docs/zh-CN/advanced/reversi-bot.md b/src/docs/zh-CN/advanced/reversi-bot.md
new file mode 100644
index 0000000000..c89ec0cbe3
--- /dev/null
+++ b/src/docs/zh-CN/advanced/reversi-bot.md
@@ -0,0 +1,160 @@
+# MisskeyリバーシBotの開発
+Misskeyのリバーシ機能に対応したBotの開発方法をここに記します。
+
+1. `games/reversi`ストリームに以下のパラメータを付けて接続する:
+    * `i`: botアカウントのAPIキー
+
+2. 対局への招待が来たら、ストリームから`invited`イベントが流れてくる
+    * イベントの中身に、`parent`という名前で対局へ誘ってきたユーザーの情報が含まれている
+
+3. `games/reversi/match`へ、`user_id`として`parent`の`id`が含まれたリクエストを送信する
+
+4. 上手くいくとゲーム情報が返ってくるので、`games/reversi-game`ストリームへ、以下のパラメータを付けて接続する:
+    * `i`: botアカウントのAPIキー
+    * `game`: `game`の`id`
+
+5. この間、相手がゲームの設定を変更するとその都度`update-settings`イベントが流れてくるので、必要であれば何かしらの処理を行う
+
+6. 設定に満足したら、`{ type: 'accept' }`メッセージをストリームに送信する
+
+7. ゲームが開始すると、`started`イベントが流れてくる
+    * イベントの中身にはゲーム情報が含まれている
+
+8. 石を打つには、ストリームに`{ type: 'set', pos: <位置> }`を送信する(位置の計算方法は後述)
+
+9. 相手または自分が石を打つと、ストリームから`set`イベントが流れてくる
+    * `color`として石の色が含まれている
+    * `pos`として位置情報が含まれている
+
+## 位置の計算法
+8x8のマップを考える場合、各マスの位置(インデックスと呼びます)は次のようになっています:
+```
++--+--+--+--+--+--+--+--+
+| 0| 1| 2| 3| 4| 5| 6| 7|
++--+--+--+--+--+--+--+--+
+| 8| 9|10|11|12|13|14|15|
++--+--+--+--+--+--+--+--+
+|16|17|18|19|20|21|22|23|
+...
+```
+
+### X,Y座標 から インデックス に変換する
+```
+pos = x + (y * mapWidth)
+```
+`mapWidth`は、ゲーム情報の`map`から、次のようにして計算できます:
+```
+mapWidth = map[0].length
+```
+
+### インデックス から X,Y座標 に変換する
+```
+x = pos % mapWidth
+y = Math.floor(pos / mapWidth)
+```
+
+## マップ情報
+マップ情報は、ゲーム情報の`map`に入っています。 文字列の配列になっており、ひとつひとつの文字がマス情報を表しています。 それをもとにマップのデザインを知る事が出来ます:
+* `(スペース)` ... マス無し
+* `-` ... マス
+* `b` ... 初期配置される黒石
+* `w` ... 初期配置される白石
+
+例えば、4*4の次のような単純なマップがあるとします:
+```text
++---+---+---+---+
+|   |   |   |   |
++---+---+---+---+
+|   | ○ | ● |   |
++---+---+---+---+
+|   | ● | ○ |   |
++---+---+---+---+
+|   |   |   |   |
++---+---+---+---+
+```
+
+この場合、マップデータはこのようになります:
+```javascript
+['----', '-wb-', '-bw-', '----']
+```
+
+## ユーザーにフォームを提示して対話可能Botを作成する
+ユーザーとのコミュニケーションを行うため、ゲームの設定画面でユーザーにフォームを提示することができます。 例えば、Botの強さをユーザーが設定できるようにする、といったシナリオが考えられます。
+
+フォームを提示するには、`reversi-game`ストリームに次のメッセージを送信します:
+```javascript
+{
+  type: 'init-form',
+  body: [フォームコントロールの配列]
+}
+```
+
+フォームコントロールの配列については今から説明します。 フォームコントロールは、次のようなオブジェクトです:
+```javascript
+{
+  id: 'switch1',
+  type: 'switch',
+  label: 'Enable hoge',
+  value: false
+}
+```
+`id` ... コントロールのID。 `type` ... コントロールの種類。後述します。 `label` ... コントロールと一緒に表記するテキスト。 `value` ... コントロールのデフォルト値。
+
+### フォームの操作を受け取る
+ユーザーがフォームを操作すると、ストリームから`update-form`イベントが流れてきます。 イベントの中身には、コントロールのIDと、ユーザーが設定した値が含まれています。 例えば、上で示したスイッチをユーザーがオンにしたとすると、次のイベントが流れてきます:
+```javascript
+{
+  id: 'switch1',
+  value: true
+}
+```
+
+### フォームコントロールの種類
+#### 开关
+type: `switch` スイッチを表示します。何かの機能をオン/オフさせたい場合に有用です。
+
+##### プロパティ
+`label` ... スイッチに表記するテキスト。
+
+#### ラジオボタン
+type: `radio` ラジオボタンを表示します。選択肢を提示するのに有用です。例えば、Botの強さを設定させるなどです。
+
+##### プロパティ
+`items` ... ラジオボタンの選択肢。例:
+```javascript
+items: [{
+  label: 'å¼±',
+  value: 1
+}, {
+  label: '中',
+  value: 2
+}, {
+  label: 'å¼·',
+  value: 3
+}]
+```
+
+#### スライダー
+type: `slider` スライダーを表示します。
+
+##### プロパティ
+`min` ... スライダーの下限。 `max` ... スライダーの上限。 `step` ... 入力欄で刻むステップ値。
+
+#### テキストボックス
+type: `textbox` テキストボックスを表示します。ユーザーになにか入力させる一般的な用途に利用できます。
+
+## ユーザーにメッセージを表示する
+設定画面でユーザーと対話する、フォーム以外のもうひとつの方法がこれです。ユーザーになにかメッセージを表示することができます。 例えば、ユーザーがBotの対応していないモードやマップを選択したとき、警告を表示するなどです。 メッセージを表示するには、次のメッセージをストリームに送信します:
+```javascript
+{
+  type: 'message',
+  body: {
+    text: 'メッセージ内容',
+    type: 'メッセージの種類'
+  }
+}
+```
+メッセージの種類: `success`, `info`, `warning`, `error`。
+
+## 投了する
+投了をするには、<a href="./api/endpoints/games/reversi/games/surrender">このエンドポイント</a>にリクエストします。
diff --git a/src/docs/zh-CN/advanced/stream.md b/src/docs/zh-CN/advanced/stream.md
new file mode 100644
index 0000000000..f9584e8c7f
--- /dev/null
+++ b/src/docs/zh-CN/advanced/stream.md
@@ -0,0 +1,350 @@
+# ストリーミングAPI
+
+ストリーミングAPIを使うと、リアルタイムで様々な情報(例えばタイムラインに新しい投稿が流れてきた、メッセージが届いた、フォローされた、など)を受け取ったり、様々な操作を行ったりすることができます。
+
+## ストリームに接続する
+
+ストリーミングAPIを利用するには、まずMisskeyサーバーに**websocket**接続する必要があります。
+
+以下のURLに、`i`というパラメータ名で認証情報を含めて、websocket接続してください。例:
+```
+%WS_URL%/streaming?i=xxxxxxxxxxxxxxx
+```
+
+認証情報は、自分のAPIキーや、アプリケーションからストリームに接続する際はユーザーのアクセストークンのことを指します。
+
+<div class="info">ℹ️ 認証情報の取得については、<a href="./api">こちらのドキュメント</a>をご確認ください。</div>
+
+---
+
+認証情報は省略することもできますが、その場合非ログインでの利用ということになり、受信できる情報や可能な操作は限られます。例:
+
+```
+%WS_URL%/streaming
+```
+
+---
+
+ストリームに接続すると、後述するAPI操作や、投稿の購読を行ったりすることができます。 しかしまだこの段階では、例えばタイムラインへの新しい投稿を受信したりすることはできません。 それを行うには、ストリーム上で、後述する**チャンネル**に接続する必要があります。
+
+**ストリームでのやり取りはすべてJSONです。**
+
+## 频道
+MisskeyのストリーミングAPIにはチャンネルという概念があります。これは、送受信する情報を分離するための仕組みです。 Misskeyのストリームに接続しただけでは、まだリアルタイムでタイムラインの投稿を受信したりはできません。 ストリーム上でチャンネルに接続することで、様々な情報を受け取ったり情報を送信したりすることができるようになります。
+
+ひとつのストリーム上で、同時に複数のチャンネルに接続することができます。
+
+### チャンネルに接続する
+チャンネルに接続するには、次のようなデータをJSONでストリームに送信します:
+
+```json
+{
+    type: 'connect',
+    body: {
+        channel: 'xxxxxxxx',
+        id: 'foobar',
+        params: {
+            ...
+        }
+    }
+}
+```
+
+ここで、
+* `channel`には接続したいチャンネル名を設定します。チャンネルの種類については後述します。
+* `id`にはそのチャンネルとやり取りするための任意のIDを設定します。ストリームでは様々なメッセージが流れるので、そのメッセージがどのチャンネルからのものなのか識別する必要があるからです。このIDは、UUIDや、乱数のようなもので構いません。
+* `params`はチャンネルに接続する際のパラメータです。チャンネルによって接続時に必要とされるパラメータは異なります。パラメータ不要のチャンネルに接続する際は、このプロパティは省略可能です。
+
+<div class="info">ℹ️ IDはチャンネルごとではなく「チャンネルの接続ごと」です。なぜなら、同じチャンネルに異なるパラメータで複数接続するケースもあるからです。</div>
+
+### チャンネルからのメッセージを受け取る
+例えばタイムラインのチャンネルなら、新しい投稿があった時にメッセージを発します。そのメッセージを受け取ることで、タイムラインに新しい投稿がされたことをリアルタイムで知ることができます。
+
+チャンネルがメッセージを発すると、次のようなデータがJSONでストリームに流れてきます:
+```json
+{
+    type: 'channel',
+    body: {
+        id: 'foobar',
+        type: 'something',
+        body: {
+            some: 'thing'
+        }
+    }
+}
+```
+
+ここで、
+* `id`には前述したそのチャンネルに接続する際に設定したIDが設定されています。これで、このメッセージがどのチャンネルからのものなのか知ることができます。
+* `type`にはメッセージの種類が設定されます。チャンネルによって、どのような種類のメッセージが流れてくるかは異なります。
+* `body`にはメッセージの内容が設定されます。チャンネルによって、どのような内容のメッセージが流れてくるかは異なります。
+
+### チャンネルに向けてメッセージを送信する
+チャンネルによっては、メッセージを受け取るだけでなく、こちらから何かメッセージを送信し、何らかの操作を行える場合があります。
+
+チャンネルにメッセージを送信するには、次のようなデータをJSONでストリームに送信します:
+```json
+{
+    type: 'channel',
+    body: {
+        id: 'foobar',
+        type: 'something',
+        body: {
+            some: 'thing'
+        }
+    }
+}
+```
+
+ここで、
+* `id`には前述したそのチャンネルに接続する際に設定したIDを設定します。これで、このメッセージがどのチャンネルに向けたものなのか識別させることができます。
+* `type`にはメッセージの種類を設定します。チャンネルによって、どのような種類のメッセージを受け付けるかは異なります。
+* `body`にはメッセージの内容を設定します。チャンネルによって、どのような内容のメッセージを受け付けるかは異なります。
+
+### チャンネルから切断する
+チャンネルから切断するには、次のようなデータをJSONでストリームに送信します:
+
+```json
+{
+    type: 'disconnect',
+    body: {
+        id: 'foobar'
+    }
+}
+```
+
+ここで、
+* `id`には前述したそのチャンネルに接続する際に設定したIDを設定します。
+
+## ストリームを経由してAPIリクエストする
+
+ストリームを経由してAPIリクエストすると、HTTPリクエストを発生させずにAPIを利用できます。そのため、コードを簡潔にできたり、パフォーマンスの向上を見込めるかもしれません。
+
+ストリームを経由してAPIリクエストするには、次のようなデータをJSONでストリームに送信します:
+```json
+{
+    type: 'api',
+    body: {
+        id: 'xxxxxxxxxxxxxxxx',
+        endpoint: 'notes/create',
+        data: {
+            text: 'yee haw!'
+        }
+    }
+}
+```
+
+ここで、
+* `id`には、APIのレスポンスを識別するための、APIリクエストごとの一意なIDを設定する必要があります。UUIDや、簡単な乱数のようなもので構いません。
+* `endpoint`には、あなたがリクエストしたいAPIのエンドポイントを指定します。
+* `data`には、エンドポイントのパラメータを含めます。
+
+<div class="info">ℹ️ APIのエンドポイントやパラメータについてはAPIリファレンスをご確認ください。</div>
+
+### レスポンスの受信
+
+APIへリクエストすると、レスポンスがストリームから次のような形式で流れてきます。
+
+```json
+{
+    type: 'api:xxxxxxxxxxxxxxxx',
+    body: {
+        ...
+    }
+}
+```
+
+ここで、
+* `xxxxxxxxxxxxxxxx`の部分には、リクエストの際に設定された`id`が含まれています。これにより、どのリクエストに対するレスポンスなのか判別することができます。
+* `body`には、レスポンスが含まれています。
+
+## 投稿のキャプチャ
+
+Misskeyは投稿のキャプチャと呼ばれる仕組みを提供しています。これは、指定した投稿のイベントをストリームで受け取る機能です。
+
+例えばタイムラインを取得してユーザーに表示したとします。ここで誰かがそのタイムラインに含まれるどれかの投稿に対してリアクションしたとします。
+
+しかし、クライアントからするとある投稿にリアクションが付いたことなどは知る由がないため、リアルタイムでリアクションをタイムライン上の投稿に反映して表示するといったことができません。
+
+この問題を解決するために、Misskeyは投稿のキャプチャ機構を用意しています。投稿をキャプチャすると、その投稿に関するイベントを受け取ることができるため、リアルタイムでリアクションを反映させたりすることが可能になります。
+
+### 投稿をキャプチャする
+
+投稿をキャプチャするには、ストリームに次のようなメッセージを送信します:
+
+```json
+{
+    type: 'subNote',
+    body: {
+        id: 'xxxxxxxxxxxxxxxx'
+    }
+}
+```
+
+ここで、
+* `id`にキャプチャしたい投稿の`id`を設定します。
+
+このメッセージを送信すると、Misskeyにキャプチャを要請したことになり、以後、その投稿に関するイベントが流れてくるようになります。
+
+例えば投稿にリアクションが付いたとすると、次のようなメッセージが流れてきます:
+
+```json
+{
+    type: 'noteUpdated',
+    body: {
+        id: 'xxxxxxxxxxxxxxxx',
+        type: 'reacted',
+        body: {
+            reaction: 'like',
+            userId: 'yyyyyyyyyyyyyyyy'
+        }
+    }
+}
+```
+
+ここで、
+* `body`内の`id`に、イベントを発生させた投稿のIDが設定されます。
+* `body`内の`type`に、イベントの種類が設定されます。
+* `body`内の`body`に、イベントの詳細が設定されます。
+
+#### イベントの種類
+
+##### `reacted`
+その投稿にリアクションがされた時に発生します。
+
+* `reaction`に、リアクションの種類が設定されます。
+* `userId`に、リアクションを行ったユーザーのIDが設定されます。
+
+例:
+```json
+{
+    type: 'noteUpdated',
+    body: {
+        id: 'xxxxxxxxxxxxxxxx',
+        type: 'reacted',
+        body: {
+            reaction: 'like',
+            userId: 'yyyyyyyyyyyyyyyy'
+        }
+    }
+}
+```
+
+##### `deleted`
+その投稿が削除された時に発生します。
+
+* `deletedAt`に、削除日時が設定されます。
+
+例:
+```json
+{
+    type: 'noteUpdated',
+    body: {
+        id: 'xxxxxxxxxxxxxxxx',
+        type: 'deleted',
+        body: {
+            deletedAt: '2018-10-22T02:17:09.703Z'
+        }
+    }
+}
+```
+
+##### `pollVoted`
+その投稿に添付されたアンケートに投票された時に発生します。
+
+* `choice`に、選択肢IDが設定されます。
+* `userId`に、投票を行ったユーザーのIDが設定されます。
+
+例:
+```json
+{
+    type: 'noteUpdated',
+    body: {
+        id: 'xxxxxxxxxxxxxxxx',
+        type: 'pollVoted',
+        body: {
+            choice: 2,
+            userId: 'yyyyyyyyyyyyyyyy'
+        }
+    }
+}
+```
+
+### 投稿のキャプチャを解除する
+
+その投稿がもう画面に表示されなくなったりして、その投稿に関するイベントをもう受け取る必要がなくなったときは、キャプチャの解除を申請してください。
+
+次のメッセージを送信します:
+
+```json
+{
+    type: 'unsubNote',
+    body: {
+        id: 'xxxxxxxxxxxxxxxx'
+    }
+}
+```
+
+ここで、
+* `id`にキャプチャを解除したい投稿の`id`を設定します。
+
+このメッセージを送信すると、以後、その投稿に関するイベントは流れてこないようになります。
+
+# チャンネル一覧
+## `main`
+アカウントに関する基本的な情報が流れてきます。このチャンネルにパラメータはありません。
+
+### 流れてくるイベント一覧
+
+#### `renote`
+自分の投稿がRenoteされた時に発生するイベントです。自分自身の投稿をRenoteしたときは発生しません。
+
+#### `mention`
+誰かからメンションされたときに発生するイベントです。
+
+#### `readAllNotifications`
+自分宛ての通知がすべて既読になったことを表すイベントです。このイベントを利用して、「通知があることを示すアイコン」のようなものをオフにしたりする等のケースが想定されます。
+
+#### `meUpdated`
+自分の情報が更新されたことを表すイベントです。
+
+#### `follow`
+自分が誰かをフォローしたときに発生するイベントです。
+
+#### `unfollow`
+自分が誰かのフォローを解除したときに発生するイベントです。
+
+#### `followed`
+自分が誰かにフォローされたときに発生するイベントです。
+
+## `homeTimeline`
+ホームタイムラインの投稿情報が流れてきます。このチャンネルにパラメータはありません。
+
+### 流れてくるイベント一覧
+
+#### `note`
+タイムラインに新しい投稿が流れてきたときに発生するイベントです。
+
+## `localTimeline`
+ローカルタイムラインの投稿情報が流れてきます。このチャンネルにパラメータはありません。
+
+### 流れてくるイベント一覧
+
+#### `note`
+ローカルタイムラインに新しい投稿が流れてきたときに発生するイベントです。
+
+## `hybridTimeline`
+ソーシャルタイムラインの投稿情報が流れてきます。このチャンネルにパラメータはありません。
+
+### 流れてくるイベント一覧
+
+#### `note`
+ソーシャルタイムラインに新しい投稿が流れてきたときに発生するイベントです。
+
+## `globalTimeline`
+グローバルタイムラインの投稿情報が流れてきます。このチャンネルにパラメータはありません。
+
+### 流れてくるイベント一覧
+
+#### `note`
+グローバルタイムラインに新しい投稿が流れてきたときに発生するイベントです。
diff --git a/src/docs/zh-CN/features/antenna.md b/src/docs/zh-CN/features/antenna.md
new file mode 100644
index 0000000000..4645df2d6e
--- /dev/null
+++ b/src/docs/zh-CN/features/antenna.md
@@ -0,0 +1,4 @@
+# 天线
+アンテナは、自由に条件を設定して、合致するノートを自動で収集することができる機能です。
+
+条件を設定したアンテナが作成された状態で、条件に合致するノートが投稿されると、リアルタイムでそのアンテナのタイムラインにノートが追加されます。
diff --git a/src/docs/zh-CN/features/custom-emoji.md b/src/docs/zh-CN/features/custom-emoji.md
new file mode 100644
index 0000000000..9fc18a70fc
--- /dev/null
+++ b/src/docs/zh-CN/features/custom-emoji.md
@@ -0,0 +1,2 @@
+# 自定义表情符号
+カスタム絵文字は、インスタンスで用意された画像を絵文字のように使える機能です。 ノート、リアクション、チャット、自己紹介、名前などの場所で使うことができます。 カスタム絵文字をそれらの場所で使うには、絵文字ピッカーボタン(ある場合)を押すか、`:`を入力して絵文字サジェストを表示します。 テキスト内に`:foo:`のような形式の文字列が見つかると、`foo`の部分がカスタム絵文字名と解釈され、表示時には対応したカスタム絵文字に置き換わります。
diff --git a/src/docs/zh-CN/features/deck.md b/src/docs/zh-CN/features/deck.md
new file mode 100644
index 0000000000..73e9efdaaf
--- /dev/null
+++ b/src/docs/zh-CN/features/deck.md
@@ -0,0 +1,18 @@
+# Deck
+
+デッキは利用可能なUIのひとつです。「カラム」と呼ばれるビューを複数並べて表示させることで、カスタマイズ性が高く、情報量の多いUIが構築できることが特徴です。
+
+## カラムの追加
+デッキの背景を右クリックし、「カラムを追加」して任意のカラムを追加できます。
+
+## カラムの移動
+カラムは、ドラッグアンドドロップで他のカラムと位置を入れ替えることが出来るほか、カラムメニュー(カラムのヘッダー右クリック)から位置を移動させることもできます。
+
+## カラムの水平分割
+カラムは左右だけでなく、上下に並べることもできます。 カラムメニューを開き、「左に重ねる」を選択すると、左のカラムの下に現在のカラムが移動します。 上下分割を解除するには、カラムメニューの「右に出す」を選択します。
+
+## カラムの設定
+カラムメニューの「編集」を選択するとカラムの設定を編集できます。カラムの名前を変えたり、幅を変えたりできます。
+
+## デッキの設定
+デッキに関する設定は、[settings/deck](/settings/deck)で行えます。
diff --git a/src/docs/zh-CN/features/drive.md b/src/docs/zh-CN/features/drive.md
new file mode 100644
index 0000000000..4728ccf659
--- /dev/null
+++ b/src/docs/zh-CN/features/drive.md
@@ -0,0 +1,17 @@
+# 网盘
+ドライブは、Misskey上でファイルを管理できる機能です。
+
+[ドライブのページ](/my/drive)から任意のファイルをアップロードできるほか、アバターに設定した画像や、ノートに添付したファイルなどもすべてドライブにアップロードされます。
+
+<div class="warn">⚠️ ドライブからファイルを削除すると、そのファイルが添付されたノートも消えます。</div>
+
+ドライブにアップロードされたファイルは、いつでもダウンロードすることができるほか、ノート作成時に「ドライブからファイルを添付」することでファイルを再利用することもできます。
+
+ドライブ内にフォルダを作り、複数のファイルをまとめて整理することもできます。
+
+## 閲覧注意 (NSFW)
+<div class="info">ℹ️ この項目が閲覧注意なわけではありません</div>
+
+閲覧注意またはNSFW (Not safe for work) は、ドライブのファイルに設定することができるフラグです。 閲覧注意フラグを設定されたファイルは、表示される際に閲覧者の操作なしには表示されなくなります。 このフラグは、例えば職場や公共の場で閲覧するのに適切でないと思われる画像などに設定し、そのような画像が突然表示されてしまうことを防ぐ目的で使われます。
+
+このフラグは手動でオンオフを切り替えられるほか、モデレーターの判断で設定される場合もあります。
diff --git a/src/docs/zh-CN/features/favorite.md b/src/docs/zh-CN/features/favorite.md
new file mode 100644
index 0000000000..587687f77d
--- /dev/null
+++ b/src/docs/zh-CN/features/favorite.md
@@ -0,0 +1,4 @@
+# 收藏
+[ノート](./node)をお気に入りとして登録できる機能です。 お気に入り登録したノートは、[お気に入りページ](./my/favorites)で一覧することができます。 お気に入りに登録したことは相手に通知されず、お気に入りは自分しか見ることができません。
+
+ノートをお気に入り登録するには、ノートメニューの「お気に入り」を押します。お気に入り解除するには、ノートメニューの「お気に入り解除」を押します。
diff --git a/src/docs/zh-CN/features/follow.md b/src/docs/zh-CN/features/follow.md
new file mode 100644
index 0000000000..115a2786f6
--- /dev/null
+++ b/src/docs/zh-CN/features/follow.md
@@ -0,0 +1,2 @@
+# 关注中
+ユーザーをフォローすると、タイムラインにそのユーザーの投稿が表示されるようになります。ただし、他のユーザーに対する返信は含まれません。 ユーザーをフォローするには、ユーザーページの「フォロー」ボタンをクリックします。フォローを解除するには、もう一度クリックします。
diff --git a/src/docs/zh-CN/features/keyboard-shortcut.md b/src/docs/zh-CN/features/keyboard-shortcut.md
new file mode 100644
index 0000000000..5279eb9bd4
--- /dev/null
+++ b/src/docs/zh-CN/features/keyboard-shortcut.md
@@ -0,0 +1,66 @@
+# キーボードショートカット
+
+## 全局
+これらのショートカットは基本的にどこでも使えます。
+<table>
+    <thead>
+        <tr><th>ショートカット</th><th>効果</th><th>由来</th></tr>
+    </thead>
+    <tbody>
+        <tr><td><kbd class="key">P</kbd>, <kbd class="key">N</kbd></td><td>新規投稿</td><td><b>P</b>ost, <b>N</b>ew, <b>N</b>ote</td></tr>
+        <tr><td><kbd class="key">T</kbd></td><td>タイムラインの最も新しい投稿にフォーカス</td><td><b>T</b>imeline, <b>T</b>op</td></tr>
+        <tr><td><kbd class="group"><kbd class="key">Shift</kbd> + <kbd class="key">N</kbd></kbd></td><td>通知を表示/隠す</td><td><b>N</b>otifications</td></tr>
+        <tr><td><kbd class="key">S</kbd></td><td>搜索</td><td><b>S</b>earch</td></tr>
+        <tr><td><kbd class="key">H</kbd>, <kbd class="key">?</kbd></td><td>ヘルプを表示</td><td><b>H</b>elp</td></tr>
+    </tbody>
+</table>
+
+## 投稿にフォーカスされた状態
+<table>
+    <thead>
+        <tr><th>ショートカット</th><th>効果</th><th>由来</th></tr>
+    </thead>
+    <tbody>
+        <tr><td><kbd class="key">↑</kbd>, <kbd class="key">K</kbd>, <kbd class="group"><kbd class="key">Shift</kbd> + <kbd class="key">Tab</kbd></kbd></td><td>上の投稿にフォーカスを移動</td><td>-</td></tr>
+        <tr><td><kbd class="key">↓</kbd>, <kbd class="key">J</kbd>, <kbd class="key">Tab</kbd></td><td>下の投稿にフォーカスを移動</td><td>-</td></tr>
+        <tr><td><kbd class="key">R</kbd></td><td>返信フォームを開く</td><td><b>R</b>eply</td></tr>
+        <tr><td><kbd class="key">Q</kbd></td><td>Renoteフォームを開く</td><td><b>Q</b>uote</td></tr>
+        <tr><td><kbd class="group"><kbd class="key">Ctrl</kbd> + <kbd class="key">Q</kbd></kbd></td><td>即刻Renoteする(フォームを開かずに)</td><td>-</td></tr>
+        <tr><td><kbd class="key">E</kbd>, <kbd class="key">A</kbd>, <kbd class="key">+</kbd></td><td>リアクションフォームを開く</td><td><b>E</b>mote, re<b>A</b>ction</td></tr>
+        <tr><td><kbd class="key">0</kbd>~<kbd class="key">9</kbd></td><td>数字に対応したリアクションをする(対応については後述)</td><td>-</td></tr>
+        <tr><td><kbd class="key">F</kbd>, <kbd class="key">B</kbd></td><td>お気に入りに登録</td><td><b>F</b>avorite, <b>B</b>ookmark</td></tr>
+        <tr><td><kbd class="key">Del</kbd>, <kbd class="group"><kbd class="key">Ctrl</kbd> + <kbd class="key">D</kbd></kbd></td><td>投稿を削除</td><td><b>D</b>elete</tr>
+        <tr><td><kbd class="key">M</kbd>, <kbd class="key">O</kbd></td><td>投稿に対するメニューを開く</td><td><b>M</b>ore, <b>O</b>ther</td></tr>
+        <tr><td><kbd class="key">S</kbd></td><td>CWで隠された部分を表示 or 隠す</td><td><b>S</b>how, <b>S</b>ee</td></tr>
+        <tr><td><kbd class="key">Esc</kbd></td><td>フォーカスを外す</td><td>-</td></tr>
+    </tbody>
+</table>
+
+## Renoteフォーム
+<table>
+    <thead>
+        <tr><th>ショートカット</th><th>効果</th><th>由来</th></tr>
+    </thead>
+    <tbody>
+        <tr><td><kbd class="key">Enter</kbd></td><td>Renoteする</td><td>-</td></tr>
+        <tr><td><kbd class="key">Q</kbd></td><td>フォームを展開する</td><td><b>Q</b>uote</td></tr>
+        <tr><td><kbd class="key">Esc</kbd></td><td>フォームを閉じる</td><td>-</td></tr>
+    </tbody>
+</table>
+
+## リアクションフォーム
+デフォルトで「👍」にフォーカスが当たっている状態です。
+<table>
+    <thead>
+        <tr><th>ショートカット</th><th>効果</th><th>由来</th></tr>
+    </thead>
+    <tbody>
+        <tr><td><kbd class="key">↑</kbd>, <kbd class="key">K</kbd></td><td>上のリアクションにフォーカスを移動</td><td>-</td></tr>
+        <tr><td><kbd class="key">↓</kbd>, <kbd class="key">J</kbd></td><td>下のリアクションにフォーカスを移動</td><td>-</td></tr>
+        <tr><td><kbd class="key">←</kbd>, <kbd class="key">H</kbd>, <kbd class="group"><kbd class="key">Shift</kbd> + <kbd class="key">Tab</kbd></kbd></td><td>左のリアクションにフォーカスを移動</td><td>-</td></tr>
+        <tr><td><kbd class="key">→</kbd>, <kbd class="key">L</kbd>, <kbd class="key">Tab</kbd></td><td>右のリアクションにフォーカスを移動</td><td>-</td></tr>
+        <tr><td><kbd class="key">Enter</kbd>, <kbd class="key">Space</kbd>, <kbd class="key">+</kbd></td><td>リアクション確定</td><td>-</td></tr>
+        <tr><td><kbd class="key">0</kbd>~<kbd class="key">9</kbd></td><td>数字に対応したリアクションで確定</td><td>-</td></tr>
+        <tr><td><kbd class="key">Esc</kbd></td><td>リアクションするのをやめる</td><td>-</td></tr>
+    </tbody>
+</table>
diff --git a/src/docs/zh-CN/features/mfm.md b/src/docs/zh-CN/features/mfm.md
new file mode 100644
index 0000000000..5be2df4f30
--- /dev/null
+++ b/src/docs/zh-CN/features/mfm.md
@@ -0,0 +1,12 @@
+# MFM
+MFMは、Misskey Flavored Markdownの略で、Misskeyの様々な場所で使用できる専用のマークアップ言語です。 MFMで使用可能な構文は[MFMチートシート](/mfm-cheat-sheet)で確認できます。
+
+## MFMが使用可能な場所の例
+- ノート本文
+- CW注釈
+- ユーザーの名前
+- ユーザーの自己紹介
+
+## 開発者向け情報
+MFMのパーサー実装はライブラリとして公開されており、簡単にクライアントにMFMを組み込むことが可能です。
+- [misskey-dev/mfm.js](https://github.com/misskey-dev/mfm.js) - JavaScriptパーサー実装
diff --git a/src/docs/zh-CN/features/mute.md b/src/docs/zh-CN/features/mute.md
new file mode 100644
index 0000000000..502e04ea80
--- /dev/null
+++ b/src/docs/zh-CN/features/mute.md
@@ -0,0 +1,13 @@
+# 屏蔽
+
+ユーザーをミュートすると、そのユーザーに関する次のコンテンツがMisskeyに表示されなくなります:
+
+* タイムラインや投稿の検索結果内の、そのユーザーの投稿(およびそれらの投稿に対する返信やRenote)
+* そのユーザーからの通知
+* メッセージ履歴一覧内の、そのユーザーとのメッセージ履歴
+
+ユーザーをミュートするには、対象のユーザーのユーザーページに表示されている「ミュート」ボタンを押します。
+
+ミュートを行ったことは相手に通知されず、ミュートされていることを知ることもできません。
+
+設定>ミュート から、自分がミュートしているユーザー一覧を確認することができます。
diff --git a/src/docs/zh-CN/features/note.md b/src/docs/zh-CN/features/note.md
new file mode 100644
index 0000000000..dbf223a4e3
--- /dev/null
+++ b/src/docs/zh-CN/features/note.md
@@ -0,0 +1,51 @@
+# 帖子
+ノートは、Misskeyに投稿される、文章、ファイル、アンケートなどを含むコンテンツで、Misskeyの中心的概念です。また、そのノートを作成する行為自体もノートと呼ばれます。
+
+ノートが作成されると、[タイムライン](./timeline)に追加され、自分の[フォロワー](./follow)やサーバーのユーザーが見れるようになります。
+
+ノートには、[リアクション](./reaction)を行うことができます。また、返信や引用もできます。
+
+ノートを[お気に入り](./favorite)登録することで、後で簡単に見返すことができます。
+
+## ノートを作成する
+ノートを作成するには、画面上にある鉛筆マークのボタンを押して、作成フォームを開きます。作成フォームに内容を入力し、「ノート」ボタンを押すことでノートが作成されます。 ノートには、画像、動画など任意のファイルや、[アンケート](./poll)を添付することができます。また、本文中には[MFM](./mfm)が使用でき、[メンション](./mention)や[ハッシュタグ](./hashtag)を含めることもできます。 他にも、CWや公開範囲といった設定も行えます(詳細は後述)。
+<div class="info">ℹ️ コンピューターのクリップボードに画像データがある状態で、フォーム内のテキストボックスにペーストするとその画像を添付することができます。</div>
+<div class="info">ℹ️ テキストボックス内で<kbd class="key">Ctrl + Enter</kbd>を押すことでも投稿できます。</div>
+
+## 转发
+既にあるノートを引用、もしくはそのノートを新しいノートとして共有する行為、またそれによって作成されたノートをRenoteと呼びます。 自分がフォローしているユーザーの、気に入ったノートを自分のフォロワーに共有したい場合や、過去の自分のノートを再度共有したい場合に使います。 同じノートに対して無制限にRenoteを行うことができますが、あまり連続して使用すると迷惑になる場合もあるので、注意しましょう。
+<div class="warn">⚠️ 公開範囲がフォロワーやダイレクトのノートはRenoteできません</div>
+
+Renoteを削除するには、Renoteの時刻表示の隣にある「...」を押し、「Renote解除」を選択します。
+
+## CW
+Contents Warningの略で、ノートの内容を、閲覧者の操作なしには表示しないようにできる機能です。主に長大な内容を隠すためや、ネタバレ防止などに使うことができます。 設定するには、フォームの「内容を隠す」ボタン(目のアイコン)を押します。すると新しい入力エリアが表れるので、そこに内容の要約を記入します。
+
+## 可见性
+ノートごとに、そのノートが公開される範囲を設定することができます。フォームの「ノート」ボタンの左にあるアイコンを押すと公開範囲を以下から選択できます。
+
+### 公开
+全ての人に対してノートが公開されるほか、サーバーの全てのタイムライン(ホームタイムライン、ローカルタイムライン、ソーシャルタイムライン、グローバルタイムライン)にノートが流れます。
+<div class="warn">⚠️ アカウントが<a href="./silence">サイレンス</a>状態の時は、この公開範囲は使用できません。</div>
+
+### 首页
+全ての人に対してノートが公開されますが、フォロワー以外のローカルタイムライン、ソーシャルタイムライン、グローバルタイムラインにはノートは流れません。
+
+### 关注者
+自分のフォロワーに対してのみノートを公開します。フォロワーの全てのタイムラインに流れます。
+
+### 指定用户
+指定したユーザーに対してのみノートを公開します。指定したユーザーの全てのタイムラインに流れます。
+
+### 「ローカルのみ」オプション
+このオプションを有効にすると、リモートにノートを連合しなくなります。
+
+### 公開範囲の比較
+<table>
+    <tr><th></th><th>公开</th><th>首页</th><th>关注者</th><th>指定用户</th></tr>
+    <tr><th>フォロワーのLTL/STL/GTL</th><td>✔</td><td>✔</td><td>✔</td><td></td></tr>
+    <tr><th>非フォロワーのLTL/STL/GTL</th><td>✔</td><td></td><td></td><td></td></tr>
+</table>
+
+## 置顶
+ノートをピン留めすると、ユーザーページに常にそのノートを表示しておくことができます。 ノートのメニューを開き、「ピン留め」を選択してピン留めできます。 複数のノートをピン留めできます。
diff --git a/src/docs/zh-CN/features/pages.md b/src/docs/zh-CN/features/pages.md
new file mode 100644
index 0000000000..d0d20dcbef
--- /dev/null
+++ b/src/docs/zh-CN/features/pages.md
@@ -0,0 +1,10 @@
+# Pages
+
+## 变量
+変数を使うことで動的なページを作成できます。テキスト内で <b>{ 変数名 }</b> と書くとそこに変数の値を埋め込めます。例えば <b>Hello { thing } world!</b> というテキストで、変数(thing)の値が <b>ai</b> だった場合、テキストは <b>Hello ai world!</b> になります。
+
+変数の評価(値を算出すること)は上から下に行われるので、ある変数の中で自分より下の変数を参照することはできません。例えば上から <b>A、B、C</b> と3つの変数を定義したとき、<b>C</b>の中で<b>A</b>や<b>B</b>を参照することはできますが、<b>A</b>の中で<b>B</b>や<b>C</b>を参照することはできません。
+
+ユーザーからの入力を受け取るには、ページに「ユーザー入力」ブロックを設置し、「変数名」に入力を格納したい変数名を設定します(変数は自動で作成されます)。その変数を使ってユーザー入力に応じた動作を行えます。
+
+関数を使うと、値の算出処理を再利用可能な形にまとめることができます。関数を作るには、「関数」タイプの変数を作成します。関数にはスロット(引数)を設定することができ、スロットの値は関数内で変数として利用可能です。また、関数を引数に取る関数(高階関数と呼ばれます)も存在します。関数は予め定義しておくほかに、このような高階関数のスロットに即席でセットすることもできます。
diff --git a/src/docs/zh-CN/features/reaction.md b/src/docs/zh-CN/features/reaction.md
new file mode 100644
index 0000000000..61e7cabaf1
--- /dev/null
+++ b/src/docs/zh-CN/features/reaction.md
@@ -0,0 +1,11 @@
+# 回应
+他の人のノートに、絵文字を付けて簡単にあなたの反応を伝えられる機能です。 リアクションするには、ノートの + アイコンをクリックしてピッカーを表示し、絵文字を選択します。 リアクションには[カスタム絵文字](./custom-emoji)も使用できます。
+
+## リアクションピッカーのカスタマイズ
+ピッカーに表示される絵文字を自分好みにカスタマイズすることができます。 設定の「リアクション」で設定します。
+
+## リモート投稿へのリアクションについて
+リアクションはMisskeyオリジナルの機能であるため、リモートインスタンスがMisskeyでない限りは、ほとんどの場合「Like」としてアクティビティが送信されます。一般的にはLikeは「お気に入り」として実装されているようです。
+
+## リモートからのリアクションについて
+リモートから「Like」アクティビティを受信したとき、Misskeyでは「👍」のリアクションとして解釈されます。
diff --git a/src/docs/zh-CN/features/silence.md b/src/docs/zh-CN/features/silence.md
new file mode 100644
index 0000000000..8469784990
--- /dev/null
+++ b/src/docs/zh-CN/features/silence.md
@@ -0,0 +1,6 @@
+# 禁言
+サイレンスは、アカウントに設定される状態のひとつです。
+
+アカウントがサイレンス状態になると、ノートの公開範囲をパブリックにできなくなります。 ホーム、フォロワー、ダイレクトは選択可能なため、サイレンスを受けた場合でもフォロワーやあなたのユーザーページを直接訪れた場合は投稿を閲覧できますが、GTL(連合タイムライン)やLTL(ローカルタイムライン)には投稿が流れません。
+
+アカウントのサイレンス状態は、サーバーのモデレーターによって有効化/無効化されます。
diff --git a/src/docs/zh-CN/features/theme.md b/src/docs/zh-CN/features/theme.md
new file mode 100644
index 0000000000..62769e5c30
--- /dev/null
+++ b/src/docs/zh-CN/features/theme.md
@@ -0,0 +1,68 @@
+# 主题
+
+テーマを設定して、Misskeyクライアントの見た目を変更できます。
+
+## テーマの設定
+設定 > テーマ
+
+## テーマを作成する
+テーマコードはJSON5で記述されたテーマオブジェクトです。 テーマは以下のようなオブジェクトです。
+``` js
+{
+    id: '17587283-dd92-4a2c-a22c-be0637c9e22a',
+
+    name: 'Danboard',
+    author: 'syuilo',
+
+    base: 'light',
+
+    props: {
+        accent: 'rgb(218, 141, 49)',
+        bg: 'rgb(218, 212, 190)',
+        fg: 'rgb(115, 108, 92)',
+        panel: 'rgb(236, 232, 220)',
+        renote: 'rgb(100, 152, 106)',
+        link: 'rgb(100, 152, 106)',
+        mention: '@accent',
+        hashtag: 'rgb(100, 152, 106)',
+        header: 'rgba(239, 227, 213, 0.75)',
+        navBg: 'rgb(216, 206, 182)',
+        inputBorder: 'rgba(0, 0, 0, 0.1)',
+    },
+}
+
+```
+
+* `id` ... テーマの一意なID。UUIDをおすすめします。
+* `name` ... テーマ名
+* `author` ... テーマの作者
+* `desc` ... テーマの説明(オプション)
+* `base` ... 明るいテーマか、暗いテーマか
+    * `light`にすると明るいテーマになり、`dark`にすると暗いテーマになります。
+    * テーマはここで設定されたベーステーマを継承します。
+* `props` ... テーマのスタイル定義。これから説明します。
+
+### テーマのスタイル定義
+`props`下にはテーマのスタイルを定義します。 キーがCSSの変数名になり、バリューで中身を指定します。 なお、この`props`オブジェクトはベーステーマから継承されます。 ベーステーマは、このテーマの`base`が`light`なら[_light.json5](https://github.com/misskey-dev/misskey/blob/develop/src/client/themes/_light.json5)で、`dark`なら[_dark.json5](https://github.com/misskey-dev/misskey/blob/develop/src/client/themes/_dark.json5)です。 つまり、このテーマ内の`props`に`panel`というキーが無くても、そこにはベーステーマの`panel`があると見なされます。
+
+#### バリューで使える構文
+* 16進数で表された色
+    * 例: `#00ff00`
+* `rgb(r, g, b)`形式で表された色
+    * 例: `rgb(0, 255, 0)`
+* `rgb(r, g, b, a)`形式で表された透明度を含む色
+    * 例: `rgba(0, 255, 0, 0.5)`
+* 他のキーの値の参照
+    * `@{キー名}`と書くと他のキーの値の参照になります。`{キー名}`は参照したいキーの名前に置き換えます。
+    * 例: `@panel`
+* 定数(後述)の参照
+    * `${定数名}`と書くと定数の参照になります。`{定数名}`は参照したい定数の名前に置き換えます。
+    * 例: `$main`
+* 関数(後述)
+    * `:{関数名}<{引数}<{色}`
+
+#### 常量
+「CSS変数として出力はしたくないが、他のCSS変数の値として使いまわしたい」値があるときは、定数を使うと便利です。 キー名を`$`で始めると、そのキーはCSS変数として出力されません。
+
+#### 函数
+wip
diff --git a/src/docs/zh-CN/features/timeline.md b/src/docs/zh-CN/features/timeline.md
new file mode 100644
index 0000000000..8ecda37ada
--- /dev/null
+++ b/src/docs/zh-CN/features/timeline.md
@@ -0,0 +1,31 @@
+# 时间线
+タイムラインは、[ノート](./note)が時系列で表示される機能です。 タイムラインには以下で示す種類があり、種類によって表示されるノートも異なります。 なお、タイムラインの種類によってはサーバーにより無効になっている場合があります。
+
+## 首页
+自分のフォローしているユーザーの投稿が流れます。HTLと略されます。
+
+## 本地
+全てのローカルユーザーの「ホーム」指定されていない投稿が流れます。LTLと略されます。
+
+## 社交
+自分のフォローしているユーザーの投稿と、全てのローカルユーザーの「ホーム」指定されていない投稿が流れます。STLと略されます。
+
+## 全局
+全てのローカルユーザーの「ホーム」指定されていない投稿と、サーバーに届いた全てのリモートユーザーの「ホーム」指定されていない投稿が流れます。GTLと略されます。
+
+## 比较
+| ソース          |     |    | 时间线 |    |    |
+| ------------ | --- | -- | --- | -- | -- |
+| 用户           | 可见性 | 首页 | 本地  | 社交 | 全局 |
+| ローカル (フォロー)  | 发布  | ✔  | ✔   | ✔  | ✔  |
+|              | 首页  | ✔  |     | ✔  |    |
+|              | 关注者 | ✔  | ✔   | ✔  | ✔  |
+| リモート (フォロー)  | 发布  | ✔  |     | ✔  | ✔  |
+|              | 首页  | ✔  |     | ✔  |    |
+|              | 关注者 | ✔  |     | ✔  | ✔  |
+| ローカル (未フォロー) | 发布  |    | ✔   | ✔  | ✔  |
+|              | 首页  |    |     |    |    |
+|              | 关注者 |    |     |    |    |
+| リモート (未フォロー) | 发布  |    |     |    | ✔  |
+|              | 首页  |    |     |    |    |
+|              | 关注者 |    |     |    |    |
diff --git a/src/docs/zh-CN/features/widgets.md b/src/docs/zh-CN/features/widgets.md
new file mode 100644
index 0000000000..015cfc768e
--- /dev/null
+++ b/src/docs/zh-CN/features/widgets.md
@@ -0,0 +1,7 @@
+# 小工具
+ウィジェットは、MisskeyのUI上に設置できる小型の情報表示、操作が行えるパーツです。
+
+ウィジェットを編集するには、ウィジェット編集モードに切り替えます。切り替え方法はUIによって異なります。 ウィジェット編集モードでは、ウィジェットの追加、削除、並び替え、およびそれぞれのウィジェットの設定を行えます。
+
+## 利用可能なウィジェット一覧
+todo
diff --git a/src/docs/zh-CN/general/apps.md b/src/docs/zh-CN/general/apps.md
new file mode 100644
index 0000000000..1f4c85fe8f
--- /dev/null
+++ b/src/docs/zh-CN/general/apps.md
@@ -0,0 +1,6 @@
+# サードパーティアプリのリスト
+## クライアント
+todo
+
+## 連携サービス
+todo
diff --git a/src/docs/zh-CN/general/faq.md b/src/docs/zh-CN/general/faq.md
new file mode 100644
index 0000000000..ecb664e32e
--- /dev/null
+++ b/src/docs/zh-CN/general/faq.md
@@ -0,0 +1,22 @@
+# よくある質問
+ここでは利用上のよくある質問について掲載しています。 Misskeyのプロジェクト自体についてのよくある質問は[こちら](./misskey)に掲載されています。
+
+### iOS/Androidのアプリはありますか?
+公式にはそういったOSのネイティブアプリを開発していませんが、サードパーティ製のアプリがいくつかあります。 詳しくは[こちら](./apps)をご覧ください。
+
+ただ、サードパーティ製アプリはどうしても機能への対応が遅れてしまうため、とくに拘りがなければ公式のWebクライアントの利用をおすすめします。 なお、MisskeyのWebクライアントはPWAに対応しているので、ネイティブアプリのように動作させることも可能です。 詳しくは[こちら](todo)をご覧ください。
+
+## 他のサーバーのユーザーをフォローするときは?
+メニューから検索を選び、ユーザー名をホスト込みで入力します。例: `@syuilo@misskey.io`
+
+## Renoteを削除するには?
+Renoteの時刻表示の隣にある「...」を押し、「Renote解除」を選択します。 Renoteについては[こちら](../features/note)をご確認ください。
+
+## URLのプレビューを表示させたくない
+MFMには、そのURLのプレビューを無効にする構文があります。詳細は[MFMチートシート](/mfm-cheat-sheet)をご確認ください。
+
+## カスタム絵文字を追加したい
+運営者のみがカスタム絵文字を追加、編集、削除できます。それらを希望する場合は運営者に依頼してください。
+
+## Botを開発したい
+Misskey APIを利用してBotの開発が可能です。[こちら](../advanced/develop-bot)をご確認ください。
diff --git a/src/docs/zh-CN/general/glossary.md b/src/docs/zh-CN/general/glossary.md
new file mode 100644
index 0000000000..ed62212019
--- /dev/null
+++ b/src/docs/zh-CN/general/glossary.md
@@ -0,0 +1,83 @@
+# 用語集
+Misskeyに関する用語集です。
+
+## AcitivityPub
+(読み: あくてぃびてぃぱぶ) 分散型を実現するために用いられるプロトコル(仕様)。このプロトコルに則ってサーバー同士通信を行うことで、連合が行われ、Fediverseを形成しています。
+
+## AiScript
+(読み: あいすくりぷと) Misskey上で使用できるプログラミング言語です。詳細は[こちら。](../advanced/aiscript)
+
+## API
+(読み: えーぴーあい) Misskeyのサーバーが公開している、プログラムからMisskeyを扱うためのインターフェース。詳細は[こちら。](../advanced/api)
+
+## Bot
+(読み: ぼっと) プログラムによって動作しているアカウント。
+
+## CW
+(読み: こんてんつわーにんぐ) Contents Warningの略。ノートの内容を、操作なしには表示しないようにできる機能。主に長大な内容を隠すためや、ネタバレ防止などに使われます。
+
+## Fediverse
+(読み: ふぇでぃばーす) Misskeyを含む様々な分散型ソフトウェアのサーバーで構成されたネットワーク。
+
+## GTL
+グローバルタイムライン(Global TimeLine)の略。タイムラインの詳細は[こちら。](../features/timeline)
+
+## HTL
+ホームタイムライン(Home TimeLine)の略。タイムラインの詳細は[こちら。](../features/timeline)
+
+## LTL
+ローカルタイムライン(Local TimeLine)の略。タイムラインの詳細は[こちら。](../features/timeline)
+
+## MFM
+(読み: えむえふえむ) Misskey Flavored Markdownの略で、Misskey上で使用できるマークアップ言語です。詳細は[こちら。](../features/mfm)
+
+## NSFW
+(読み: のっとせーふふぉーわーく) Not Safe For Workの略。画像を「閲覧注意」扱いにし、操作なしには表示しないようにすることができる機能。
+
+## 转发
+(読み: りのーと) 既にあるノートを引用、もしくはそのノートを新しいノートとして共有する行為、またそれによって作成されたノート。詳細は[こちら。](../features/note)
+
+## STL
+ソーシャルタイムライン(Social TimeLine)の略。タイムラインの詳細は[こちら。](../features/timeline)
+
+## 藍
+(読み: あい) Misskeyの看板娘(公式キャラクター)です。
+
+## アクティブユーザー
+インスタンスにアカウントを作っているユーザーのうち、現在も実際にサービスを利用しているユーザーのこと。
+
+## 实例
+todo
+
+## コントロールパネル
+インスタンスの設定画面のこと。
+
+## 服务器
+todo
+
+## 禁言
+ノートをパブリックな公開範囲で投稿できなくされている状態。モデレーターの判断でユーザーごとに設定されます。詳細は[こちら。](../features/silence)
+
+## 冻结
+アカウントが使用不可に設定されている状態。
+
+## 网盘
+Misskeyにアップロードしたファイルを管理する機能。詳細は[こちら。](../features/drive)
+
+## 帖子
+Misskeyに投稿される、文章、ファイル、アンケートなどを含めることができるコンテンツ。詳細は[こちら。](../features/note)
+
+## ミスキスト
+Misskeyを使う人のこと。
+
+## 监察员
+スパムの凍結およびサイレンスや不適切な投稿の削除など、コミュニティ運営に関する権限を持つユーザー。
+
+## 远程
+他サーバーのことを指します。リモートユーザーといったように接頭辞としても使われます。ローカルの逆です。
+
+## 联合
+サーバー上で作成された情報が他のサーバーに伝わること。
+
+## 本地
+自サーバーのことを指します。ローカルユーザー、ローカルタイムラインといったように接頭辞としても使われます。リモートの逆です。
diff --git a/src/docs/zh-CN/general/links.md b/src/docs/zh-CN/general/links.md
new file mode 100644
index 0000000000..d6b16856fb
--- /dev/null
+++ b/src/docs/zh-CN/general/links.md
@@ -0,0 +1,5 @@
+# リンク集
+
+## ライブラリ
+- [misskey-dev/misskey.js](https://github.com/misskey-dev/misskey.js) - JavaScriptのMisskey SDK
+- [misskey-dev/mfm.js](https://github.com/misskey-dev/mfm.js) - JavaScriptのMFMパーサー実装
diff --git a/src/docs/zh-CN/general/misskey.md b/src/docs/zh-CN/general/misskey.md
new file mode 100644
index 0000000000..5c3aa2280f
--- /dev/null
+++ b/src/docs/zh-CN/general/misskey.md
@@ -0,0 +1,87 @@
+# 关于 Misskey
+
+Misskeyはオープンソースの分散型マイクロブログプラットフォームプロジェクトです。 開発は日本でsyuiloによって2014年から開始されました。 ドライブ、リアクションなどの豊富な機能や、高いカスタマイズ性を備えたUIを持つことが特徴です。
+
+## 歴史
+開発当初は掲示板がメインのサービスでしたが、ユーザーが短文を投稿し、それを時系列で流れるタイムライン機能を追加したところ人気が高まり、徐々にそれがメインとして開発が進むようになりました。 当初は分散型ではありませんでしたが、2018年にAcitivityPubを実装し分散型になったことで、より多くの方に認知され利用されるサービスになり、現在に至ります。
+<div class="info">ℹ️ Misskeyという名前は、syuiloが当時聴いていたMay'nというアーティストの楽曲、Brain Diverの歌詞に由来します。</div>
+
+誰でも開発に参加することができ、現在でも活発に開発が続いています。
+
+## 分散型とは何か?
+
+<b>分散(distributed)型</b>とは、<b>非中央集権(decentralized)</b>とも呼ばれ、コミュニティが多数のサーバーに分散して存在し、それらが相互に<b>通信(連合、federation)</b>することでコンテンツ共有<b>ネットワーク(Fediverse)</b>を形成していることが特徴のサービスです。 単一のサーバーしか存在しない、もしくは複数存在しても互いに独立している場合は中央集権なサービスと言われ、例えばTwitterやFacebookなどほとんどのサービスがそれに該当します。 分散型のメリットは、自分に合った運営者やテーマのサーバーを選択できることです。自分でサーバーを作成することもできます。連合するおかげで、どのサーバーを選んでも、同じコミュニティにアクセスできます。
+
+## 常にオープンソース
+Misskeyはこれまでもこれからも、オープンソースであり続けます。オープンソースとは、簡単に言うと<b>ソフトウェアのソースコード(プログラム)が公開されている</b>ことです。ソースコードの修正や再配布が可能であることを定義に含めることもあります。 Misskeyのすべてのソースコードは[AGPL](https://github.com/misskey-dev/misskey/blob/develop/LICENSE)というオープンソースライセンスの下に[公開](https://github.com/misskey-dev)されていて、誰でも自由に閲覧、使用、修正、改変、再配布をすることができます。 オープンソースは、自分で好きなように変えたり、有害な処理が含まれていないことを確認することができたり、誰でも開発に参加できるなどの、様々なメリットがあります。 上述の分散型を実現するためにも、オープンソースであるということは必要不可欠な要素です。 再び引き合いに出しますが、TwitterやFacebookなどの利益を得ているほとんどのサービスはオープンソースではありません。
+
+<div class="info">ℹ️ 技術的に言うと、MisskeyのソースコードはGitで管理されていて、リポジトリは<a href="https://github.com/misskey-dev" target="_blank">GitHub上でホスティングされています。</a></div>
+
+## 開発に参加する、プロジェクトを支援する
+Misskeyを気に入っていただけたら、ぜひプロジェクトを支援してください。プロジェクトに貢献するには、以下で紹介するようにいろいろな方法があります。方法によっては開発のスキルは不要なので、誰でも気軽に参加し貢献することができます。いつでもお待ちしています。
+
+### 機能を追加したり、バグを修正する
+ソフトウェアエンジニアのスキルをお持ちの方であれば、ソースコードを編集する形でプロジェクトに貢献することができます。 貢献についてのガイドは[こちら](https://github.com/misskey-dev/misskey/blob/develop/CONTRIBUTING.md)です。
+
+### 議論に参加する
+新しい機能、または既存の機能について意見を述べたり、不具合を報告したりすることでも貢献できます。 そのようなディスカッションは[GitHub](https://github.com/misskey-dev)上か、[フォーラム](https://forum.misskey.io/)等で行われます。
+
+### テキストを翻訳する
+Misskeyは様々な言語に対応しています(i18n -internationalizationの略- と呼ばれます)。元の言語は基本的に日本語ですが、有志によって他の言語へと翻訳されています。 その翻訳作業に加わっていただくことでもMisskeyに貢献できます。 Misskeyは[Crowdinというサービスを使用して翻訳の管理を行っています。](https://crowdin.com/project/misskey)
+
+### 感想を投稿する
+不具合報告等だけではなく、Misskeyの良い点、楽しい点といったポジティブな意見もぜひ共有してください。開発の励みになり、それは間接的ですがプロジェクトへの貢献です。
+
+### ミスキストを増やす
+ミスキストとは、Misskeyを使用する人のことです。 知り合いに紹介するなどしてMisskeyを広めていただければ、ミスキストが増え開発のモチベーションが上がります。
+
+### 寄付をする
+Misskeyはビジネスではなく、利用は無料であるため、収益は皆様からの寄付のみです。(インスタンスによっては広告収入を得ているような場合もありますが、それは運営者の収入であり直接開発者への収入にはなりません) 寄付をしていただければ、今後も開発を続けることが可能になり、プロジェクトへの貢献になります。 寄付は基本的には[Patreon](https://www.patreon.com/syuilo)で受け付けています。 一定額寄付していただけると、Misskeyの[情報ページ](/about-misskey)に名前を記載することができます。
+
+また、サーバーの運営者も、基本的には収益を得ていません。サーバーの運営にはコストがかかるので、運営者の支援をすることもご検討ください。 開発には直接関係しませんが、サーバーがあってこそのプロジェクトなので、運営が維持されるというのは開発と同じくらい重要なことです。
+
+## クレジット
+Misskeyの開発者や、Misskeyに寄付をしてくださった方の一覧は[こちら](/about-misskey)で見ることができます。
+
+## よくある質問
+### プロジェクトは何を目指していますか?
+強いて言うと、漠然的になりますが広く使われる汎用的なプラットフォームになることを目指しています。 Misskeyは他のプロジェクトとは違い、何らかの思想(例えば、反中央集権)やビジョンに基づいて開発が行われているわけではなく、その点ではフラットです。 それが逆に、特定の方向性に縛られないフレキシブルさを生み出すことに繋がっていると感じています。
+<!-- TODO: ここにロードマップへのリンク -->
+
+### 企業によって開発されていますか?
+いいえ。Misskeyの開発は個人で行われており、商業的でもないため、特定の企業の関りはありません。 開発メンバーも基本的にはボランティアです。 また、開発に対し企業のスポンサーがつくこともありますが、その場合でもやはり開発は個人のコミュニティが主体です。
+
+### 誰が運営していますか?
+Misskeyは分散型なため、各サーバーにそれぞれ異なった運営者がいます。従って、特定の個人や企業によって、Misskeyの全てが運営されているわけではありません。 また、開発チームが運営を行うわけでもないため、運営に関する連絡は、お使いのサーバーの運営者に行ってください。 サーバーの運営者は、[このページ](/about)で確認することができます。 あなたがサーバーを作成すれば、あなたが運営者になります。
+
+### どのサーバーを選べばいいですか?
+[サーバー一覧が公開されています。](https://join.misskey.page/ja-JP/instances) サーバーによってコミュニティのテーマ(特定のこと、ものが好き 等)が決められている場合があるので、自分に合ったテーマのサーバーがあれば、そこを選ぶと良いかもしれません。 他にも、サーバーの規模、ユーザー層、国および言語、運営者が信頼できるかどうか、などの観点があります。 なお、Misskey公式のサーバーというものはありません。自身で新しくサーバーを作成するという選択肢もあります。
+
+基本的にどのサーバーを選んだとしても、他の全てのサーバーのユーザーと繋がることができます。
+
+### サーバーを建てるにはどうしたらいいですか?
+Misskeyサーバーの作成に興味を持っていただきありがとうございます。 2021年現在、Misskeyのホスティングサービスは存在しないため、サーバーの作成にはある程度の知識が必要です。 サーバーの作成方法については[こちら](todo)をご覧ください。
+
+### どのような技術を使用していますか?
+Misskeyは開発が進むにつれ使用する技術も大きく変わってきました。開発当初はMySQL + PHP + jQueryといった構成でしたが、現在は以下のようになっています。
+- サーバーサイド: Node.js
+- データベース: PostgreSQL、Redis
+- UIフレームワーク: Vue.js
+- プログラミング言語: TypeScript
+
+また、MFMやAiScriptなどの、Misskeyから派生して独自の技術も開発しています。
+
+### Mastodonのフォークですか?
+いいえ。MisskeyはMastodonやその他のプロジェクトとは全く別のプロジェクトです。 開発に関しても、Misskeyの方が昔から開発されています。ただし、分散型になったのはMastodonの登場より後です。 同じAcitivityPubという分散のためのプロトコルを実装しているという点以外、両者に特に関りがあるわけでもありません。
+
+### iOS/Androidのアプリはありますか?
+公式にはそういったOSのネイティブアプリを開発していませんが、サードパーティ製のアプリがいくつかあります。 詳しくは[こちら](./apps)をご覧ください。
+
+ただ、サードパーティ製アプリはどうしても機能への対応が遅れてしまうため、とくに拘りがなければ公式のWebクライアントの利用をおすすめします。 なお、MisskeyのWebクライアントはPWAに対応しているので、ネイティブアプリのように動作させることも可能です。 詳しくは[こちら](todo)をご覧ください。
+
+### Misskeyのロゴ、アイコンはどこで入手できますか?
+(準備中)
+
+### 時折目にする猫耳の可愛い女の子は?
+Misskeyの守り神、藍ちゃんです。アイチャンカワイイヤッター!
+<div class="info">ℹ️ 藍ちゃんについては<a href="https://xn--931a.moe/" target="_blank">こちら</a>です。</div>
diff --git a/src/docs/zh-CN/general/report-issue.md b/src/docs/zh-CN/general/report-issue.md
new file mode 100644
index 0000000000..63527e32af
--- /dev/null
+++ b/src/docs/zh-CN/general/report-issue.md
@@ -0,0 +1,8 @@
+# 不具合の報告
+不具合と思われる状況に遭遇したときは、まず[トラブルシューティング](./troubleshooting)をご一読ください。 それでも問題が解決しないときは、以下の情報を含めて[フォーラム](https://forum.misskey.io/)に投稿してください。 投稿することで、解決策が見つかったり、不具合と判断されれば開発チームによって修正が行われます。
+
+## 含める情報
+- Misskeyのバージョン([情報ページ](/about)で確認できます)
+- お使いのブラウザの種類とバージョン
+- お使いのOSの種類とバージョン
+- 問題の再現手順
diff --git a/src/docs/zh-CN/general/troubleshooting.md b/src/docs/zh-CN/general/troubleshooting.md
new file mode 100644
index 0000000000..ebeacade2e
--- /dev/null
+++ b/src/docs/zh-CN/general/troubleshooting.md
@@ -0,0 +1,36 @@
+# 故障排除
+<div class="info">ℹ️ <a href="./faq">よくある質問</a>も合わせてお役立てください。</div>
+
+問題が発生したときは、まずこちらをご確認ください。 該当する項目が無い、もしくは手順を試しても効果がない場合は、サーバーの管理者に連絡するか[不具合を報告](./report-issue)してください。
+
+## クライアントが起動しない
+ほとんどの場合、お使いのブラウザまたはOSのバージョンが古いことが原因です。 ブラウザおよびOSのバージョンを最新のものに更新してから、再度試してみてください。
+
+これは稀ですが、それでも起動しない場合は、キャッシュが原因の場合があります。ブラウザのキャッシュをクリアして、再度試してみてください。
+
+## ページが読み込めない
+クライアントが起動するもののページが読み込めないというエラーが出る場合は、ネットワークに問題がないか確認してください。また、サーバーがダウンしていないか確認してください。
+
+これは稀ですが、キャッシュが原因の場合があります。ブラウザのキャッシュをクリアして、再度試してみてください。
+
+まだ問題がある場合は、サーバーの問題と思われるのでサーバーの管理者に連絡してください。
+
+## クライアントの動作が遅い
+以下を試してみてください:
+
+- クライアント設定で「UIのアニメーションを減らす」を有効にする
+- クライアント設定で「モーダルにぼかし効果を使用」を無効にする
+- お使いのブラウザの設定でハードウェアアクセラレーションを有効にする
+- お使いのデバイスのスペックを上げる
+
+## 通知やアンテナ等の点滅が消えない
+点滅は、未読のコンテンツがあることを示しています。通常点滅が消えない場合は、コンテンツを遡ると未読なコンテンツが残っています。 すべて既読にしたと思われるのに、それでもなお点滅が続く場合(おそらく不具合と思われます)は設定から強制的にすべて既読扱いにすることができます。
+
+## Renoteができない
+フォロワー限定のノートはRenoteすることはできません。
+
+## UI上で特定の要素が表示されない
+広告ブロッカーを使用しているとそのような不具合が発生することがあります。Misskeyではオフにしてご利用ください。
+
+## UI上で未翻訳の部分がある
+ほとんどの場合、単に翻訳が間に合っていないだけで、不具合ではありません。翻訳が終わるまでお待ちください。 [翻訳に参加](./misskey)していただくことも可能です。
diff --git a/src/docs/zh-TW/admin/disable-timelines.md b/src/docs/zh-TW/admin/disable-timelines.md
new file mode 100644
index 0000000000..b081e35ab0
--- /dev/null
+++ b/src/docs/zh-TW/admin/disable-timelines.md
@@ -0,0 +1,8 @@
+# LTL/STL/GTLの無効化
+Misskeyでは、LTL/STL/GTLをそれぞれ無効化することができます。有効/無効を切り替えるには、インスタンスコントロールパネルで設定します。
+
+LTLやSTLは、そのインスタンス全員の投稿が見れるため、新規のユーザーにとってはユーザーを探す必要がなくなり、興味のあるユーザーを見つけやすいという利点があります。 しかし同時に、フォロー機能が活用されなくなったり、不適切な投稿が目につきやすくなったり、チャットのようになることで内輪感が生じて逆に新規ユーザーが参加しにくくなるといったデメリットも持ち合わせています。 サーバーによってメリット/デメリットどちらが優勢かは異なるので、オプションとして無効にできるようになっています。 もしデメリットの方が上回っていると感じたら、それらのタイムラインを無効化することも検討してください。
+
+<div class="warn">⚠️ 無効化を行うと、ユーザーが困惑し、短期的に見て利用者が減る可能性があります。そのため、無効化の際は影響を慎重に検討し、事前に説明してフォローを整える期間を一定程度設けることを推奨します。</div>
+
+なお、管理者/モデレーターは、これらのタイムラインの無効化状態は適用されず、引き続き利用することが可能です。
diff --git a/src/docs/zh-TW/admin/faq.md b/src/docs/zh-TW/admin/faq.md
new file mode 100644
index 0000000000..317b4e0655
--- /dev/null
+++ b/src/docs/zh-TW/admin/faq.md
@@ -0,0 +1,5 @@
+# よくある質問
+ここでは、サーバー管理者向けのよくある質問を掲載しています。
+
+## デフォルトテーマを設定したい
+現在、デフォルトテーマ設定機能は実装されていません。
diff --git a/src/docs/zh-TW/advanced/aiscript.md b/src/docs/zh-TW/advanced/aiscript.md
new file mode 100644
index 0000000000..604d17daa8
--- /dev/null
+++ b/src/docs/zh-TW/advanced/aiscript.md
@@ -0,0 +1,7 @@
+# AiScript
+AiScriptは、Misskeyで使用できるスクリプト言語です。
+
+<div class="info">ℹ️ AiScript実装はMisskeyとは別リポジトリで、<a href="https://github.com/syuilo/aiscript" target="_blank">オープンソースで公開されています。</a></div>
+
+## 使い方
+AiScriptの構文や組み込み関数などのドキュメントは、[こちら](https://github.com/syuilo/aiscript/tree/master/docs)で公開されています。
diff --git a/src/docs/zh-TW/advanced/api.md b/src/docs/zh-TW/advanced/api.md
new file mode 100644
index 0000000000..76019b6145
--- /dev/null
+++ b/src/docs/zh-TW/advanced/api.md
@@ -0,0 +1,58 @@
+# Misskey API
+
+MisskeyAPIを使ってMisskeyクライアント、Misskey連携Webサービス、Bot等(以下「アプリケーション」と呼びます)を開発できます。 ストリーミングAPIもあるので、リアルタイム性のあるアプリケーションを作ることも可能です。
+
+APIを使い始めるには、まずアクセストークンを取得する必要があります。 このドキュメントでは、アクセストークンを取得する手順を説明した後、基本的なAPIの使い方を説明します。
+
+## アクセストークンの取得
+基本的に、APIはリクエストにはアクセストークンが必要となります。 APIにリクエストするのが自分自身なのか、不特定の利用者に使ってもらうアプリケーションなのかによって取得手順は異なります。
+
+* 前者の場合: [「自分自身のアクセストークンを手動発行する」](#自分自身のアクセストークンを手動発行する)に進む
+* 後者の場合: [「アプリケーション利用者にアクセストークンの発行をリクエストする」](#アプリケーション利用者にアクセストークンの発行をリクエストする)に進む
+
+### 自分自身のアクセストークンを手動発行する
+「設定 > API」で、自分のアクセストークンを発行できます。
+
+[「APIの使い方」へ進む](#APIの使い方)
+
+### アプリケーション利用者にアクセストークンの発行をリクエストする
+アプリケーション利用者のアクセストークンを取得するには、以下の手順で発行をリクエストします。
+
+#### Step 1
+
+UUIDを生成する。以後これをセッションIDと呼びます。
+
+> このセッションIDは毎回生成し、使いまわさないようにしてください。
+
+#### Step 2
+
+`{_URL_}/miauth/{session}`をユーザーのブラウザで表示させる。`{session}`の部分は、セッションIDに置き換えてください。
+> 例: `{_URL_}/miauth/c1f6d42b-468b-4fd2-8274-e58abdedef6f`
+
+表示する際、URLにクエリパラメータとしていくつかのオプションを設定できます:
+* `name` ... アプリケーション名
+    * > 例: `MissDeck`
+* `icon` ... アプリケーションのアイコン画像URL
+    * > 例: `https://missdeck.example.com/icon.png`
+* `callback` ... 認証が終わった後にリダイレクトするURL
+    * > 例: `https://missdeck.example.com/callback`
+    * リダイレクト時には、`session`というクエリパラメータでセッションIDが付きます
+* `permission` ... アプリケーションが要求する権限
+    * > 例: `write:notes,write:following,read:drive`
+    * 要求する権限を`,`で区切って列挙します
+    * どのような権限があるかは[APIリファレンス](/api-doc)で確認できます
+
+#### Step 3
+ユーザーが発行を許可した後、`{_URL_}/api/miauth/{session}/check`にPOSTリクエストすると、レスポンスとしてアクセストークンを含むJSONが返ります。
+
+レスポンスに含まれるプロパティ:
+* `token` ... ユーザーのアクセストークン
+* `user` ... ユーザーの情報
+
+[「APIの使い方」へ進む](#APIの使い方)
+
+## APIの使い方
+**APIはすべてPOSTで、リクエスト/レスポンスともにJSON形式です。RESTではありません。** アクセストークンは、`i`というパラメータ名でリクエストに含めます。
+
+* [APIリファレンス](/api-doc)
+* [ストリーミングAPI](./stream)
diff --git a/src/docs/zh-TW/advanced/create-plugin.md b/src/docs/zh-TW/advanced/create-plugin.md
new file mode 100644
index 0000000000..05708c001a
--- /dev/null
+++ b/src/docs/zh-TW/advanced/create-plugin.md
@@ -0,0 +1,74 @@
+# プラグインの作成
+Misskey Webクライアントのプラグイン機能を使うと、クライアントを拡張し、様々な機能を追加できます。 ここではプラグインの作成にあたってのメタデータ定義や、AiScript APIリファレンスを掲載します。
+
+## 元資料
+プラグインは、AiScriptのメタデータ埋め込み機能を使って、デフォルトとしてプラグインのメタデータを定義する必要があります。 メタデータは次のプロパティを含むオブジェクトです。
+
+### name
+プラグイン名
+
+### author
+プラグイン作者
+
+### version
+プラグインバージョン。数値を指定してください。
+
+### description
+プラグインの説明
+
+### permissions
+プラグインが要求する権限。MisskeyAPIにリクエストする際に用いられます。
+
+### config
+プラグインの設定情報を表すオブジェクト。 キーに設定名、値に以下のプロパティを含めます。
+
+#### type
+設定値の種類を表す文字列。以下から選択します。 string number boolean
+
+#### label
+ユーザーに表示する設定名
+
+#### description
+設定の説明
+
+#### default
+設定のデフォルト値
+
+## APIリファレンス
+AiScript標準で組み込まれているAPIは掲載しません。
+
+### Mk:dialog(title text type)
+ダイアログを表示します。typeには以下の値が設定できます。 info success warn error question 省略すると info になります。
+
+### Mk:confirm(title text type)
+確認ダイアログを表示します。typeには以下の値が設定できます。 info success warn error question 省略すると question になります。 ユーザーが"OK"を選択した場合は true を、"キャンセル"を選択した場合は false が返ります。
+
+### Mk:api(endpoint params)
+Misskey APIにリクエストします。第一引数にエンドポイント名、第二引数にパラメータオブジェクトを渡します。
+
+### Mk:save(key value)
+任意の値に任意の名前を付けて永続化します。永続化した値は、AiScriptコンテキストが終了しても残り、Mk:loadで読み取ることができます。
+
+### Mk:load(key)
+Mk:saveで永続化した指定の名前の値を読み取ります。
+
+### Plugin:register_post_form_action(title fn)
+投稿フォームにアクションを追加します。第一引数にアクション名、第二引数にアクションが選択された際のコールバック関数を渡します。 コールバック関数には、第一引数に投稿フォームオブジェクトが渡されます。
+
+### Plugin:register_note_action(title fn)
+ノートメニューに項目を追加します。第一引数に項目名、第二引数に項目が選択された際のコールバック関数を渡します。 コールバック関数には、第一引数に対象のノートオブジェクトが渡されます。
+
+### Plugin:register_user_action(title fn)
+ユーザーメニューに項目を追加します。第一引数に項目名、第二引数に項目が選択された際のコールバック関数を渡します。 コールバック関数には、第一引数に対象のユーザーオブジェクトが渡されます。
+
+### Plugin:register_note_view_interruptor(fn)
+UIに表示されるノート情報を書き換えます。 コールバック関数には、第一引数に対象のノートオブジェクトが渡されます。 コールバック関数の返り値でノートが書き換えられます。
+
+### Plugin:register_note_post_interruptor(fn)
+ノート投稿時にノート情報を書き換えます。 コールバック関数には、第一引数に対象のノートオブジェクトが渡されます。 コールバック関数の返り値でノートが書き換えられます。
+
+### Plugin:open_url(url)
+第一引数に渡されたURLをブラウザの新しいタブで開きます。
+
+### Plugin:config
+プラグインの設定が格納されるオブジェクト。プラグイン定義のconfigで設定したキーで値が入ります。
diff --git a/src/docs/zh-TW/advanced/develop-bot.md b/src/docs/zh-TW/advanced/develop-bot.md
new file mode 100644
index 0000000000..7f825e9bc4
--- /dev/null
+++ b/src/docs/zh-TW/advanced/develop-bot.md
@@ -0,0 +1,6 @@
+# Botの作成
+[Misskey API](./api)を利用してBotの開発が可能です。 また、いくつかのBot実装が公開されているため、ぜひ参考にしてください。
+
+- [syuilo/ai](https://github.com/syuilo/ai) ... Node.js上で動く、TypeScript製Bot実装
+
+Botを作成したときは、プロフィール設定からBotフラグをオンにしておくことを強くおすすめします。
diff --git a/src/docs/zh-TW/advanced/reversi-bot.md b/src/docs/zh-TW/advanced/reversi-bot.md
new file mode 100644
index 0000000000..987b24971c
--- /dev/null
+++ b/src/docs/zh-TW/advanced/reversi-bot.md
@@ -0,0 +1,160 @@
+# MisskeyリバーシBotの開発
+Misskeyのリバーシ機能に対応したBotの開発方法をここに記します。
+
+1. `games/reversi`ストリームに以下のパラメータを付けて接続する:
+    * `i`: botアカウントのAPIキー
+
+2. 対局への招待が来たら、ストリームから`invited`イベントが流れてくる
+    * イベントの中身に、`parent`という名前で対局へ誘ってきたユーザーの情報が含まれている
+
+3. `games/reversi/match`へ、`user_id`として`parent`の`id`が含まれたリクエストを送信する
+
+4. 上手くいくとゲーム情報が返ってくるので、`games/reversi-game`ストリームへ、以下のパラメータを付けて接続する:
+    * `i`: botアカウントのAPIキー
+    * `game`: `game`の`id`
+
+5. この間、相手がゲームの設定を変更するとその都度`update-settings`イベントが流れてくるので、必要であれば何かしらの処理を行う
+
+6. 設定に満足したら、`{ type: 'accept' }`メッセージをストリームに送信する
+
+7. ゲームが開始すると、`started`イベントが流れてくる
+    * イベントの中身にはゲーム情報が含まれている
+
+8. 石を打つには、ストリームに`{ type: 'set', pos: <位置> }`を送信する(位置の計算方法は後述)
+
+9. 相手または自分が石を打つと、ストリームから`set`イベントが流れてくる
+    * `color`として石の色が含まれている
+    * `pos`として位置情報が含まれている
+
+## 位置の計算法
+8x8のマップを考える場合、各マスの位置(インデックスと呼びます)は次のようになっています:
+```
++--+--+--+--+--+--+--+--+
+| 0| 1| 2| 3| 4| 5| 6| 7|
++--+--+--+--+--+--+--+--+
+| 8| 9|10|11|12|13|14|15|
++--+--+--+--+--+--+--+--+
+|16|17|18|19|20|21|22|23|
+...
+```
+
+### X,Y座標 から インデックス に変換する
+```
+pos = x + (y * mapWidth)
+```
+`mapWidth`は、ゲーム情報の`map`から、次のようにして計算できます:
+```
+mapWidth = map[0].length
+```
+
+### インデックス から X,Y座標 に変換する
+```
+x = pos % mapWidth
+y = Math.floor(pos / mapWidth)
+```
+
+## マップ情報
+マップ情報は、ゲーム情報の`map`に入っています。 文字列の配列になっており、ひとつひとつの文字がマス情報を表しています。 それをもとにマップのデザインを知る事が出来ます:
+* `(スペース)` ... マス無し
+* `-` ... マス
+* `b` ... 初期配置される黒石
+* `w` ... 初期配置される白石
+
+例えば、4*4の次のような単純なマップがあるとします:
+```text
++---+---+---+---+
+|   |   |   |   |
++---+---+---+---+
+|   | ○ | ● |   |
++---+---+---+---+
+|   | ● | ○ |   |
++---+---+---+---+
+|   |   |   |   |
++---+---+---+---+
+```
+
+この場合、マップデータはこのようになります:
+```javascript
+['----', '-wb-', '-bw-', '----']
+```
+
+## ユーザーにフォームを提示して対話可能Botを作成する
+ユーザーとのコミュニケーションを行うため、ゲームの設定画面でユーザーにフォームを提示することができます。 例えば、Botの強さをユーザーが設定できるようにする、といったシナリオが考えられます。
+
+フォームを提示するには、`reversi-game`ストリームに次のメッセージを送信します:
+```javascript
+{
+  type: 'init-form',
+  body: [フォームコントロールの配列]
+}
+```
+
+フォームコントロールの配列については今から説明します。 フォームコントロールは、次のようなオブジェクトです:
+```javascript
+{
+  id: 'switch1',
+  type: 'switch',
+  label: 'Enable hoge',
+  value: false
+}
+```
+`id` ... コントロールのID。 `type` ... コントロールの種類。後述します。 `label` ... コントロールと一緒に表記するテキスト。 `value` ... コントロールのデフォルト値。
+
+### フォームの操作を受け取る
+ユーザーがフォームを操作すると、ストリームから`update-form`イベントが流れてきます。 イベントの中身には、コントロールのIDと、ユーザーが設定した値が含まれています。 例えば、上で示したスイッチをユーザーがオンにしたとすると、次のイベントが流れてきます:
+```javascript
+{
+  id: 'switch1',
+  value: true
+}
+```
+
+### フォームコントロールの種類
+#### 開關
+type: `switch` スイッチを表示します。何かの機能をオン/オフさせたい場合に有用です。
+
+##### プロパティ
+`label` ... スイッチに表記するテキスト。
+
+#### ラジオボタン
+type: `radio` ラジオボタンを表示します。選択肢を提示するのに有用です。例えば、Botの強さを設定させるなどです。
+
+##### プロパティ
+`items` ... ラジオボタンの選択肢。例:
+```javascript
+items: [{
+  label: 'å¼±',
+  value: 1
+}, {
+  label: '中',
+  value: 2
+}, {
+  label: 'å¼·',
+  value: 3
+}]
+```
+
+#### スライダー
+type: `slider` スライダーを表示します。
+
+##### プロパティ
+`min` ... スライダーの下限。 `max` ... スライダーの上限。 `step` ... 入力欄で刻むステップ値。
+
+#### テキストボックス
+type: `textbox` テキストボックスを表示します。ユーザーになにか入力させる一般的な用途に利用できます。
+
+## ユーザーにメッセージを表示する
+設定画面でユーザーと対話する、フォーム以外のもうひとつの方法がこれです。ユーザーになにかメッセージを表示することができます。 例えば、ユーザーがBotの対応していないモードやマップを選択したとき、警告を表示するなどです。 メッセージを表示するには、次のメッセージをストリームに送信します:
+```javascript
+{
+  type: 'message',
+  body: {
+    text: 'メッセージ内容',
+    type: 'メッセージの種類'
+  }
+}
+```
+メッセージの種類: `success`, `info`, `warning`, `error`。
+
+## 投了する
+投了をするには、<a href="./api/endpoints/games/reversi/games/surrender">このエンドポイント</a>にリクエストします。
diff --git a/src/docs/zh-TW/advanced/stream.md b/src/docs/zh-TW/advanced/stream.md
new file mode 100644
index 0000000000..d5e4f1773a
--- /dev/null
+++ b/src/docs/zh-TW/advanced/stream.md
@@ -0,0 +1,350 @@
+# ストリーミングAPI
+
+ストリーミングAPIを使うと、リアルタイムで様々な情報(例えばタイムラインに新しい投稿が流れてきた、メッセージが届いた、フォローされた、など)を受け取ったり、様々な操作を行ったりすることができます。
+
+## ストリームに接続する
+
+ストリーミングAPIを利用するには、まずMisskeyサーバーに**websocket**接続する必要があります。
+
+以下のURLに、`i`というパラメータ名で認証情報を含めて、websocket接続してください。例:
+```
+%WS_URL%/streaming?i=xxxxxxxxxxxxxxx
+```
+
+認証情報は、自分のAPIキーや、アプリケーションからストリームに接続する際はユーザーのアクセストークンのことを指します。
+
+<div class="info">ℹ️ 認証情報の取得については、<a href="./api">こちらのドキュメント</a>をご確認ください。</div>
+
+---
+
+認証情報は省略することもできますが、その場合非ログインでの利用ということになり、受信できる情報や可能な操作は限られます。例:
+
+```
+%WS_URL%/streaming
+```
+
+---
+
+ストリームに接続すると、後述するAPI操作や、投稿の購読を行ったりすることができます。 しかしまだこの段階では、例えばタイムラインへの新しい投稿を受信したりすることはできません。 それを行うには、ストリーム上で、後述する**チャンネル**に接続する必要があります。
+
+**ストリームでのやり取りはすべてJSONです。**
+
+## 頻道
+MisskeyのストリーミングAPIにはチャンネルという概念があります。これは、送受信する情報を分離するための仕組みです。 Misskeyのストリームに接続しただけでは、まだリアルタイムでタイムラインの投稿を受信したりはできません。 ストリーム上でチャンネルに接続することで、様々な情報を受け取ったり情報を送信したりすることができるようになります。
+
+ひとつのストリーム上で、同時に複数のチャンネルに接続することができます。
+
+### チャンネルに接続する
+チャンネルに接続するには、次のようなデータをJSONでストリームに送信します:
+
+```json
+{
+    type: 'connect',
+    body: {
+        channel: 'xxxxxxxx',
+        id: 'foobar',
+        params: {
+            ...
+        }
+    }
+}
+```
+
+ここで、
+* `channel`には接続したいチャンネル名を設定します。チャンネルの種類については後述します。
+* `id`にはそのチャンネルとやり取りするための任意のIDを設定します。ストリームでは様々なメッセージが流れるので、そのメッセージがどのチャンネルからのものなのか識別する必要があるからです。このIDは、UUIDや、乱数のようなもので構いません。
+* `params`はチャンネルに接続する際のパラメータです。チャンネルによって接続時に必要とされるパラメータは異なります。パラメータ不要のチャンネルに接続する際は、このプロパティは省略可能です。
+
+<div class="info">ℹ️ IDはチャンネルごとではなく「チャンネルの接続ごと」です。なぜなら、同じチャンネルに異なるパラメータで複数接続するケースもあるからです。</div>
+
+### チャンネルからのメッセージを受け取る
+例えばタイムラインのチャンネルなら、新しい投稿があった時にメッセージを発します。そのメッセージを受け取ることで、タイムラインに新しい投稿がされたことをリアルタイムで知ることができます。
+
+チャンネルがメッセージを発すると、次のようなデータがJSONでストリームに流れてきます:
+```json
+{
+    type: 'channel',
+    body: {
+        id: 'foobar',
+        type: 'something',
+        body: {
+            some: 'thing'
+        }
+    }
+}
+```
+
+ここで、
+* `id`には前述したそのチャンネルに接続する際に設定したIDが設定されています。これで、このメッセージがどのチャンネルからのものなのか知ることができます。
+* `type`にはメッセージの種類が設定されます。チャンネルによって、どのような種類のメッセージが流れてくるかは異なります。
+* `body`にはメッセージの内容が設定されます。チャンネルによって、どのような内容のメッセージが流れてくるかは異なります。
+
+### チャンネルに向けてメッセージを送信する
+チャンネルによっては、メッセージを受け取るだけでなく、こちらから何かメッセージを送信し、何らかの操作を行える場合があります。
+
+チャンネルにメッセージを送信するには、次のようなデータをJSONでストリームに送信します:
+```json
+{
+    type: 'channel',
+    body: {
+        id: 'foobar',
+        type: 'something',
+        body: {
+            some: 'thing'
+        }
+    }
+}
+```
+
+ここで、
+* `id`には前述したそのチャンネルに接続する際に設定したIDを設定します。これで、このメッセージがどのチャンネルに向けたものなのか識別させることができます。
+* `type`にはメッセージの種類を設定します。チャンネルによって、どのような種類のメッセージを受け付けるかは異なります。
+* `body`にはメッセージの内容を設定します。チャンネルによって、どのような内容のメッセージを受け付けるかは異なります。
+
+### チャンネルから切断する
+チャンネルから切断するには、次のようなデータをJSONでストリームに送信します:
+
+```json
+{
+    type: 'disconnect',
+    body: {
+        id: 'foobar'
+    }
+}
+```
+
+ここで、
+* `id`には前述したそのチャンネルに接続する際に設定したIDを設定します。
+
+## ストリームを経由してAPIリクエストする
+
+ストリームを経由してAPIリクエストすると、HTTPリクエストを発生させずにAPIを利用できます。そのため、コードを簡潔にできたり、パフォーマンスの向上を見込めるかもしれません。
+
+ストリームを経由してAPIリクエストするには、次のようなデータをJSONでストリームに送信します:
+```json
+{
+    type: 'api',
+    body: {
+        id: 'xxxxxxxxxxxxxxxx',
+        endpoint: 'notes/create',
+        data: {
+            text: 'yee haw!'
+        }
+    }
+}
+```
+
+ここで、
+* `id`には、APIのレスポンスを識別するための、APIリクエストごとの一意なIDを設定する必要があります。UUIDや、簡単な乱数のようなもので構いません。
+* `endpoint`には、あなたがリクエストしたいAPIのエンドポイントを指定します。
+* `data`には、エンドポイントのパラメータを含めます。
+
+<div class="info">ℹ️ APIのエンドポイントやパラメータについてはAPIリファレンスをご確認ください。</div>
+
+### レスポンスの受信
+
+APIへリクエストすると、レスポンスがストリームから次のような形式で流れてきます。
+
+```json
+{
+    type: 'api:xxxxxxxxxxxxxxxx',
+    body: {
+        ...
+    }
+}
+```
+
+ここで、
+* `xxxxxxxxxxxxxxxx`の部分には、リクエストの際に設定された`id`が含まれています。これにより、どのリクエストに対するレスポンスなのか判別することができます。
+* `body`には、レスポンスが含まれています。
+
+## 投稿のキャプチャ
+
+Misskeyは投稿のキャプチャと呼ばれる仕組みを提供しています。これは、指定した投稿のイベントをストリームで受け取る機能です。
+
+例えばタイムラインを取得してユーザーに表示したとします。ここで誰かがそのタイムラインに含まれるどれかの投稿に対してリアクションしたとします。
+
+しかし、クライアントからするとある投稿にリアクションが付いたことなどは知る由がないため、リアルタイムでリアクションをタイムライン上の投稿に反映して表示するといったことができません。
+
+この問題を解決するために、Misskeyは投稿のキャプチャ機構を用意しています。投稿をキャプチャすると、その投稿に関するイベントを受け取ることができるため、リアルタイムでリアクションを反映させたりすることが可能になります。
+
+### 投稿をキャプチャする
+
+投稿をキャプチャするには、ストリームに次のようなメッセージを送信します:
+
+```json
+{
+    type: 'subNote',
+    body: {
+        id: 'xxxxxxxxxxxxxxxx'
+    }
+}
+```
+
+ここで、
+* `id`にキャプチャしたい投稿の`id`を設定します。
+
+このメッセージを送信すると、Misskeyにキャプチャを要請したことになり、以後、その投稿に関するイベントが流れてくるようになります。
+
+例えば投稿にリアクションが付いたとすると、次のようなメッセージが流れてきます:
+
+```json
+{
+    type: 'noteUpdated',
+    body: {
+        id: 'xxxxxxxxxxxxxxxx',
+        type: 'reacted',
+        body: {
+            reaction: 'like',
+            userId: 'yyyyyyyyyyyyyyyy'
+        }
+    }
+}
+```
+
+ここで、
+* `body`内の`id`に、イベントを発生させた投稿のIDが設定されます。
+* `body`内の`type`に、イベントの種類が設定されます。
+* `body`内の`body`に、イベントの詳細が設定されます。
+
+#### イベントの種類
+
+##### `reacted`
+その投稿にリアクションがされた時に発生します。
+
+* `reaction`に、リアクションの種類が設定されます。
+* `userId`に、リアクションを行ったユーザーのIDが設定されます。
+
+例:
+```json
+{
+    type: 'noteUpdated',
+    body: {
+        id: 'xxxxxxxxxxxxxxxx',
+        type: 'reacted',
+        body: {
+            reaction: 'like',
+            userId: 'yyyyyyyyyyyyyyyy'
+        }
+    }
+}
+```
+
+##### `deleted`
+その投稿が削除された時に発生します。
+
+* `deletedAt`に、削除日時が設定されます。
+
+例:
+```json
+{
+    type: 'noteUpdated',
+    body: {
+        id: 'xxxxxxxxxxxxxxxx',
+        type: 'deleted',
+        body: {
+            deletedAt: '2018-10-22T02:17:09.703Z'
+        }
+    }
+}
+```
+
+##### `pollVoted`
+その投稿に添付されたアンケートに投票された時に発生します。
+
+* `choice`に、選択肢IDが設定されます。
+* `userId`に、投票を行ったユーザーのIDが設定されます。
+
+例:
+```json
+{
+    type: 'noteUpdated',
+    body: {
+        id: 'xxxxxxxxxxxxxxxx',
+        type: 'pollVoted',
+        body: {
+            choice: 2,
+            userId: 'yyyyyyyyyyyyyyyy'
+        }
+    }
+}
+```
+
+### 投稿のキャプチャを解除する
+
+その投稿がもう画面に表示されなくなったりして、その投稿に関するイベントをもう受け取る必要がなくなったときは、キャプチャの解除を申請してください。
+
+次のメッセージを送信します:
+
+```json
+{
+    type: 'unsubNote',
+    body: {
+        id: 'xxxxxxxxxxxxxxxx'
+    }
+}
+```
+
+ここで、
+* `id`にキャプチャを解除したい投稿の`id`を設定します。
+
+このメッセージを送信すると、以後、その投稿に関するイベントは流れてこないようになります。
+
+# チャンネル一覧
+## `main`
+アカウントに関する基本的な情報が流れてきます。このチャンネルにパラメータはありません。
+
+### 流れてくるイベント一覧
+
+#### `renote`
+自分の投稿がRenoteされた時に発生するイベントです。自分自身の投稿をRenoteしたときは発生しません。
+
+#### `mention`
+誰かからメンションされたときに発生するイベントです。
+
+#### `readAllNotifications`
+自分宛ての通知がすべて既読になったことを表すイベントです。このイベントを利用して、「通知があることを示すアイコン」のようなものをオフにしたりする等のケースが想定されます。
+
+#### `meUpdated`
+自分の情報が更新されたことを表すイベントです。
+
+#### `follow`
+自分が誰かをフォローしたときに発生するイベントです。
+
+#### `unfollow`
+自分が誰かのフォローを解除したときに発生するイベントです。
+
+#### `followed`
+自分が誰かにフォローされたときに発生するイベントです。
+
+## `homeTimeline`
+ホームタイムラインの投稿情報が流れてきます。このチャンネルにパラメータはありません。
+
+### 流れてくるイベント一覧
+
+#### `note`
+タイムラインに新しい投稿が流れてきたときに発生するイベントです。
+
+## `localTimeline`
+ローカルタイムラインの投稿情報が流れてきます。このチャンネルにパラメータはありません。
+
+### 流れてくるイベント一覧
+
+#### `note`
+ローカルタイムラインに新しい投稿が流れてきたときに発生するイベントです。
+
+## `hybridTimeline`
+ソーシャルタイムラインの投稿情報が流れてきます。このチャンネルにパラメータはありません。
+
+### 流れてくるイベント一覧
+
+#### `note`
+ソーシャルタイムラインに新しい投稿が流れてきたときに発生するイベントです。
+
+## `globalTimeline`
+グローバルタイムラインの投稿情報が流れてきます。このチャンネルにパラメータはありません。
+
+### 流れてくるイベント一覧
+
+#### `note`
+グローバルタイムラインに新しい投稿が流れてきたときに発生するイベントです。
diff --git a/src/docs/zh-TW/features/antenna.md b/src/docs/zh-TW/features/antenna.md
new file mode 100644
index 0000000000..0ce63a7a1a
--- /dev/null
+++ b/src/docs/zh-TW/features/antenna.md
@@ -0,0 +1,4 @@
+# 天線
+アンテナは、自由に条件を設定して、合致するノートを自動で収集することができる機能です。
+
+条件を設定したアンテナが作成された状態で、条件に合致するノートが投稿されると、リアルタイムでそのアンテナのタイムラインにノートが追加されます。
diff --git a/src/docs/zh-TW/features/custom-emoji.md b/src/docs/zh-TW/features/custom-emoji.md
new file mode 100644
index 0000000000..193cf3eb48
--- /dev/null
+++ b/src/docs/zh-TW/features/custom-emoji.md
@@ -0,0 +1,2 @@
+# 自訂表情符號
+カスタム絵文字は、インスタンスで用意された画像を絵文字のように使える機能です。 ノート、リアクション、チャット、自己紹介、名前などの場所で使うことができます。 カスタム絵文字をそれらの場所で使うには、絵文字ピッカーボタン(ある場合)を押すか、`:`を入力して絵文字サジェストを表示します。 テキスト内に`:foo:`のような形式の文字列が見つかると、`foo`の部分がカスタム絵文字名と解釈され、表示時には対応したカスタム絵文字に置き換わります。
diff --git a/src/docs/zh-TW/features/deck.md b/src/docs/zh-TW/features/deck.md
new file mode 100644
index 0000000000..2e61618436
--- /dev/null
+++ b/src/docs/zh-TW/features/deck.md
@@ -0,0 +1,18 @@
+# 多欄模式
+
+デッキは利用可能なUIのひとつです。「カラム」と呼ばれるビューを複数並べて表示させることで、カスタマイズ性が高く、情報量の多いUIが構築できることが特徴です。
+
+## カラムの追加
+デッキの背景を右クリックし、「カラムを追加」して任意のカラムを追加できます。
+
+## カラムの移動
+カラムは、ドラッグアンドドロップで他のカラムと位置を入れ替えることが出来るほか、カラムメニュー(カラムのヘッダー右クリック)から位置を移動させることもできます。
+
+## カラムの水平分割
+カラムは左右だけでなく、上下に並べることもできます。 カラムメニューを開き、「左に重ねる」を選択すると、左のカラムの下に現在のカラムが移動します。 上下分割を解除するには、カラムメニューの「右に出す」を選択します。
+
+## カラムの設定
+カラムメニューの「編集」を選択するとカラムの設定を編集できます。カラムの名前を変えたり、幅を変えたりできます。
+
+## デッキの設定
+デッキに関する設定は、[settings/deck](/settings/deck)で行えます。
diff --git a/src/docs/zh-TW/features/drive.md b/src/docs/zh-TW/features/drive.md
new file mode 100644
index 0000000000..5a5940e711
--- /dev/null
+++ b/src/docs/zh-TW/features/drive.md
@@ -0,0 +1,17 @@
+# 雲端硬碟
+ドライブは、Misskey上でファイルを管理できる機能です。
+
+[ドライブのページ](/my/drive)から任意のファイルをアップロードできるほか、アバターに設定した画像や、ノートに添付したファイルなどもすべてドライブにアップロードされます。
+
+<div class="warn">⚠️ ドライブからファイルを削除すると、そのファイルが添付されたノートも消えます。</div>
+
+ドライブにアップロードされたファイルは、いつでもダウンロードすることができるほか、ノート作成時に「ドライブからファイルを添付」することでファイルを再利用することもできます。
+
+ドライブ内にフォルダを作り、複数のファイルをまとめて整理することもできます。
+
+## 閲覧注意 (NSFW)
+<div class="info">ℹ️ この項目が閲覧注意なわけではありません</div>
+
+閲覧注意またはNSFW (Not safe for work) は、ドライブのファイルに設定することができるフラグです。 閲覧注意フラグを設定されたファイルは、表示される際に閲覧者の操作なしには表示されなくなります。 このフラグは、例えば職場や公共の場で閲覧するのに適切でないと思われる画像などに設定し、そのような画像が突然表示されてしまうことを防ぐ目的で使われます。
+
+このフラグは手動でオンオフを切り替えられるほか、モデレーターの判断で設定される場合もあります。
diff --git a/src/docs/zh-TW/features/favorite.md b/src/docs/zh-TW/features/favorite.md
new file mode 100644
index 0000000000..6c52ec94b0
--- /dev/null
+++ b/src/docs/zh-TW/features/favorite.md
@@ -0,0 +1,4 @@
+# 我的最愛
+[ノート](./node)をお気に入りとして登録できる機能です。 お気に入り登録したノートは、[お気に入りページ](./my/favorites)で一覧することができます。 お気に入りに登録したことは相手に通知されず、お気に入りは自分しか見ることができません。
+
+ノートをお気に入り登録するには、ノートメニューの「お気に入り」を押します。お気に入り解除するには、ノートメニューの「お気に入り解除」を押します。
diff --git a/src/docs/zh-TW/features/follow.md b/src/docs/zh-TW/features/follow.md
new file mode 100644
index 0000000000..1791f039bd
--- /dev/null
+++ b/src/docs/zh-TW/features/follow.md
@@ -0,0 +1,2 @@
+# 追隨中
+ユーザーをフォローすると、タイムラインにそのユーザーの投稿が表示されるようになります。ただし、他のユーザーに対する返信は含まれません。 ユーザーをフォローするには、ユーザーページの「フォロー」ボタンをクリックします。フォローを解除するには、もう一度クリックします。
diff --git a/src/docs/zh-TW/features/keyboard-shortcut.md b/src/docs/zh-TW/features/keyboard-shortcut.md
new file mode 100644
index 0000000000..87be6b7bcb
--- /dev/null
+++ b/src/docs/zh-TW/features/keyboard-shortcut.md
@@ -0,0 +1,66 @@
+# キーボードショートカット
+
+## 公開
+これらのショートカットは基本的にどこでも使えます。
+<table>
+    <thead>
+        <tr><th>ショートカット</th><th>効果</th><th>由来</th></tr>
+    </thead>
+    <tbody>
+        <tr><td><kbd class="key">P</kbd>, <kbd class="key">N</kbd></td><td>新規投稿</td><td><b>P</b>ost, <b>N</b>ew, <b>N</b>ote</td></tr>
+        <tr><td><kbd class="key">T</kbd></td><td>タイムラインの最も新しい投稿にフォーカス</td><td><b>T</b>imeline, <b>T</b>op</td></tr>
+        <tr><td><kbd class="group"><kbd class="key">Shift</kbd> + <kbd class="key">N</kbd></kbd></td><td>通知を表示/隠す</td><td><b>N</b>otifications</td></tr>
+        <tr><td><kbd class="key">S</kbd></td><td>搜尋</td><td><b>S</b>earch</td></tr>
+        <tr><td><kbd class="key">H</kbd>, <kbd class="key">?</kbd></td><td>ヘルプを表示</td><td><b>H</b>elp</td></tr>
+    </tbody>
+</table>
+
+## 投稿にフォーカスされた状態
+<table>
+    <thead>
+        <tr><th>ショートカット</th><th>効果</th><th>由来</th></tr>
+    </thead>
+    <tbody>
+        <tr><td><kbd class="key">↑</kbd>, <kbd class="key">K</kbd>, <kbd class="group"><kbd class="key">Shift</kbd> + <kbd class="key">Tab</kbd></kbd></td><td>上の投稿にフォーカスを移動</td><td>-</td></tr>
+        <tr><td><kbd class="key">↓</kbd>, <kbd class="key">J</kbd>, <kbd class="key">Tab</kbd></td><td>下の投稿にフォーカスを移動</td><td>-</td></tr>
+        <tr><td><kbd class="key">R</kbd></td><td>返信フォームを開く</td><td><b>R</b>eply</td></tr>
+        <tr><td><kbd class="key">Q</kbd></td><td>Renoteフォームを開く</td><td><b>Q</b>uote</td></tr>
+        <tr><td><kbd class="group"><kbd class="key">Ctrl</kbd> + <kbd class="key">Q</kbd></kbd></td><td>即刻Renoteする(フォームを開かずに)</td><td>-</td></tr>
+        <tr><td><kbd class="key">E</kbd>, <kbd class="key">A</kbd>, <kbd class="key">+</kbd></td><td>リアクションフォームを開く</td><td><b>E</b>mote, re<b>A</b>ction</td></tr>
+        <tr><td><kbd class="key">0</kbd>~<kbd class="key">9</kbd></td><td>数字に対応したリアクションをする(対応については後述)</td><td>-</td></tr>
+        <tr><td><kbd class="key">F</kbd>, <kbd class="key">B</kbd></td><td>お気に入りに登録</td><td><b>F</b>avorite, <b>B</b>ookmark</td></tr>
+        <tr><td><kbd class="key">Del</kbd>, <kbd class="group"><kbd class="key">Ctrl</kbd> + <kbd class="key">D</kbd></kbd></td><td>投稿を削除</td><td><b>D</b>elete</tr>
+        <tr><td><kbd class="key">M</kbd>, <kbd class="key">O</kbd></td><td>投稿に対するメニューを開く</td><td><b>M</b>ore, <b>O</b>ther</td></tr>
+        <tr><td><kbd class="key">S</kbd></td><td>CWで隠された部分を表示 or 隠す</td><td><b>S</b>how, <b>S</b>ee</td></tr>
+        <tr><td><kbd class="key">Esc</kbd></td><td>フォーカスを外す</td><td>-</td></tr>
+    </tbody>
+</table>
+
+## Renoteフォーム
+<table>
+    <thead>
+        <tr><th>ショートカット</th><th>効果</th><th>由来</th></tr>
+    </thead>
+    <tbody>
+        <tr><td><kbd class="key">Enter</kbd></td><td>Renoteする</td><td>-</td></tr>
+        <tr><td><kbd class="key">Q</kbd></td><td>フォームを展開する</td><td><b>Q</b>uote</td></tr>
+        <tr><td><kbd class="key">Esc</kbd></td><td>フォームを閉じる</td><td>-</td></tr>
+    </tbody>
+</table>
+
+## リアクションフォーム
+デフォルトで「👍」にフォーカスが当たっている状態です。
+<table>
+    <thead>
+        <tr><th>ショートカット</th><th>効果</th><th>由来</th></tr>
+    </thead>
+    <tbody>
+        <tr><td><kbd class="key">↑</kbd>, <kbd class="key">K</kbd></td><td>上のリアクションにフォーカスを移動</td><td>-</td></tr>
+        <tr><td><kbd class="key">↓</kbd>, <kbd class="key">J</kbd></td><td>下のリアクションにフォーカスを移動</td><td>-</td></tr>
+        <tr><td><kbd class="key">←</kbd>, <kbd class="key">H</kbd>, <kbd class="group"><kbd class="key">Shift</kbd> + <kbd class="key">Tab</kbd></kbd></td><td>左のリアクションにフォーカスを移動</td><td>-</td></tr>
+        <tr><td><kbd class="key">→</kbd>, <kbd class="key">L</kbd>, <kbd class="key">Tab</kbd></td><td>右のリアクションにフォーカスを移動</td><td>-</td></tr>
+        <tr><td><kbd class="key">Enter</kbd>, <kbd class="key">Space</kbd>, <kbd class="key">+</kbd></td><td>リアクション確定</td><td>-</td></tr>
+        <tr><td><kbd class="key">0</kbd>~<kbd class="key">9</kbd></td><td>数字に対応したリアクションで確定</td><td>-</td></tr>
+        <tr><td><kbd class="key">Esc</kbd></td><td>リアクションするのをやめる</td><td>-</td></tr>
+    </tbody>
+</table>
diff --git a/src/docs/zh-TW/features/mfm.md b/src/docs/zh-TW/features/mfm.md
new file mode 100644
index 0000000000..5be2df4f30
--- /dev/null
+++ b/src/docs/zh-TW/features/mfm.md
@@ -0,0 +1,12 @@
+# MFM
+MFMは、Misskey Flavored Markdownの略で、Misskeyの様々な場所で使用できる専用のマークアップ言語です。 MFMで使用可能な構文は[MFMチートシート](/mfm-cheat-sheet)で確認できます。
+
+## MFMが使用可能な場所の例
+- ノート本文
+- CW注釈
+- ユーザーの名前
+- ユーザーの自己紹介
+
+## 開発者向け情報
+MFMのパーサー実装はライブラリとして公開されており、簡単にクライアントにMFMを組み込むことが可能です。
+- [misskey-dev/mfm.js](https://github.com/misskey-dev/mfm.js) - JavaScriptパーサー実装
diff --git a/src/docs/zh-TW/features/mute.md b/src/docs/zh-TW/features/mute.md
new file mode 100644
index 0000000000..7d17ef4328
--- /dev/null
+++ b/src/docs/zh-TW/features/mute.md
@@ -0,0 +1,13 @@
+# 靜音
+
+ユーザーをミュートすると、そのユーザーに関する次のコンテンツがMisskeyに表示されなくなります:
+
+* タイムラインや投稿の検索結果内の、そのユーザーの投稿(およびそれらの投稿に対する返信やRenote)
+* そのユーザーからの通知
+* メッセージ履歴一覧内の、そのユーザーとのメッセージ履歴
+
+ユーザーをミュートするには、対象のユーザーのユーザーページに表示されている「ミュート」ボタンを押します。
+
+ミュートを行ったことは相手に通知されず、ミュートされていることを知ることもできません。
+
+設定>ミュート から、自分がミュートしているユーザー一覧を確認することができます。
diff --git a/src/docs/zh-TW/features/note.md b/src/docs/zh-TW/features/note.md
new file mode 100644
index 0000000000..63dc9e5267
--- /dev/null
+++ b/src/docs/zh-TW/features/note.md
@@ -0,0 +1,51 @@
+# 貼文
+ノートは、Misskeyに投稿される、文章、ファイル、アンケートなどを含むコンテンツで、Misskeyの中心的概念です。また、そのノートを作成する行為自体もノートと呼ばれます。
+
+ノートが作成されると、[タイムライン](./timeline)に追加され、自分の[フォロワー](./follow)やサーバーのユーザーが見れるようになります。
+
+ノートには、[リアクション](./reaction)を行うことができます。また、返信や引用もできます。
+
+ノートを[お気に入り](./favorite)登録することで、後で簡単に見返すことができます。
+
+## ノートを作成する
+ノートを作成するには、画面上にある鉛筆マークのボタンを押して、作成フォームを開きます。作成フォームに内容を入力し、「ノート」ボタンを押すことでノートが作成されます。 ノートには、画像、動画など任意のファイルや、[アンケート](./poll)を添付することができます。また、本文中には[MFM](./mfm)が使用でき、[メンション](./mention)や[ハッシュタグ](./hashtag)を含めることもできます。 他にも、CWや公開範囲といった設定も行えます(詳細は後述)。
+<div class="info">ℹ️ コンピューターのクリップボードに画像データがある状態で、フォーム内のテキストボックスにペーストするとその画像を添付することができます。</div>
+<div class="info">ℹ️ テキストボックス内で<kbd class="key">Ctrl + Enter</kbd>を押すことでも投稿できます。</div>
+
+## 轉發
+既にあるノートを引用、もしくはそのノートを新しいノートとして共有する行為、またそれによって作成されたノートをRenoteと呼びます。 自分がフォローしているユーザーの、気に入ったノートを自分のフォロワーに共有したい場合や、過去の自分のノートを再度共有したい場合に使います。 同じノートに対して無制限にRenoteを行うことができますが、あまり連続して使用すると迷惑になる場合もあるので、注意しましょう。
+<div class="warn">⚠️ 公開範囲がフォロワーやダイレクトのノートはRenoteできません</div>
+
+Renoteを削除するには、Renoteの時刻表示の隣にある「...」を押し、「Renote解除」を選択します。
+
+## CW
+Contents Warningの略で、ノートの内容を、閲覧者の操作なしには表示しないようにできる機能です。主に長大な内容を隠すためや、ネタバレ防止などに使うことができます。 設定するには、フォームの「内容を隠す」ボタン(目のアイコン)を押します。すると新しい入力エリアが表れるので、そこに内容の要約を記入します。
+
+## 可見性
+ノートごとに、そのノートが公開される範囲を設定することができます。フォームの「ノート」ボタンの左にあるアイコンを押すと公開範囲を以下から選択できます。
+
+### 公開
+全ての人に対してノートが公開されるほか、サーバーの全てのタイムライン(ホームタイムライン、ローカルタイムライン、ソーシャルタイムライン、グローバルタイムライン)にノートが流れます。
+<div class="warn">⚠️ アカウントが<a href="./silence">サイレンス</a>状態の時は、この公開範囲は使用できません。</div>
+
+### 首頁
+全ての人に対してノートが公開されますが、フォロワー以外のローカルタイムライン、ソーシャルタイムライン、グローバルタイムラインにはノートは流れません。
+
+### 追隨者
+自分のフォロワーに対してのみノートを公開します。フォロワーの全てのタイムラインに流れます。
+
+### 指定使用者
+指定したユーザーに対してのみノートを公開します。指定したユーザーの全てのタイムラインに流れます。
+
+### 「ローカルのみ」オプション
+このオプションを有効にすると、リモートにノートを連合しなくなります。
+
+### 公開範囲の比較
+<table>
+    <tr><th></th><th>公開</th><th>首頁</th><th>追隨者</th><th>指定使用者</th></tr>
+    <tr><th>フォロワーのLTL/STL/GTL</th><td>✔</td><td>✔</td><td>✔</td><td></td></tr>
+    <tr><th>非フォロワーのLTL/STL/GTL</th><td>✔</td><td></td><td></td><td></td></tr>
+</table>
+
+## 置頂
+ノートをピン留めすると、ユーザーページに常にそのノートを表示しておくことができます。 ノートのメニューを開き、「ピン留め」を選択してピン留めできます。 複数のノートをピン留めできます。
diff --git a/src/docs/zh-TW/features/pages.md b/src/docs/zh-TW/features/pages.md
new file mode 100644
index 0000000000..7e88aa9a47
--- /dev/null
+++ b/src/docs/zh-TW/features/pages.md
@@ -0,0 +1,10 @@
+# Pages
+
+## 變數
+変数を使うことで動的なページを作成できます。テキスト内で <b>{ 変数名 }</b> と書くとそこに変数の値を埋め込めます。例えば <b>Hello { thing } world!</b> というテキストで、変数(thing)の値が <b>ai</b> だった場合、テキストは <b>Hello ai world!</b> になります。
+
+変数の評価(値を算出すること)は上から下に行われるので、ある変数の中で自分より下の変数を参照することはできません。例えば上から <b>A、B、C</b> と3つの変数を定義したとき、<b>C</b>の中で<b>A</b>や<b>B</b>を参照することはできますが、<b>A</b>の中で<b>B</b>や<b>C</b>を参照することはできません。
+
+ユーザーからの入力を受け取るには、ページに「ユーザー入力」ブロックを設置し、「変数名」に入力を格納したい変数名を設定します(変数は自動で作成されます)。その変数を使ってユーザー入力に応じた動作を行えます。
+
+関数を使うと、値の算出処理を再利用可能な形にまとめることができます。関数を作るには、「関数」タイプの変数を作成します。関数にはスロット(引数)を設定することができ、スロットの値は関数内で変数として利用可能です。また、関数を引数に取る関数(高階関数と呼ばれます)も存在します。関数は予め定義しておくほかに、このような高階関数のスロットに即席でセットすることもできます。
diff --git a/src/docs/zh-TW/features/reaction.md b/src/docs/zh-TW/features/reaction.md
new file mode 100644
index 0000000000..df2a0b3745
--- /dev/null
+++ b/src/docs/zh-TW/features/reaction.md
@@ -0,0 +1,11 @@
+# 情感
+他の人のノートに、絵文字を付けて簡単にあなたの反応を伝えられる機能です。 リアクションするには、ノートの + アイコンをクリックしてピッカーを表示し、絵文字を選択します。 リアクションには[カスタム絵文字](./custom-emoji)も使用できます。
+
+## リアクションピッカーのカスタマイズ
+ピッカーに表示される絵文字を自分好みにカスタマイズすることができます。 設定の「リアクション」で設定します。
+
+## リモート投稿へのリアクションについて
+リアクションはMisskeyオリジナルの機能であるため、リモートインスタンスがMisskeyでない限りは、ほとんどの場合「Like」としてアクティビティが送信されます。一般的にはLikeは「お気に入り」として実装されているようです。
+
+## リモートからのリアクションについて
+リモートから「Like」アクティビティを受信したとき、Misskeyでは「👍」のリアクションとして解釈されます。
diff --git a/src/docs/zh-TW/features/silence.md b/src/docs/zh-TW/features/silence.md
new file mode 100644
index 0000000000..8469784990
--- /dev/null
+++ b/src/docs/zh-TW/features/silence.md
@@ -0,0 +1,6 @@
+# 禁言
+サイレンスは、アカウントに設定される状態のひとつです。
+
+アカウントがサイレンス状態になると、ノートの公開範囲をパブリックにできなくなります。 ホーム、フォロワー、ダイレクトは選択可能なため、サイレンスを受けた場合でもフォロワーやあなたのユーザーページを直接訪れた場合は投稿を閲覧できますが、GTL(連合タイムライン)やLTL(ローカルタイムライン)には投稿が流れません。
+
+アカウントのサイレンス状態は、サーバーのモデレーターによって有効化/無効化されます。
diff --git a/src/docs/zh-TW/features/theme.md b/src/docs/zh-TW/features/theme.md
new file mode 100644
index 0000000000..5c8306f090
--- /dev/null
+++ b/src/docs/zh-TW/features/theme.md
@@ -0,0 +1,68 @@
+# 外觀主題
+
+テーマを設定して、Misskeyクライアントの見た目を変更できます。
+
+## テーマの設定
+設定 > テーマ
+
+## テーマを作成する
+テーマコードはJSON5で記述されたテーマオブジェクトです。 テーマは以下のようなオブジェクトです。
+``` js
+{
+    id: '17587283-dd92-4a2c-a22c-be0637c9e22a',
+
+    name: 'Danboard',
+    author: 'syuilo',
+
+    base: 'light',
+
+    props: {
+        accent: 'rgb(218, 141, 49)',
+        bg: 'rgb(218, 212, 190)',
+        fg: 'rgb(115, 108, 92)',
+        panel: 'rgb(236, 232, 220)',
+        renote: 'rgb(100, 152, 106)',
+        link: 'rgb(100, 152, 106)',
+        mention: '@accent',
+        hashtag: 'rgb(100, 152, 106)',
+        header: 'rgba(239, 227, 213, 0.75)',
+        navBg: 'rgb(216, 206, 182)',
+        inputBorder: 'rgba(0, 0, 0, 0.1)',
+    },
+}
+
+```
+
+* `id` ... テーマの一意なID。UUIDをおすすめします。
+* `name` ... テーマ名
+* `author` ... テーマの作者
+* `desc` ... テーマの説明(オプション)
+* `base` ... 明るいテーマか、暗いテーマか
+    * `light`にすると明るいテーマになり、`dark`にすると暗いテーマになります。
+    * テーマはここで設定されたベーステーマを継承します。
+* `props` ... テーマのスタイル定義。これから説明します。
+
+### テーマのスタイル定義
+`props`下にはテーマのスタイルを定義します。 キーがCSSの変数名になり、バリューで中身を指定します。 なお、この`props`オブジェクトはベーステーマから継承されます。 ベーステーマは、このテーマの`base`が`light`なら[_light.json5](https://github.com/misskey-dev/misskey/blob/develop/src/client/themes/_light.json5)で、`dark`なら[_dark.json5](https://github.com/misskey-dev/misskey/blob/develop/src/client/themes/_dark.json5)です。 つまり、このテーマ内の`props`に`panel`というキーが無くても、そこにはベーステーマの`panel`があると見なされます。
+
+#### バリューで使える構文
+* 16進数で表された色
+    * 例: `#00ff00`
+* `rgb(r, g, b)`形式で表された色
+    * 例: `rgb(0, 255, 0)`
+* `rgb(r, g, b, a)`形式で表された透明度を含む色
+    * 例: `rgba(0, 255, 0, 0.5)`
+* 他のキーの値の参照
+    * `@{キー名}`と書くと他のキーの値の参照になります。`{キー名}`は参照したいキーの名前に置き換えます。
+    * 例: `@panel`
+* 定数(後述)の参照
+    * `${定数名}`と書くと定数の参照になります。`{定数名}`は参照したい定数の名前に置き換えます。
+    * 例: `$main`
+* 関数(後述)
+    * `:{関数名}<{引数}<{色}`
+
+#### 常數
+「CSS変数として出力はしたくないが、他のCSS変数の値として使いまわしたい」値があるときは、定数を使うと便利です。 キー名を`$`で始めると、そのキーはCSS変数として出力されません。
+
+#### 函数
+wip
diff --git a/src/docs/zh-TW/features/timeline.md b/src/docs/zh-TW/features/timeline.md
new file mode 100644
index 0000000000..ee3d2a8fd5
--- /dev/null
+++ b/src/docs/zh-TW/features/timeline.md
@@ -0,0 +1,31 @@
+# 時間軸
+タイムラインは、[ノート](./note)が時系列で表示される機能です。 タイムラインには以下で示す種類があり、種類によって表示されるノートも異なります。 なお、タイムラインの種類によってはサーバーにより無効になっている場合があります。
+
+## 首頁
+自分のフォローしているユーザーの投稿が流れます。HTLと略されます。
+
+## 本地
+全てのローカルユーザーの「ホーム」指定されていない投稿が流れます。LTLと略されます。
+
+## 社群
+自分のフォローしているユーザーの投稿と、全てのローカルユーザーの「ホーム」指定されていない投稿が流れます。STLと略されます。
+
+## 公開
+全てのローカルユーザーの「ホーム」指定されていない投稿と、サーバーに届いた全てのリモートユーザーの「ホーム」指定されていない投稿が流れます。GTLと略されます。
+
+## 對比
+| ソース          |     |    | 時間軸 |    |    |
+| ------------ | --- | -- | --- | -- | -- |
+| 使用者          | 可見性 | 首頁 | 本地  | 社群 | 公開 |
+| ローカル (フォロー)  | 發佈  | ✔  | ✔   | ✔  | ✔  |
+|              | 首頁  | ✔  |     | ✔  |    |
+|              | 追隨者 | ✔  | ✔   | ✔  | ✔  |
+| リモート (フォロー)  | 發佈  | ✔  |     | ✔  | ✔  |
+|              | 首頁  | ✔  |     | ✔  |    |
+|              | 追隨者 | ✔  |     | ✔  | ✔  |
+| ローカル (未フォロー) | 發佈  |    | ✔   | ✔  | ✔  |
+|              | 首頁  |    |     |    |    |
+|              | 追隨者 |    |     |    |    |
+| リモート (未フォロー) | 發佈  |    |     |    | ✔  |
+|              | 首頁  |    |     |    |    |
+|              | 追隨者 |    |     |    |    |
diff --git a/src/docs/zh-TW/features/widgets.md b/src/docs/zh-TW/features/widgets.md
new file mode 100644
index 0000000000..015cfc768e
--- /dev/null
+++ b/src/docs/zh-TW/features/widgets.md
@@ -0,0 +1,7 @@
+# 小工具
+ウィジェットは、MisskeyのUI上に設置できる小型の情報表示、操作が行えるパーツです。
+
+ウィジェットを編集するには、ウィジェット編集モードに切り替えます。切り替え方法はUIによって異なります。 ウィジェット編集モードでは、ウィジェットの追加、削除、並び替え、およびそれぞれのウィジェットの設定を行えます。
+
+## 利用可能なウィジェット一覧
+todo
diff --git a/src/docs/zh-TW/general/apps.md b/src/docs/zh-TW/general/apps.md
new file mode 100644
index 0000000000..1f4c85fe8f
--- /dev/null
+++ b/src/docs/zh-TW/general/apps.md
@@ -0,0 +1,6 @@
+# サードパーティアプリのリスト
+## クライアント
+todo
+
+## 連携サービス
+todo
diff --git a/src/docs/zh-TW/general/faq.md b/src/docs/zh-TW/general/faq.md
new file mode 100644
index 0000000000..ecb664e32e
--- /dev/null
+++ b/src/docs/zh-TW/general/faq.md
@@ -0,0 +1,22 @@
+# よくある質問
+ここでは利用上のよくある質問について掲載しています。 Misskeyのプロジェクト自体についてのよくある質問は[こちら](./misskey)に掲載されています。
+
+### iOS/Androidのアプリはありますか?
+公式にはそういったOSのネイティブアプリを開発していませんが、サードパーティ製のアプリがいくつかあります。 詳しくは[こちら](./apps)をご覧ください。
+
+ただ、サードパーティ製アプリはどうしても機能への対応が遅れてしまうため、とくに拘りがなければ公式のWebクライアントの利用をおすすめします。 なお、MisskeyのWebクライアントはPWAに対応しているので、ネイティブアプリのように動作させることも可能です。 詳しくは[こちら](todo)をご覧ください。
+
+## 他のサーバーのユーザーをフォローするときは?
+メニューから検索を選び、ユーザー名をホスト込みで入力します。例: `@syuilo@misskey.io`
+
+## Renoteを削除するには?
+Renoteの時刻表示の隣にある「...」を押し、「Renote解除」を選択します。 Renoteについては[こちら](../features/note)をご確認ください。
+
+## URLのプレビューを表示させたくない
+MFMには、そのURLのプレビューを無効にする構文があります。詳細は[MFMチートシート](/mfm-cheat-sheet)をご確認ください。
+
+## カスタム絵文字を追加したい
+運営者のみがカスタム絵文字を追加、編集、削除できます。それらを希望する場合は運営者に依頼してください。
+
+## Botを開発したい
+Misskey APIを利用してBotの開発が可能です。[こちら](../advanced/develop-bot)をご確認ください。
diff --git a/src/docs/zh-TW/general/glossary.md b/src/docs/zh-TW/general/glossary.md
new file mode 100644
index 0000000000..4515e7295c
--- /dev/null
+++ b/src/docs/zh-TW/general/glossary.md
@@ -0,0 +1,83 @@
+# 用語集
+Misskeyに関する用語集です。
+
+## AcitivityPub
+(読み: あくてぃびてぃぱぶ) 分散型を実現するために用いられるプロトコル(仕様)。このプロトコルに則ってサーバー同士通信を行うことで、連合が行われ、Fediverseを形成しています。
+
+## AiScript
+(読み: あいすくりぷと) Misskey上で使用できるプログラミング言語です。詳細は[こちら。](../advanced/aiscript)
+
+## API
+(読み: えーぴーあい) Misskeyのサーバーが公開している、プログラムからMisskeyを扱うためのインターフェース。詳細は[こちら。](../advanced/api)
+
+## Bot
+(読み: ぼっと) プログラムによって動作しているアカウント。
+
+## CW
+(読み: こんてんつわーにんぐ) Contents Warningの略。ノートの内容を、操作なしには表示しないようにできる機能。主に長大な内容を隠すためや、ネタバレ防止などに使われます。
+
+## Fediverse
+(読み: ふぇでぃばーす) Misskeyを含む様々な分散型ソフトウェアのサーバーで構成されたネットワーク。
+
+## GTL
+グローバルタイムライン(Global TimeLine)の略。タイムラインの詳細は[こちら。](../features/timeline)
+
+## HTL
+ホームタイムライン(Home TimeLine)の略。タイムラインの詳細は[こちら。](../features/timeline)
+
+## LTL
+ローカルタイムライン(Local TimeLine)の略。タイムラインの詳細は[こちら。](../features/timeline)
+
+## MFM
+(読み: えむえふえむ) Misskey Flavored Markdownの略で、Misskey上で使用できるマークアップ言語です。詳細は[こちら。](../features/mfm)
+
+## NSFW
+(読み: のっとせーふふぉーわーく) Not Safe For Workの略。画像を「閲覧注意」扱いにし、操作なしには表示しないようにすることができる機能。
+
+## 轉發
+(読み: りのーと) 既にあるノートを引用、もしくはそのノートを新しいノートとして共有する行為、またそれによって作成されたノート。詳細は[こちら。](../features/note)
+
+## STL
+ソーシャルタイムライン(Social TimeLine)の略。タイムラインの詳細は[こちら。](../features/timeline)
+
+## 藍
+(読み: あい) Misskeyの看板娘(公式キャラクター)です。
+
+## アクティブユーザー
+インスタンスにアカウントを作っているユーザーのうち、現在も実際にサービスを利用しているユーザーのこと。
+
+## 實例
+todo
+
+## コントロールパネル
+インスタンスの設定画面のこと。
+
+## 伺服器
+todo
+
+## 禁言
+ノートをパブリックな公開範囲で投稿できなくされている状態。モデレーターの判断でユーザーごとに設定されます。詳細は[こちら。](../features/silence)
+
+## 凍結
+アカウントが使用不可に設定されている状態。
+
+## 雲端硬碟
+Misskeyにアップロードしたファイルを管理する機能。詳細は[こちら。](../features/drive)
+
+## 貼文
+Misskeyに投稿される、文章、ファイル、アンケートなどを含めることができるコンテンツ。詳細は[こちら。](../features/note)
+
+## ミスキスト
+Misskeyを使う人のこと。
+
+## 板主
+スパムの凍結およびサイレンスや不適切な投稿の削除など、コミュニティ運営に関する権限を持つユーザー。
+
+## 遠端
+他サーバーのことを指します。リモートユーザーといったように接頭辞としても使われます。ローカルの逆です。
+
+## 站台聯邦
+サーバー上で作成された情報が他のサーバーに伝わること。
+
+## 本地
+自サーバーのことを指します。ローカルユーザー、ローカルタイムラインといったように接頭辞としても使われます。リモートの逆です。
diff --git a/src/docs/zh-TW/general/links.md b/src/docs/zh-TW/general/links.md
new file mode 100644
index 0000000000..d6b16856fb
--- /dev/null
+++ b/src/docs/zh-TW/general/links.md
@@ -0,0 +1,5 @@
+# リンク集
+
+## ライブラリ
+- [misskey-dev/misskey.js](https://github.com/misskey-dev/misskey.js) - JavaScriptのMisskey SDK
+- [misskey-dev/mfm.js](https://github.com/misskey-dev/mfm.js) - JavaScriptのMFMパーサー実装
diff --git a/src/docs/zh-TW/general/misskey.md b/src/docs/zh-TW/general/misskey.md
new file mode 100644
index 0000000000..b4f2192e8e
--- /dev/null
+++ b/src/docs/zh-TW/general/misskey.md
@@ -0,0 +1,87 @@
+# 關於 Misskey
+
+Misskeyはオープンソースの分散型マイクロブログプラットフォームプロジェクトです。 開発は日本でsyuiloによって2014年から開始されました。 ドライブ、リアクションなどの豊富な機能や、高いカスタマイズ性を備えたUIを持つことが特徴です。
+
+## 歴史
+開発当初は掲示板がメインのサービスでしたが、ユーザーが短文を投稿し、それを時系列で流れるタイムライン機能を追加したところ人気が高まり、徐々にそれがメインとして開発が進むようになりました。 当初は分散型ではありませんでしたが、2018年にAcitivityPubを実装し分散型になったことで、より多くの方に認知され利用されるサービスになり、現在に至ります。
+<div class="info">ℹ️ Misskeyという名前は、syuiloが当時聴いていたMay'nというアーティストの楽曲、Brain Diverの歌詞に由来します。</div>
+
+誰でも開発に参加することができ、現在でも活発に開発が続いています。
+
+## 分散型とは何か?
+
+<b>分散(distributed)型</b>とは、<b>非中央集権(decentralized)</b>とも呼ばれ、コミュニティが多数のサーバーに分散して存在し、それらが相互に<b>通信(連合、federation)</b>することでコンテンツ共有<b>ネットワーク(Fediverse)</b>を形成していることが特徴のサービスです。 単一のサーバーしか存在しない、もしくは複数存在しても互いに独立している場合は中央集権なサービスと言われ、例えばTwitterやFacebookなどほとんどのサービスがそれに該当します。 分散型のメリットは、自分に合った運営者やテーマのサーバーを選択できることです。自分でサーバーを作成することもできます。連合するおかげで、どのサーバーを選んでも、同じコミュニティにアクセスできます。
+
+## 常にオープンソース
+Misskeyはこれまでもこれからも、オープンソースであり続けます。オープンソースとは、簡単に言うと<b>ソフトウェアのソースコード(プログラム)が公開されている</b>ことです。ソースコードの修正や再配布が可能であることを定義に含めることもあります。 Misskeyのすべてのソースコードは[AGPL](https://github.com/misskey-dev/misskey/blob/develop/LICENSE)というオープンソースライセンスの下に[公開](https://github.com/misskey-dev)されていて、誰でも自由に閲覧、使用、修正、改変、再配布をすることができます。 オープンソースは、自分で好きなように変えたり、有害な処理が含まれていないことを確認することができたり、誰でも開発に参加できるなどの、様々なメリットがあります。 上述の分散型を実現するためにも、オープンソースであるということは必要不可欠な要素です。 再び引き合いに出しますが、TwitterやFacebookなどの利益を得ているほとんどのサービスはオープンソースではありません。
+
+<div class="info">ℹ️ 技術的に言うと、MisskeyのソースコードはGitで管理されていて、リポジトリは<a href="https://github.com/misskey-dev" target="_blank">GitHub上でホスティングされています。</a></div>
+
+## 開発に参加する、プロジェクトを支援する
+Misskeyを気に入っていただけたら、ぜひプロジェクトを支援してください。プロジェクトに貢献するには、以下で紹介するようにいろいろな方法があります。方法によっては開発のスキルは不要なので、誰でも気軽に参加し貢献することができます。いつでもお待ちしています。
+
+### 機能を追加したり、バグを修正する
+ソフトウェアエンジニアのスキルをお持ちの方であれば、ソースコードを編集する形でプロジェクトに貢献することができます。 貢献についてのガイドは[こちら](https://github.com/misskey-dev/misskey/blob/develop/CONTRIBUTING.md)です。
+
+### 議論に参加する
+新しい機能、または既存の機能について意見を述べたり、不具合を報告したりすることでも貢献できます。 そのようなディスカッションは[GitHub](https://github.com/misskey-dev)上か、[フォーラム](https://forum.misskey.io/)等で行われます。
+
+### テキストを翻訳する
+Misskeyは様々な言語に対応しています(i18n -internationalizationの略- と呼ばれます)。元の言語は基本的に日本語ですが、有志によって他の言語へと翻訳されています。 その翻訳作業に加わっていただくことでもMisskeyに貢献できます。 Misskeyは[Crowdinというサービスを使用して翻訳の管理を行っています。](https://crowdin.com/project/misskey)
+
+### 感想を投稿する
+不具合報告等だけではなく、Misskeyの良い点、楽しい点といったポジティブな意見もぜひ共有してください。開発の励みになり、それは間接的ですがプロジェクトへの貢献です。
+
+### ミスキストを増やす
+ミスキストとは、Misskeyを使用する人のことです。 知り合いに紹介するなどしてMisskeyを広めていただければ、ミスキストが増え開発のモチベーションが上がります。
+
+### 寄付をする
+Misskeyはビジネスではなく、利用は無料であるため、収益は皆様からの寄付のみです。(インスタンスによっては広告収入を得ているような場合もありますが、それは運営者の収入であり直接開発者への収入にはなりません) 寄付をしていただければ、今後も開発を続けることが可能になり、プロジェクトへの貢献になります。 寄付は基本的には[Patreon](https://www.patreon.com/syuilo)で受け付けています。 一定額寄付していただけると、Misskeyの[情報ページ](/about-misskey)に名前を記載することができます。
+
+また、サーバーの運営者も、基本的には収益を得ていません。サーバーの運営にはコストがかかるので、運営者の支援をすることもご検討ください。 開発には直接関係しませんが、サーバーがあってこそのプロジェクトなので、運営が維持されるというのは開発と同じくらい重要なことです。
+
+## クレジット
+Misskeyの開発者や、Misskeyに寄付をしてくださった方の一覧は[こちら](/about-misskey)で見ることができます。
+
+## よくある質問
+### プロジェクトは何を目指していますか?
+強いて言うと、漠然的になりますが広く使われる汎用的なプラットフォームになることを目指しています。 Misskeyは他のプロジェクトとは違い、何らかの思想(例えば、反中央集権)やビジョンに基づいて開発が行われているわけではなく、その点ではフラットです。 それが逆に、特定の方向性に縛られないフレキシブルさを生み出すことに繋がっていると感じています。
+<!-- TODO: ここにロードマップへのリンク -->
+
+### 企業によって開発されていますか?
+いいえ。Misskeyの開発は個人で行われており、商業的でもないため、特定の企業の関りはありません。 開発メンバーも基本的にはボランティアです。 また、開発に対し企業のスポンサーがつくこともありますが、その場合でもやはり開発は個人のコミュニティが主体です。
+
+### 誰が運営していますか?
+Misskeyは分散型なため、各サーバーにそれぞれ異なった運営者がいます。従って、特定の個人や企業によって、Misskeyの全てが運営されているわけではありません。 また、開発チームが運営を行うわけでもないため、運営に関する連絡は、お使いのサーバーの運営者に行ってください。 サーバーの運営者は、[このページ](/about)で確認することができます。 あなたがサーバーを作成すれば、あなたが運営者になります。
+
+### どのサーバーを選べばいいですか?
+[サーバー一覧が公開されています。](https://join.misskey.page/ja-JP/instances) サーバーによってコミュニティのテーマ(特定のこと、ものが好き 等)が決められている場合があるので、自分に合ったテーマのサーバーがあれば、そこを選ぶと良いかもしれません。 他にも、サーバーの規模、ユーザー層、国および言語、運営者が信頼できるかどうか、などの観点があります。 なお、Misskey公式のサーバーというものはありません。自身で新しくサーバーを作成するという選択肢もあります。
+
+基本的にどのサーバーを選んだとしても、他の全てのサーバーのユーザーと繋がることができます。
+
+### サーバーを建てるにはどうしたらいいですか?
+Misskeyサーバーの作成に興味を持っていただきありがとうございます。 2021年現在、Misskeyのホスティングサービスは存在しないため、サーバーの作成にはある程度の知識が必要です。 サーバーの作成方法については[こちら](todo)をご覧ください。
+
+### どのような技術を使用していますか?
+Misskeyは開発が進むにつれ使用する技術も大きく変わってきました。開発当初はMySQL + PHP + jQueryといった構成でしたが、現在は以下のようになっています。
+- サーバーサイド: Node.js
+- データベース: PostgreSQL、Redis
+- UIフレームワーク: Vue.js
+- プログラミング言語: TypeScript
+
+また、MFMやAiScriptなどの、Misskeyから派生して独自の技術も開発しています。
+
+### Mastodonのフォークですか?
+いいえ。MisskeyはMastodonやその他のプロジェクトとは全く別のプロジェクトです。 開発に関しても、Misskeyの方が昔から開発されています。ただし、分散型になったのはMastodonの登場より後です。 同じAcitivityPubという分散のためのプロトコルを実装しているという点以外、両者に特に関りがあるわけでもありません。
+
+### iOS/Androidのアプリはありますか?
+公式にはそういったOSのネイティブアプリを開発していませんが、サードパーティ製のアプリがいくつかあります。 詳しくは[こちら](./apps)をご覧ください。
+
+ただ、サードパーティ製アプリはどうしても機能への対応が遅れてしまうため、とくに拘りがなければ公式のWebクライアントの利用をおすすめします。 なお、MisskeyのWebクライアントはPWAに対応しているので、ネイティブアプリのように動作させることも可能です。 詳しくは[こちら](todo)をご覧ください。
+
+### Misskeyのロゴ、アイコンはどこで入手できますか?
+(準備中)
+
+### 時折目にする猫耳の可愛い女の子は?
+Misskeyの守り神、藍ちゃんです。アイチャンカワイイヤッター!
+<div class="info">ℹ️ 藍ちゃんについては<a href="https://xn--931a.moe/" target="_blank">こちら</a>です。</div>
diff --git a/src/docs/zh-TW/general/report-issue.md b/src/docs/zh-TW/general/report-issue.md
new file mode 100644
index 0000000000..63527e32af
--- /dev/null
+++ b/src/docs/zh-TW/general/report-issue.md
@@ -0,0 +1,8 @@
+# 不具合の報告
+不具合と思われる状況に遭遇したときは、まず[トラブルシューティング](./troubleshooting)をご一読ください。 それでも問題が解決しないときは、以下の情報を含めて[フォーラム](https://forum.misskey.io/)に投稿してください。 投稿することで、解決策が見つかったり、不具合と判断されれば開発チームによって修正が行われます。
+
+## 含める情報
+- Misskeyのバージョン([情報ページ](/about)で確認できます)
+- お使いのブラウザの種類とバージョン
+- お使いのOSの種類とバージョン
+- 問題の再現手順
diff --git a/src/docs/zh-TW/general/troubleshooting.md b/src/docs/zh-TW/general/troubleshooting.md
new file mode 100644
index 0000000000..4a35091299
--- /dev/null
+++ b/src/docs/zh-TW/general/troubleshooting.md
@@ -0,0 +1,36 @@
+# トラブルシューティング
+<div class="info">ℹ️ <a href="./faq">よくある質問</a>も合わせてお役立てください。</div>
+
+問題が発生したときは、まずこちらをご確認ください。 該当する項目が無い、もしくは手順を試しても効果がない場合は、サーバーの管理者に連絡するか[不具合を報告](./report-issue)してください。
+
+## クライアントが起動しない
+ほとんどの場合、お使いのブラウザまたはOSのバージョンが古いことが原因です。 ブラウザおよびOSのバージョンを最新のものに更新してから、再度試してみてください。
+
+これは稀ですが、それでも起動しない場合は、キャッシュが原因の場合があります。ブラウザのキャッシュをクリアして、再度試してみてください。
+
+## ページが読み込めない
+クライアントが起動するもののページが読み込めないというエラーが出る場合は、ネットワークに問題がないか確認してください。また、サーバーがダウンしていないか確認してください。
+
+これは稀ですが、キャッシュが原因の場合があります。ブラウザのキャッシュをクリアして、再度試してみてください。
+
+まだ問題がある場合は、サーバーの問題と思われるのでサーバーの管理者に連絡してください。
+
+## クライアントの動作が遅い
+以下を試してみてください:
+
+- クライアント設定で「UIのアニメーションを減らす」を有効にする
+- クライアント設定で「モーダルにぼかし効果を使用」を無効にする
+- お使いのブラウザの設定でハードウェアアクセラレーションを有効にする
+- お使いのデバイスのスペックを上げる
+
+## 通知やアンテナ等の点滅が消えない
+点滅は、未読のコンテンツがあることを示しています。通常点滅が消えない場合は、コンテンツを遡ると未読なコンテンツが残っています。 すべて既読にしたと思われるのに、それでもなお点滅が続く場合(おそらく不具合と思われます)は設定から強制的にすべて既読扱いにすることができます。
+
+## Renoteができない
+フォロワー限定のノートはRenoteすることはできません。
+
+## UI上で特定の要素が表示されない
+広告ブロッカーを使用しているとそのような不具合が発生することがあります。Misskeyではオフにしてご利用ください。
+
+## UI上で未翻訳の部分がある
+ほとんどの場合、単に翻訳が間に合っていないだけで、不具合ではありません。翻訳が終わるまでお待ちください。 [翻訳に参加](./misskey)していただくことも可能です。
-- 
GitLab


From 6cfad65ac773cc850a41bf79d443e3666d83552c Mon Sep 17 00:00:00 2001
From: syuilo <Syuilotan@yahoo.co.jp>
Date: Sun, 8 Aug 2021 21:59:18 +0900
Subject: [PATCH 69/70] :art:

---
 src/client/components/ui/button.vue |  2 +-
 src/client/components/ui/menu.vue   |  4 ++--
 src/client/scripts/theme.ts         |  1 +
 src/client/style.scss               |  2 +-
 src/client/themes/_dark.json5       |  2 ++
 src/client/themes/_light.json5      |  2 ++
 src/client/themes/d-future.json5    | 25 +++++++++++++++++++++++++
 7 files changed, 34 insertions(+), 4 deletions(-)
 create mode 100644 src/client/themes/d-future.json5

diff --git a/src/client/components/ui/button.vue b/src/client/components/ui/button.vue
index 000f6302a0..4c5d617d76 100644
--- a/src/client/components/ui/button.vue
+++ b/src/client/components/ui/button.vue
@@ -142,7 +142,7 @@ export default defineComponent({
 
 	&.primary {
 		font-weight: bold;
-		color: #fff !important;
+		color: var(--fgOnAccent) !important;
 		background: var(--accent);
 
 		&:not(:disabled):hover {
diff --git a/src/client/components/ui/menu.vue b/src/client/components/ui/menu.vue
index eb96450774..8a1871e256 100644
--- a/src/client/components/ui/menu.vue
+++ b/src/client/components/ui/menu.vue
@@ -171,13 +171,13 @@ export default defineComponent({
 		}
 
 		&:hover {
-			color: #fff;
+			color: var(--fgOnAccent);
 			background: var(--accent);
 			text-decoration: none;
 		}
 
 		&:active {
-			color: #fff;
+			color: var(--fgOnAccent);
 			background: var(--accentDarken);
 		}
 
diff --git a/src/client/scripts/theme.ts b/src/client/scripts/theme.ts
index 09441c8a76..3fb5666a72 100644
--- a/src/client/scripts/theme.ts
+++ b/src/client/scripts/theme.ts
@@ -23,6 +23,7 @@ export const builtinThemes = [
 	require('@client/themes/d-dark.json5'),
 	require('@client/themes/d-persimmon.json5'),
 	require('@client/themes/d-astro.json5'),
+	require('@client/themes/d-future.json5'),
 	require('@client/themes/d-black.json5'),
 ] as Theme[];
 
diff --git a/src/client/style.scss b/src/client/style.scss
index 9127b6f238..25a30a36ff 100644
--- a/src/client/style.scss
+++ b/src/client/style.scss
@@ -319,7 +319,7 @@ hr {
 }
 
 ._popup {
-	background: var(--panel);
+	background: var(--popup);
 	border-radius: var(--radius);
 	contain: content;
 }
diff --git a/src/client/themes/_dark.json5 b/src/client/themes/_dark.json5
index fef8df4c7c..ca9994d5e9 100644
--- a/src/client/themes/_dark.json5
+++ b/src/client/themes/_dark.json5
@@ -19,6 +19,7 @@
 		fgTransparentWeak: ':alpha<0.75<@fg',
 		fgTransparent: ':alpha<0.5<@fg',
 		fgHighlighted: ':lighten<3<@fg',
+		fgOnAccent: '#fff',
 		divider: 'rgba(255, 255, 255, 0.1)',
 		indicator: '@accent',
 		panel: ':lighten<3<@bg',
@@ -28,6 +29,7 @@
 		panelHeaderDivider: 'rgba(0, 0, 0, 0)',
 		panelBorder: '" solid 1px var(--divider)',
 		acrylicPanel: ':alpha<0.5<@panel',
+		popup: ':lighten<3<@panel',
 		shadow: 'rgba(0, 0, 0, 0.3)',
 		header: ':alpha<0.7<@panel',
 		navBg: '@panel',
diff --git a/src/client/themes/_light.json5 b/src/client/themes/_light.json5
index 97f56c75f5..973a6251f0 100644
--- a/src/client/themes/_light.json5
+++ b/src/client/themes/_light.json5
@@ -19,6 +19,7 @@
 		fgTransparentWeak: ':alpha<0.75<@fg',
 		fgTransparent: ':alpha<0.5<@fg',
 		fgHighlighted: ':darken<3<@fg',
+		fgOnAccent: '#fff',
 		divider: 'rgba(0, 0, 0, 0.1)',
 		indicator: '@accent',
 		panel: ':lighten<3<@bg',
@@ -28,6 +29,7 @@
 		panelHeaderDivider: 'rgba(0, 0, 0, 0)',
 		panelBorder: '" solid 1px var(--divider)',
 		acrylicPanel: ':alpha<0.5<@panel',
+		popup: ':lighten<3<@panel',
 		shadow: 'rgba(0, 0, 0, 0.1)',
 		header: ':alpha<0.7<@panel',
 		navBg: '@panel',
diff --git a/src/client/themes/d-future.json5 b/src/client/themes/d-future.json5
new file mode 100644
index 0000000000..05ffe87bf0
--- /dev/null
+++ b/src/client/themes/d-future.json5
@@ -0,0 +1,25 @@
+{
+	id: '32a637ef-b47a-4775-bb7b-bacbb823f865',
+
+	name: 'Mi Future',
+	author: 'syuilo',
+
+	base: 'dark',
+
+	props: {
+		accent: '#63e2b7',
+		bg: '#101014',
+		fg: '#D5D5D6',
+		fgHighlighted: '#fff',
+		fgOnAccent: '#000',
+		divider: 'rgba(255, 255, 255, 0.1)',
+		panel: '#18181c',
+		panelHeaderBg: '@panel',
+		panelHeaderDivider: '@divider',
+		renote: '@accent',
+		mention: '#f2c97d',
+		mentionMe: '@accent',
+		hashtag: '#70c0e8',
+		link: '#e88080',
+	},
+}
-- 
GitLab


From 0cb04ded3683a2c312c2c73c77fbaf1a9bc269bb Mon Sep 17 00:00:00 2001
From: syuilo <Syuilotan@yahoo.co.jp>
Date: Sun, 8 Aug 2021 23:25:13 +0900
Subject: [PATCH 70/70] 12.85.0

---
 package.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/package.json b/package.json
index c89fe96103..af531145ea 100644
--- a/package.json
+++ b/package.json
@@ -1,7 +1,7 @@
 {
 	"name": "misskey",
 	"author": "syuilo <syuilotan@yahoo.co.jp>",
-	"version": "12.84.3",
+	"version": "12.85.0",
 	"codename": "indigo",
 	"repository": {
 		"type": "git",
-- 
GitLab