From 2de8e8c35803d77af1d6eae78d619f9b57c86bd7 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Wed, 29 Aug 2018 06:59:43 +0900
Subject: [PATCH] Fix bug

---
 src/client/app/init.ts                        |  4 +-
 src/docs/{about.en.md => about.en-US.md}      |  0
 src/docs/{about.ja.md => about.ja-JP.md}      |  0
 src/docs/{api.ja.md => api.ja-JP.md}          |  0
 src/docs/api/endpoints/view.pug               |  2 +-
 src/docs/api/entities/drive-file.yaml         | 52 +++++-----
 src/docs/api/entities/drive-folder.yaml       | 24 ++---
 src/docs/api/entities/note.yaml               | 98 +++++++++----------
 src/docs/api/entities/user.yaml               | 96 +++++++++---------
 src/docs/api/entities/view.pug                |  2 +-
 src/docs/api/mixins.pug                       |  2 +-
 src/docs/base.pug                             |  2 +-
 src/docs/{follow.ja.md => follow.ja-JP.md}    |  0
 src/docs/{mute.ja.md => mute.ja-JP.md}        |  0
 ...reversi-bot.ja.md => reversi-bot.ja-JP.md} |  0
 src/docs/{stream.ja.md => stream.ja-JP.md}    |  0
 .../{timelines.ja.md => timelines.ja-JP.md}   |  0
 src/server/api/endpoints/admin/invite.ts      |  2 +-
 .../api/endpoints/admin/suspend-user.ts       |  8 +-
 .../api/endpoints/admin/unsuspend-user.ts     |  8 +-
 .../api/endpoints/admin/unverify-user.ts      |  8 +-
 src/server/api/endpoints/admin/update-meta.ts |  4 +-
 src/server/api/endpoints/admin/verify-user.ts |  8 +-
 src/server/api/endpoints/drive.ts             |  4 +-
 src/server/api/endpoints/drive/files.ts       |  4 +-
 .../api/endpoints/drive/files/create.ts       | 10 +-
 .../api/endpoints/drive/files/delete.ts       |  4 +-
 src/server/api/endpoints/drive/files/show.ts  |  4 +-
 .../api/endpoints/drive/files/update.ts       | 16 +--
 .../endpoints/drive/files/upload_from_url.ts  |  2 +-
 src/server/api/endpoints/drive/folders.ts     |  4 +-
 .../api/endpoints/drive/folders/create.ts     |  4 +-
 .../api/endpoints/drive/folders/show.ts       |  2 +-
 .../api/endpoints/drive/folders/update.ts     |  4 +-
 src/server/api/endpoints/following/create.ts  |  4 +-
 src/server/api/endpoints/following/delete.ts  |  4 +-
 .../endpoints/following/requests/accept.ts    |  4 +-
 .../endpoints/following/requests/cancel.ts    |  4 +-
 .../api/endpoints/following/requests/list.ts  |  4 +-
 .../endpoints/following/requests/reject.ts    |  4 +-
 src/server/api/endpoints/following/stalk.ts   |  4 +-
 src/server/api/endpoints/following/unstalk.ts |  4 +-
 .../games/reversi/games/surrender.ts          |  4 +-
 src/server/api/endpoints/hashtags/search.ts   |  8 +-
 src/server/api/endpoints/i.ts                 |  2 +-
 src/server/api/endpoints/i/favorites.ts       |  4 +-
 src/server/api/endpoints/i/update.ts          |  4 +-
 src/server/api/endpoints/messaging/history.ts |  4 +-
 .../api/endpoints/messaging/messages.ts       |  4 +-
 .../endpoints/messaging/messages/create.ts    |  4 +-
 .../api/endpoints/messaging/messages/read.ts  |  8 +-
 src/server/api/endpoints/mute/create.ts       |  4 +-
 src/server/api/endpoints/mute/delete.ts       |  4 +-
 src/server/api/endpoints/mute/list.ts         |  4 +-
 src/server/api/endpoints/my/apps.ts           |  4 +-
 src/server/api/endpoints/notes/create.ts      | 22 ++---
 src/server/api/endpoints/notes/delete.ts      |  4 +-
 .../api/endpoints/notes/favorites/create.ts   |  4 +-
 .../api/endpoints/notes/favorites/delete.ts   |  4 +-
 .../api/endpoints/notes/hybrid-timeline.ts    | 20 ++--
 src/server/api/endpoints/notes/mentions.ts    |  4 +-
 .../endpoints/notes/polls/recommendation.ts   |  4 +-
 src/server/api/endpoints/notes/polls/vote.ts  |  4 +-
 src/server/api/endpoints/notes/reactions.ts   |  4 +-
 .../api/endpoints/notes/reactions/create.ts   |  8 +-
 .../api/endpoints/notes/reactions/delete.ts   |  4 +-
 src/server/api/endpoints/notes/timeline.ts    | 22 ++---
 src/server/api/endpoints/notes/trend.ts       |  4 +-
 .../api/endpoints/notes/user-list-timeline.ts | 24 ++---
 .../notifications/mark_all_as_read.ts         |  4 +-
 .../api/endpoints/users/lists/create.ts       |  4 +-
 src/server/api/endpoints/users/lists/list.ts  |  2 +-
 src/server/api/endpoints/users/lists/push.ts  |  4 +-
 src/server/api/endpoints/users/lists/show.ts  |  4 +-
 .../api/endpoints/users/recommendation.ts     |  2 +-
 src/server/api/endpoints/users/search.ts      | 10 +-
 76 files changed, 315 insertions(+), 315 deletions(-)
 rename src/docs/{about.en.md => about.en-US.md} (100%)
 rename src/docs/{about.ja.md => about.ja-JP.md} (100%)
 rename src/docs/{api.ja.md => api.ja-JP.md} (100%)
 rename src/docs/{follow.ja.md => follow.ja-JP.md} (100%)
 rename src/docs/{mute.ja.md => mute.ja-JP.md} (100%)
 rename src/docs/{reversi-bot.ja.md => reversi-bot.ja-JP.md} (100%)
 rename src/docs/{stream.ja.md => stream.ja-JP.md} (100%)
 rename src/docs/{timelines.ja.md => timelines.ja-JP.md} (100%)

diff --git a/src/client/app/init.ts b/src/client/app/init.ts
index 18f510ea24..cf97957400 100644
--- a/src/client/app/init.ts
+++ b/src/client/app/init.ts
@@ -19,8 +19,8 @@ import { version, codename, lang } from './config';
 
 let elementLocale;
 switch (lang) {
-	case 'ja': elementLocale = ElementLocaleJa; break;
-	case 'en': elementLocale = ElementLocaleEn; break;
+	case 'ja-JP': elementLocale = ElementLocaleJa; break;
+	case 'en-US': elementLocale = ElementLocaleEn; break;
 	default: elementLocale = ElementLocaleEn; break;
 }
 
diff --git a/src/docs/about.en.md b/src/docs/about.en-US.md
similarity index 100%
rename from src/docs/about.en.md
rename to src/docs/about.en-US.md
diff --git a/src/docs/about.ja.md b/src/docs/about.ja-JP.md
similarity index 100%
rename from src/docs/about.ja.md
rename to src/docs/about.ja-JP.md
diff --git a/src/docs/api.ja.md b/src/docs/api.ja-JP.md
similarity index 100%
rename from src/docs/api.ja.md
rename to src/docs/api.ja-JP.md
diff --git a/src/docs/api/endpoints/view.pug b/src/docs/api/endpoints/view.pug
index 76e1183302..be7e84faa1 100644
--- a/src/docs/api/endpoints/view.pug
+++ b/src/docs/api/endpoints/view.pug
@@ -15,7 +15,7 @@ block main
 		span.path= endpointUrl.path
 
 	if endpoint.desc
-		p#desc= endpoint.desc[lang] || endpoint.desc['ja']
+		p#desc= endpoint.desc[lang] || endpoint.desc['ja-JP']
 
 	if endpoint.requireCredential
 		div.ui.info: p
diff --git a/src/docs/api/entities/drive-file.yaml b/src/docs/api/entities/drive-file.yaml
index 62dbec363a..0c2195ac08 100644
--- a/src/docs/api/entities/drive-file.yaml
+++ b/src/docs/api/entities/drive-file.yaml
@@ -1,90 +1,90 @@
 name: "DriveFile"
 
 desc:
-  ja: "ドライブのファイル。"
-  en: "A file of Drive."
+  ja-JP: "ドライブのファイル。"
+  en-US: "A file of Drive."
 
 props:
   id:
     type: "id"
     optional: false
     desc:
-      ja: "ファイルID"
-      en: "The ID of this file"
+      ja-JP: "ファイルID"
+      en-US: "The ID of this file"
 
   createdAt:
     type: "date"
     optional: false
     desc:
-      ja: "アップロード日時"
-      en: "The upload date of this file"
+      ja-JP: "アップロード日時"
+      en-US: "The upload date of this file"
 
   userId:
     type: "id(User)"
     optional: false
     desc:
-      ja: "所有者ID"
-      en: "The ID of the owner of this file"
+      ja-JP: "所有者ID"
+      en-US: "The ID of the owner of this file"
 
   user:
     type: "entity(User)"
     optional: true
     desc:
-      ja: "所有者"
-      en: "The owner of this file"
+      ja-JP: "所有者"
+      en-US: "The owner of this file"
 
   name:
     type: "string"
     optional: false
     desc:
-      ja: "ファイル名"
-      en: "The name of this file"
+      ja-JP: "ファイル名"
+      en-US: "The name of this file"
 
   md5:
     type: "string"
     optional: false
     desc:
-      ja: "ファイルのMD5ハッシュ値"
-      en: "The md5 hash value of this file"
+      ja-JP: "ファイルのMD5ハッシュ値"
+      en-US: "The md5 hash value of this file"
 
   type:
     type: "string"
     optional: false
     desc:
-      ja: "ファイルの種類"
-      en: "The type of this file"
+      ja-JP: "ファイルの種類"
+      en-US: "The type of this file"
 
   datasize:
     type: "number"
     optional: false
     desc:
-      ja: "ファイルサイズ(bytes)"
-      en: "The size of this file (bytes)"
+      ja-JP: "ファイルサイズ(bytes)"
+      en-US: "The size of this file (bytes)"
 
   url:
     type: "string"
     optional: false
     desc:
-      ja: "ファイルのURL"
-      en: "The URL of this file"
+      ja-JP: "ファイルのURL"
+      en-US: "The URL of this file"
 
   folderId:
     type: "id(DriveFolder)"
     optional: true
     desc:
-      ja: "フォルダID"
-      en: "The ID of the folder of this file"
+      ja-JP: "フォルダID"
+      en-US: "The ID of the folder of this file"
 
   folder:
     type: "entity(DriveFolder)"
     optional: true
     desc:
-      ja: "フォルダ"
-      en: "The folder of this file"
+      ja-JP: "フォルダ"
+      en-US: "The folder of this file"
 
   isSensitive:
     type: "boolean"
     optional: true
     desc:
-      ja: "このメディアが「閲覧注意」(NSFW)かどうか"
-      en: "Whether this media is NSFW"
+      ja-JP: "このメディアが「閲覧注意」(NSFW)かどうか"
+      en-US: "Whether this media is NSFW"
diff --git a/src/docs/api/entities/drive-folder.yaml b/src/docs/api/entities/drive-folder.yaml
index 0fb8308dd4..e3dfd2ca01 100644
--- a/src/docs/api/entities/drive-folder.yaml
+++ b/src/docs/api/entities/drive-folder.yaml
@@ -1,41 +1,41 @@
 name: "DriveFolder"
 
 desc:
-  ja: "ドライブのフォルダを表します。"
-  en: "A folder of Drive."
+  ja-JP: "ドライブのフォルダを表します。"
+  en-US: "A folder of Drive."
 
 props:
   id:
     type: "id"
     optional: false
     desc:
-      ja: "フォルダID"
-      en: "The ID of this folder"
+      ja-JP: "フォルダID"
+      en-US: "The ID of this folder"
 
   createdAt:
     type: "date"
     optional: false
     desc:
-      ja: "作成日時"
-      en: "The created date of this folder"
+      ja-JP: "作成日時"
+      en-US: "The created date of this folder"
 
   userId:
     type: "id(User)"
     optional: false
     desc:
-      ja: "所有者ID"
-      en: "The ID of the owner of this folder"
+      ja-JP: "所有者ID"
+      en-US: "The ID of the owner of this folder"
 
   parentId:
     type: "entity(DriveFolder)"
     optional: false
     desc:
-      ja: "親フォルダのID (ルートなら null)"
-      en: "The ID of parent folder"
+      ja-JP: "親フォルダのID (ルートなら null)"
+      en-US: "The ID of parent folder"
 
   name:
     type: "string"
     optional: false
     desc:
-      ja: "フォルダ名"
-      en: "The name of this folder"
+      ja-JP: "フォルダ名"
+      en-US: "The name of this folder"
diff --git a/src/docs/api/entities/note.yaml b/src/docs/api/entities/note.yaml
index 04cb3c9824..cae9a53f82 100644
--- a/src/docs/api/entities/note.yaml
+++ b/src/docs/api/entities/note.yaml
@@ -1,190 +1,190 @@
 name: "Note"
 
 desc:
-  ja: "投稿。"
-  en: "A note."
+  ja-JP: "投稿。"
+  en-US: "A note."
 
 props:
   id:
     type: "id"
     optional: false
     desc:
-      ja: "投稿ID"
-      en: "The ID of this note"
+      ja-JP: "投稿ID"
+      en-US: "The ID of this note"
 
   createdAt:
     type: "date"
     optional: false
     desc:
-      ja: "投稿日時"
-      en: "The posted date of this note"
+      ja-JP: "投稿日時"
+      en-US: "The posted date of this note"
 
   viaMobile:
     type: "boolean"
     optional: true
     desc:
-      ja: "モバイル端末から投稿したか否か(自己申告であることに留意)"
-      en: "Whether this note sent via a mobile device"
+      ja-JP: "モバイル端末から投稿したか否か(自己申告であることに留意)"
+      en-US: "Whether this note sent via a mobile device"
 
   text:
     type: "string"
     optional: true
     desc:
-      ja: "投稿の本文"
-      en: "The text of this note"
+      ja-JP: "投稿の本文"
+      en-US: "The text of this note"
 
   mediaIds:
     type: "id(DriveFile)[]"
     optional: true
     desc:
-      ja: "添付されているメディアのID (なければレスポンスでは空配列)"
-      en: "The IDs of the attached media (empty array for response if no media is attached)"
+      ja-JP: "添付されているメディアのID (なければレスポンスでは空配列)"
+      en-US: "The IDs of the attached media (empty array for response if no media is attached)"
 
   media:
     type: "entity(DriveFile)[]"
     optional: true
     desc:
-      ja: "添付されているメディア"
-      en: "The attached media"
+      ja-JP: "添付されているメディア"
+      en-US: "The attached media"
 
   userId:
     type: "id(User)"
     optional: false
     desc:
-      ja: "投稿者ID"
-      en: "The ID of author of this note"
+      ja-JP: "投稿者ID"
+      en-US: "The ID of author of this note"
 
   user:
     type: "entity(User)"
     optional: true
     desc:
-      ja: "投稿者"
-      en: "The author of this note"
+      ja-JP: "投稿者"
+      en-US: "The author of this note"
 
   myReaction:
     type: "string"
     optional: true
     desc:
-      ja: "この投稿に対する自分の<a href='/docs/api/reactions'>リアクション</a>"
-      en: "The your <a href='/docs/api/reactions'>reaction</a> of this note"
+      ja-JP: "この投稿に対する自分の<a href='/docs/api/reactions'>リアクション</a>"
+      en-US: "The your <a href='/docs/api/reactions'>reaction</a> of this note"
 
   reactionCounts:
     type: "object"
     optional: false
     desc:
-      ja: "<a href='/docs/api/reactions'>リアクション</a>をキーとし、この投稿に対するそのリアクションの数を値としたオブジェクト"
+      ja-JP: "<a href='/docs/api/reactions'>リアクション</a>をキーとし、この投稿に対するそのリアクションの数を値としたオブジェクト"
 
   replyId:
     type: "id(Note)"
     optional: true
     desc:
-      ja: "返信した投稿のID"
-      en: "The ID of the replyed note"
+      ja-JP: "返信した投稿のID"
+      en-US: "The ID of the replyed note"
 
   reply:
     type: "entity(Note)"
     optional: true
     desc:
-      ja: "返信した投稿"
-      en: "The replyed note"
+      ja-JP: "返信した投稿"
+      en-US: "The replyed note"
 
   renoteId:
     type: "id(Note)"
     optional: true
     desc:
-      ja: "引用した投稿のID"
-      en: "The ID of the quoted note"
+      ja-JP: "引用した投稿のID"
+      en-US: "The ID of the quoted note"
 
   renote:
     type: "entity(Note)"
     optional: true
     desc:
-      ja: "引用した投稿"
-      en: "The quoted note"
+      ja-JP: "引用した投稿"
+      en-US: "The quoted note"
 
   poll:
     type: "object"
     optional: true
     desc:
-      ja: "投票"
-      en: "The poll"
+      ja-JP: "投票"
+      en-US: "The poll"
 
     props:
       choices:
         type: "object[]"
         optional: false
         desc:
-          ja: "投票の選択肢"
-          en: "The choices of this poll"
+          ja-JP: "投票の選択肢"
+          en-US: "The choices of this poll"
 
         props:
           id:
             type: "number"
             optional: false
             desc:
-              ja: "選択肢ID"
-              en: "The ID of this choice"
+              ja-JP: "選択肢ID"
+              en-US: "The ID of this choice"
 
           isVoted:
             type: "boolean"
             optional: true
             desc:
-              ja: "自分がこの選択肢に投票したかどうか"
-              en: "Whether you voted to this choice"
+              ja-JP: "自分がこの選択肢に投票したかどうか"
+              en-US: "Whether you voted to this choice"
 
           text:
             type: "string"
             optional: false
             desc:
-              ja: "選択肢本文"
-              en: "The text of this choice"
+              ja-JP: "選択肢本文"
+              en-US: "The text of this choice"
 
           votes:
             type: "number"
             optional: false
             desc:
-              ja: "この選択肢に投票された数"
-              en: "The number voted for this choice"
+              ja-JP: "この選択肢に投票された数"
+              en-US: "The number voted for this choice"
   geo:
     type: "object"
     optional: true
     desc:
-      ja: "位置情報"
-      en: "Geo location"
+      ja-JP: "位置情報"
+      en-US: "Geo location"
 
     props:
       coordinates:
         type: "number[]"
         optional: false
         desc:
-          ja: "座標。最初に経度:-180〜180で表す。最後に緯度:-90〜90で表す。"
+          ja-JP: "座標。最初に経度:-180〜180で表す。最後に緯度:-90〜90で表す。"
 
       altitude:
         type: "number"
         optional: false
         desc:
-          ja: "高度。メートル単位で表す。"
+          ja-JP: "高度。メートル単位で表す。"
 
       accuracy:
         type: "number"
         optional: false
         desc:
-          ja: "緯度、経度の精度。メートル単位で表す。"
+          ja-JP: "緯度、経度の精度。メートル単位で表す。"
 
       altitudeAccuracy:
         type: "number"
         optional: false
         desc:
-          ja: "高度の精度。メートル単位で表す。"
+          ja-JP: "高度の精度。メートル単位で表す。"
 
       heading:
         type: "number"
         optional: false
         desc:
-          ja: "方角。0〜360の角度で表す。0が北、90が東、180が南、270が西。"
+          ja-JP: "方角。0〜360の角度で表す。0が北、90が東、180が南、270が西。"
 
       speed:
         type: "number"
         optional: false
         desc:
-          ja: "速度。メートル / 秒数で表す。"
+          ja-JP: "速度。メートル / 秒数で表す。"
diff --git a/src/docs/api/entities/user.yaml b/src/docs/api/entities/user.yaml
index c245974568..c90b55ee88 100644
--- a/src/docs/api/entities/user.yaml
+++ b/src/docs/api/entities/user.yaml
@@ -1,174 +1,174 @@
 name: "User"
 
 desc:
-  ja: "ユーザー。"
-  en: "A user."
+  ja-JP: "ユーザー。"
+  en-US: "A user."
 
 props:
   id:
     type: "id"
     optional: false
     desc:
-      ja: "ユーザーID"
-      en: "The ID of this user"
+      ja-JP: "ユーザーID"
+      en-US: "The ID of this user"
 
   createdAt:
     type: "date"
     optional: false
     desc:
-      ja: "アカウント作成日時"
-      en: "The registered date of this user"
+      ja-JP: "アカウント作成日時"
+      en-US: "The registered date of this user"
 
   username:
     type: "string"
     optional: false
     desc:
-      ja: "ユーザー名"
-      en: "The username of this user"
+      ja-JP: "ユーザー名"
+      en-US: "The username of this user"
 
   description:
     type: "string"
     optional: false
     desc:
-      ja: "アカウントの説明(自己紹介)"
-      en: "The description of this user"
+      ja-JP: "アカウントの説明(自己紹介)"
+      en-US: "The description of this user"
 
   avatarId:
     type: "id(DriveFile)"
     optional: true
     desc:
-      ja: "アバターのID"
-      en: "The ID of the avatar of this user"
+      ja-JP: "アバターのID"
+      en-US: "The ID of the avatar of this user"
 
   avatarUrl:
     type: "string"
     optional: false
     desc:
-      ja: "アバターのURL"
-      en: "The URL of the avatar of this user"
+      ja-JP: "アバターのURL"
+      en-US: "The URL of the avatar of this user"
 
   bannerId:
     type: "id(DriveFile)"
     optional: true
     desc:
-      ja: "バナーのID"
-      en: "The ID of the banner of this user"
+      ja-JP: "バナーのID"
+      en-US: "The ID of the banner of this user"
 
   bannerUrl:
     type: "string"
     optional: false
     desc:
-      ja: "バナーのURL"
-      en: "The URL of the banner of this user"
+      ja-JP: "バナーのURL"
+      en-US: "The URL of the banner of this user"
 
   followersCount:
     type: "number"
     optional: false
     desc:
-      ja: "フォロワーの数"
-      en: "The number of the followers for this user"
+      ja-JP: "フォロワーの数"
+      en-US: "The number of the followers for this user"
 
   followingCount:
     type: "number"
     optional: false
     desc:
-      ja: "フォローしているユーザーの数"
-      en: "The number of the following users for this user"
+      ja-JP: "フォローしているユーザーの数"
+      en-US: "The number of the following users for this user"
 
   isFollowing:
     type: "boolean"
     optional: true
     desc:
-      ja: "自分がこのユーザーをフォローしているか"
+      ja-JP: "自分がこのユーザーをフォローしているか"
 
   isFollowed:
     type: "boolean"
     optional: true
     desc:
-      ja: "自分がこのユーザーにフォローされているか"
+      ja-JP: "自分がこのユーザーにフォローされているか"
 
   isMuted:
     type: "boolean"
     optional: true
     desc:
-      ja: "自分がこのユーザーをミュートしているか"
-      en: "Whether you muted this user"
+      ja-JP: "自分がこのユーザーをミュートしているか"
+      en-US: "Whether you muted this user"
 
   notesCount:
     type: "number"
     optional: false
     desc:
-      ja: "投稿の数"
-      en: "The number of the notes of this user"
+      ja-JP: "投稿の数"
+      en-US: "The number of the notes of this user"
 
   pinnedNote:
     type: "entity(Note)"
     optional: true
     desc:
-      ja: "ピン留めされた投稿"
-      en: "The pinned note of this user"
+      ja-JP: "ピン留めされた投稿"
+      en-US: "The pinned note of this user"
 
   pinnedNoteId:
     type: "id(Note)"
     optional: true
     desc:
-      ja: "ピン留めされた投稿のID"
-      en: "The ID of the pinned note of this user"
+      ja-JP: "ピン留めされた投稿のID"
+      en-US: "The ID of the pinned note of this user"
 
   host:
     type: "string | null"
     optional: false
     desc:
-      ja: "ホスト (例: example.com:3000)"
-      en: "Host (e.g. example.com:3000)"
+      ja-JP: "ホスト (例: example.com:3000)"
+      en-US: "Host (e.g. example.com:3000)"
 
   twitter:
     type: "object"
     optional: true
     desc:
-      ja: "連携されているTwitterアカウント情報"
-      en: "The info of the connected twitter account of this user"
+      ja-JP: "連携されているTwitterアカウント情報"
+      en-US: "The info of the connected twitter account of this user"
 
     props:
       userId:
         type: "string"
         optional: false
         desc:
-          ja: "ユーザーID"
-          en: "The user ID"
+          ja-JP: "ユーザーID"
+          en-US: "The user ID"
 
       screenName:
         type: "string"
         optional: false
         desc:
-          ja: "ユーザー名"
-          en: "The screen name of this user"
+          ja-JP: "ユーザー名"
+          en-US: "The screen name of this user"
 
   isBot:
     type: "boolean"
     optional: true
     desc:
-      ja: "botか否か(自己申告であることに留意)"
-      en: "Whether is bot or not"
+      ja-JP: "botか否か(自己申告であることに留意)"
+      en-US: "Whether is bot or not"
 
   profile:
     type: "object"
     optional: false
     desc:
-      ja: "プロフィール"
-      en: "The profile of this user"
+      ja-JP: "プロフィール"
+      en-US: "The profile of this user"
 
     props:
       location:
         type: "string"
         optional: true
         desc:
-          ja: "場所"
-          en: "The location of this user"
+          ja-JP: "場所"
+          en-US: "The location of this user"
 
       birthday:
         type: "string"
         optional: true
         desc:
-          ja: "誕生日 (YYYY-MM-DD)"
-          en: "The birthday of this user (YYYY-MM-DD)"
+          ja-JP: "誕生日 (YYYY-MM-DD)"
+          en-US: "The birthday of this user (YYYY-MM-DD)"
diff --git a/src/docs/api/entities/view.pug b/src/docs/api/entities/view.pug
index d5c192f438..1f166d053c 100644
--- a/src/docs/api/entities/view.pug
+++ b/src/docs/api/entities/view.pug
@@ -7,7 +7,7 @@ block meta
 block main
 	h1= name
 
-	p#desc= desc[lang] || desc['ja']
+	p#desc= desc[lang] || desc['ja-JP']
 
 	section
 		h2= i18n('docs.api.entities.properties')
diff --git a/src/docs/api/mixins.pug b/src/docs/api/mixins.pug
index 925aab2934..563739d52b 100644
--- a/src/docs/api/mixins.pug
+++ b/src/docs/api/mixins.pug
@@ -31,4 +31,4 @@ mixin propTable(props)
 					td.name= prop.name
 					td.type
 						+type(prop)
-					td.desc!= prop.desc ? prop.desc[lang] || prop.desc['ja'] : null
+					td.desc!= prop.desc ? prop.desc[lang] || prop.desc['ja-JP'] : null
diff --git a/src/docs/base.pug b/src/docs/base.pug
index aeafaeffff..26f19ddf09 100644
--- a/src/docs/base.pug
+++ b/src/docs/base.pug
@@ -16,7 +16,7 @@ html(lang= lang)
 		nav
 			ul
 				each doc in docs
-					li: a(href=`/docs/${lang}/${doc.name}`)= doc.title[lang] || doc.title['ja']
+					li: a(href=`/docs/${lang}/${doc.name}`)= doc.title[lang] || doc.title['ja-JP']
 			section
 				h2 API
 				ul
diff --git a/src/docs/follow.ja.md b/src/docs/follow.ja-JP.md
similarity index 100%
rename from src/docs/follow.ja.md
rename to src/docs/follow.ja-JP.md
diff --git a/src/docs/mute.ja.md b/src/docs/mute.ja-JP.md
similarity index 100%
rename from src/docs/mute.ja.md
rename to src/docs/mute.ja-JP.md
diff --git a/src/docs/reversi-bot.ja.md b/src/docs/reversi-bot.ja-JP.md
similarity index 100%
rename from src/docs/reversi-bot.ja.md
rename to src/docs/reversi-bot.ja-JP.md
diff --git a/src/docs/stream.ja.md b/src/docs/stream.ja-JP.md
similarity index 100%
rename from src/docs/stream.ja.md
rename to src/docs/stream.ja-JP.md
diff --git a/src/docs/timelines.ja.md b/src/docs/timelines.ja-JP.md
similarity index 100%
rename from src/docs/timelines.ja.md
rename to src/docs/timelines.ja-JP.md
diff --git a/src/server/api/endpoints/admin/invite.ts b/src/server/api/endpoints/admin/invite.ts
index 77608e715c..892b2579f2 100644
--- a/src/server/api/endpoints/admin/invite.ts
+++ b/src/server/api/endpoints/admin/invite.ts
@@ -3,7 +3,7 @@ import RegistrationTicket from '../../../../models/registration-tickets';
 
 export const meta = {
 	desc: {
-		ja: '招待コードを発行します。'
+		'ja-JP': '招待コードを発行します。'
 	},
 
 	requireCredential: true,
diff --git a/src/server/api/endpoints/admin/suspend-user.ts b/src/server/api/endpoints/admin/suspend-user.ts
index 9b492c6e15..32c2416fb5 100644
--- a/src/server/api/endpoints/admin/suspend-user.ts
+++ b/src/server/api/endpoints/admin/suspend-user.ts
@@ -5,8 +5,8 @@ import User from '../../../../models/user';
 
 export const meta = {
 	desc: {
-		ja: '指定したユーザーを凍結します。',
-		en: 'Suspend a user.'
+		'ja-JP': '指定したユーザーを凍結します。',
+		'en-US': 'Suspend a user.'
 	},
 
 	requireCredential: true,
@@ -15,8 +15,8 @@ export const meta = {
 	params: {
 		userId: $.type(ID).note({
 			desc: {
-				ja: '対象のユーザーID',
-				en: 'The user ID which you want to suspend'
+				'ja-JP': '対象のユーザーID',
+				'en-US': 'The user ID which you want to suspend'
 			}
 		}),
 	}
diff --git a/src/server/api/endpoints/admin/unsuspend-user.ts b/src/server/api/endpoints/admin/unsuspend-user.ts
index 8409bd1b76..879c23ab14 100644
--- a/src/server/api/endpoints/admin/unsuspend-user.ts
+++ b/src/server/api/endpoints/admin/unsuspend-user.ts
@@ -5,8 +5,8 @@ import User from '../../../../models/user';
 
 export const meta = {
 	desc: {
-		ja: '指定したユーザーの凍結を解除します。',
-		en: 'Unsuspend a user.'
+		'ja-JP': '指定したユーザーの凍結を解除します。',
+		'en-US': 'Unsuspend a user.'
 	},
 
 	requireCredential: true,
@@ -15,8 +15,8 @@ export const meta = {
 	params: {
 		userId: $.type(ID).note({
 			desc: {
-				ja: '対象のユーザーID',
-				en: 'The user ID which you want to unsuspend'
+				'ja-JP': '対象のユーザーID',
+				'en-US': 'The user ID which you want to unsuspend'
 			}
 		}),
 	}
diff --git a/src/server/api/endpoints/admin/unverify-user.ts b/src/server/api/endpoints/admin/unverify-user.ts
index 34653cd78a..178049fa1d 100644
--- a/src/server/api/endpoints/admin/unverify-user.ts
+++ b/src/server/api/endpoints/admin/unverify-user.ts
@@ -5,8 +5,8 @@ import User from '../../../../models/user';
 
 export const meta = {
 	desc: {
-		ja: '指定したユーザーの公式アカウントを解除します。',
-		en: 'Mark a user as unverified.'
+		'ja-JP': '指定したユーザーの公式アカウントを解除します。',
+		'en-US': 'Mark a user as unverified.'
 	},
 
 	requireCredential: true,
@@ -15,8 +15,8 @@ export const meta = {
 	params: {
 		userId: $.type(ID).note({
 			desc: {
-				ja: '対象のユーザーID',
-				en: 'The user ID which you want to unverify'
+				'ja-JP': '対象のユーザーID',
+				'en-US': 'The user ID which you want to unverify'
 			}
 		}),
 	}
diff --git a/src/server/api/endpoints/admin/update-meta.ts b/src/server/api/endpoints/admin/update-meta.ts
index bfcab9d6a6..2c7929fabe 100644
--- a/src/server/api/endpoints/admin/update-meta.ts
+++ b/src/server/api/endpoints/admin/update-meta.ts
@@ -4,7 +4,7 @@ import getParams from '../../get-params';
 
 export const meta = {
 	desc: {
-		ja: 'インスタンスの設定を更新します。'
+		'ja-JP': 'インスタンスの設定を更新します。'
 	},
 
 	requireCredential: true,
@@ -13,7 +13,7 @@ export const meta = {
 	params: {
 		disableRegistration: $.bool.optional.nullable.note({
 			desc: {
-				ja: '招待制か否か'
+				'ja-JP': '招待制か否か'
 			}
 		}),
 	}
diff --git a/src/server/api/endpoints/admin/verify-user.ts b/src/server/api/endpoints/admin/verify-user.ts
index 5b826eb1c3..dd07684ded 100644
--- a/src/server/api/endpoints/admin/verify-user.ts
+++ b/src/server/api/endpoints/admin/verify-user.ts
@@ -5,8 +5,8 @@ import User from '../../../../models/user';
 
 export const meta = {
 	desc: {
-		ja: '指定したユーザーを公式アカウントにします。',
-		en: 'Mark a user as verified.'
+		'ja-JP': '指定したユーザーを公式アカウントにします。',
+		'en-US': 'Mark a user as verified.'
 	},
 
 	requireCredential: true,
@@ -15,8 +15,8 @@ export const meta = {
 	params: {
 		userId: $.type(ID).note({
 			desc: {
-				ja: '対象のユーザーID',
-				en: 'The user ID which you want to verify'
+				'ja-JP': '対象のユーザーID',
+				'en-US': 'The user ID which you want to verify'
 			}
 		}),
 	}
diff --git a/src/server/api/endpoints/drive.ts b/src/server/api/endpoints/drive.ts
index 8ad961494f..063cd475d4 100644
--- a/src/server/api/endpoints/drive.ts
+++ b/src/server/api/endpoints/drive.ts
@@ -4,8 +4,8 @@ import config from '../../../config';
 
 export const meta = {
 	desc: {
-		ja: 'ドライブの情報を取得します。',
-		en: 'Get drive information.'
+		'ja-JP': 'ドライブの情報を取得します。',
+		'en-US': 'Get drive information.'
 	},
 
 	requireCredential: true,
diff --git a/src/server/api/endpoints/drive/files.ts b/src/server/api/endpoints/drive/files.ts
index 063b4adde1..dc6a602e10 100644
--- a/src/server/api/endpoints/drive/files.ts
+++ b/src/server/api/endpoints/drive/files.ts
@@ -4,8 +4,8 @@ import { ILocalUser } from '../../../../models/user';
 
 export const meta = {
 	desc: {
-		ja: 'ドライブのファイル一覧を取得します。',
-		en: 'Get files of drive.'
+		'ja-JP': 'ドライブのファイル一覧を取得します。',
+		'en-US': 'Get files of drive.'
 	},
 
 	requireCredential: true,
diff --git a/src/server/api/endpoints/drive/files/create.ts b/src/server/api/endpoints/drive/files/create.ts
index 41b7e04b46..dfbd11d0c2 100644
--- a/src/server/api/endpoints/drive/files/create.ts
+++ b/src/server/api/endpoints/drive/files/create.ts
@@ -8,8 +8,8 @@ import getParams from '../../../get-params';
 
 export const meta = {
 	desc: {
-		ja: 'ドライブにファイルをアップロードします。',
-		en: 'Upload a file to drive.'
+		'ja-JP': 'ドライブにファイルをアップロードします。',
+		'en-US': 'Upload a file to drive.'
 	},
 
 	requireCredential: true,
@@ -27,15 +27,15 @@ export const meta = {
 		folderId: $.type(ID).optional.nullable.note({
 			default: null,
 			desc: {
-				ja: 'フォルダID'
+				'ja-JP': 'フォルダID'
 			}
 		}),
 
 		isSensitive: $.bool.optional.note({
 			default: false,
 			desc: {
-				ja: 'このメディアが「閲覧注意」(NSFW)かどうか',
-				en: 'Whether this media is NSFW'
+				'ja-JP': 'このメディアが「閲覧注意」(NSFW)かどうか',
+				'en-US': 'Whether this media is NSFW'
 			}
 		})
 	}
diff --git a/src/server/api/endpoints/drive/files/delete.ts b/src/server/api/endpoints/drive/files/delete.ts
index 02cd96dd8f..fb7340df38 100644
--- a/src/server/api/endpoints/drive/files/delete.ts
+++ b/src/server/api/endpoints/drive/files/delete.ts
@@ -6,8 +6,8 @@ import { ILocalUser } from '../../../../../models/user';
 
 export const meta = {
 	desc: {
-		ja: 'ドライブのファイルを削除します。',
-		en: 'Delete a file of drive.'
+		'ja-JP': 'ドライブのファイルを削除します。',
+		'en-US': 'Delete a file of drive.'
 	},
 
 	requireCredential: true,
diff --git a/src/server/api/endpoints/drive/files/show.ts b/src/server/api/endpoints/drive/files/show.ts
index 6a66c7a272..718fb8c2d7 100644
--- a/src/server/api/endpoints/drive/files/show.ts
+++ b/src/server/api/endpoints/drive/files/show.ts
@@ -4,8 +4,8 @@ import { ILocalUser } from '../../../../../models/user';
 
 export const meta = {
 	desc: {
-		ja: '指定したドライブのファイルの情報を取得します。',
-		en: 'Get specified file of drive.'
+		'ja-JP': '指定したドライブのファイルの情報を取得します。',
+		'en-US': 'Get specified file of drive.'
 	},
 
 	requireCredential: true,
diff --git a/src/server/api/endpoints/drive/files/update.ts b/src/server/api/endpoints/drive/files/update.ts
index 9ae2719aa7..ba9abfec61 100644
--- a/src/server/api/endpoints/drive/files/update.ts
+++ b/src/server/api/endpoints/drive/files/update.ts
@@ -7,8 +7,8 @@ import getParams from '../../../get-params';
 
 export const meta = {
 	desc: {
-		ja: '指定したドライブのファイルの情報を更新します。',
-		en: 'Update specified file of drive.'
+		'ja-JP': '指定したドライブのファイルの情報を更新します。',
+		'en-US': 'Update specified file of drive.'
 	},
 
 	requireCredential: true,
@@ -18,30 +18,30 @@ export const meta = {
 	params: {
 		fileId: $.type(ID).note({
 			desc: {
-				ja: '対象のファイルID'
+				'ja-JP': '対象のファイルID'
 			}
 		}),
 
 		folderId: $.type(ID).optional.nullable.note({
 			default: undefined,
 			desc: {
-				ja: 'フォルダID'
+				'ja-JP': 'フォルダID'
 			}
 		}),
 
 		name: $.str.optional.pipe(validateFileName).note({
 			default: undefined,
 			desc: {
-				ja: 'ファイル名',
-				en: 'Name of the file'
+				'ja-JP': 'ファイル名',
+				'en-US': 'Name of the file'
 			}
 		}),
 
 		isSensitive: $.bool.optional.note({
 			default: undefined,
 			desc: {
-				ja: 'このメディアが「閲覧注意」(NSFW)かどうか',
-				en: 'Whether this media is NSFW'
+				'ja-JP': 'このメディアが「閲覧注意」(NSFW)かどうか',
+				'en-US': 'Whether this media is NSFW'
 			}
 		})
 	}
diff --git a/src/server/api/endpoints/drive/files/upload_from_url.ts b/src/server/api/endpoints/drive/files/upload_from_url.ts
index d634cf46db..783646feb3 100644
--- a/src/server/api/endpoints/drive/files/upload_from_url.ts
+++ b/src/server/api/endpoints/drive/files/upload_from_url.ts
@@ -6,7 +6,7 @@ import { ILocalUser } from '../../../../../models/user';
 
 export const meta = {
 	desc: {
-		ja: 'ドライブに指定されたURLに存在するファイルをアップロードします。'
+		'ja-JP': 'ドライブに指定されたURLに存在するファイルをアップロードします。'
 	},
 
 	limit: {
diff --git a/src/server/api/endpoints/drive/folders.ts b/src/server/api/endpoints/drive/folders.ts
index de398eb720..19c2ef7aca 100644
--- a/src/server/api/endpoints/drive/folders.ts
+++ b/src/server/api/endpoints/drive/folders.ts
@@ -4,8 +4,8 @@ import { ILocalUser } from '../../../../models/user';
 
 export const meta = {
 	desc: {
-		ja: 'ドライブのフォルダ一覧を取得します。',
-		en: 'Get folders of drive.'
+		'ja-JP': 'ドライブのフォルダ一覧を取得します。',
+		'en-US': 'Get folders of drive.'
 	},
 
 	requireCredential: true,
diff --git a/src/server/api/endpoints/drive/folders/create.ts b/src/server/api/endpoints/drive/folders/create.ts
index 03f9504774..5997dedf0f 100644
--- a/src/server/api/endpoints/drive/folders/create.ts
+++ b/src/server/api/endpoints/drive/folders/create.ts
@@ -5,8 +5,8 @@ import { ILocalUser } from '../../../../../models/user';
 
 export const meta = {
 	desc: {
-		ja: 'ドライブのフォルダを作成します。',
-		en: 'Create a folder of drive.'
+		'ja-JP': 'ドライブのフォルダを作成します。',
+		'en-US': 'Create a folder of drive.'
 	},
 
 	requireCredential: true,
diff --git a/src/server/api/endpoints/drive/folders/show.ts b/src/server/api/endpoints/drive/folders/show.ts
index 6a6c879a01..bb25bcba3c 100644
--- a/src/server/api/endpoints/drive/folders/show.ts
+++ b/src/server/api/endpoints/drive/folders/show.ts
@@ -4,7 +4,7 @@ import { ILocalUser } from '../../../../../models/user';
 
 export const meta = {
 	desc: {
-		ja: '指定したドライブのフォルダの情報を取得します。'
+		'ja-JP': '指定したドライブのフォルダの情報を取得します。'
 	},
 
 	requireCredential: true,
diff --git a/src/server/api/endpoints/drive/folders/update.ts b/src/server/api/endpoints/drive/folders/update.ts
index 1b449428a6..259f373bfc 100644
--- a/src/server/api/endpoints/drive/folders/update.ts
+++ b/src/server/api/endpoints/drive/folders/update.ts
@@ -5,8 +5,8 @@ import { ILocalUser } from '../../../../../models/user';
 
 export const meta = {
 	desc: {
-		ja: '指定したドライブのフォルダの情報を更新します。',
-		en: 'Update specified folder of drive.'
+		'ja-JP': '指定したドライブのフォルダの情報を更新します。',
+		'en-US': 'Update specified folder of drive.'
 	},
 
 	requireCredential: true,
diff --git a/src/server/api/endpoints/following/create.ts b/src/server/api/endpoints/following/create.ts
index ebe319e0cf..c9bea0e3d2 100644
--- a/src/server/api/endpoints/following/create.ts
+++ b/src/server/api/endpoints/following/create.ts
@@ -6,8 +6,8 @@ import create from '../../../../services/following/create';
 
 export const meta = {
 	desc: {
-		ja: '指定したユーザーをフォローします。',
-		en: 'Follow a user.'
+		'ja-JP': '指定したユーザーをフォローします。',
+		'en-US': 'Follow a user.'
 	},
 
 	limit: {
diff --git a/src/server/api/endpoints/following/delete.ts b/src/server/api/endpoints/following/delete.ts
index 4806fe4e39..f3b4a73ae8 100644
--- a/src/server/api/endpoints/following/delete.ts
+++ b/src/server/api/endpoints/following/delete.ts
@@ -6,8 +6,8 @@ import deleteFollowing from '../../../../services/following/delete';
 
 export const meta = {
 	desc: {
-		ja: '指定したユーザーのフォローを解除します。',
-		en: 'Unfollow a user.'
+		'ja-JP': '指定したユーザーのフォローを解除します。',
+		'en-US': 'Unfollow a user.'
 	},
 
 	limit: {
diff --git a/src/server/api/endpoints/following/requests/accept.ts b/src/server/api/endpoints/following/requests/accept.ts
index b3bf2dd667..f6a7dcf120 100644
--- a/src/server/api/endpoints/following/requests/accept.ts
+++ b/src/server/api/endpoints/following/requests/accept.ts
@@ -4,8 +4,8 @@ import User, { ILocalUser } from '../../../../../models/user';
 
 export const meta = {
 	desc: {
-		ja: '自分に届いた、指定したフォローリクエストを承認します。',
-		en: 'Accept a follow request.'
+		'ja-JP': '自分に届いた、指定したフォローリクエストを承認します。',
+		'en-US': 'Accept a follow request.'
 	},
 
 	requireCredential: true,
diff --git a/src/server/api/endpoints/following/requests/cancel.ts b/src/server/api/endpoints/following/requests/cancel.ts
index c46b948d29..3da4f4734f 100644
--- a/src/server/api/endpoints/following/requests/cancel.ts
+++ b/src/server/api/endpoints/following/requests/cancel.ts
@@ -4,8 +4,8 @@ import User, { pack, ILocalUser } from '../../../../../models/user';
 
 export const meta = {
 	desc: {
-		ja: '自分が作成した、指定したフォローリクエストをキャンセルします。',
-		en: 'Cancel a follow request.'
+		'ja-JP': '自分が作成した、指定したフォローリクエストをキャンセルします。',
+		'en-US': 'Cancel a follow request.'
 	},
 
 	requireCredential: true,
diff --git a/src/server/api/endpoints/following/requests/list.ts b/src/server/api/endpoints/following/requests/list.ts
index b06a158c08..11a387cf16 100644
--- a/src/server/api/endpoints/following/requests/list.ts
+++ b/src/server/api/endpoints/following/requests/list.ts
@@ -4,8 +4,8 @@ import { ILocalUser } from '../../../../../models/user';
 
 export const meta = {
 	desc: {
-		ja: '自分に届いたフォローリクエストの一覧を取得します。',
-		en: 'Get all pending received follow requests.'
+		'ja-JP': '自分に届いたフォローリクエストの一覧を取得します。',
+		'en-US': 'Get all pending received follow requests.'
 	},
 
 	requireCredential: true,
diff --git a/src/server/api/endpoints/following/requests/reject.ts b/src/server/api/endpoints/following/requests/reject.ts
index a232549bb8..98febe9e9f 100644
--- a/src/server/api/endpoints/following/requests/reject.ts
+++ b/src/server/api/endpoints/following/requests/reject.ts
@@ -4,8 +4,8 @@ import User, { ILocalUser } from '../../../../../models/user';
 
 export const meta = {
 	desc: {
-		ja: '自分に届いた、指定したフォローリクエストを拒否します。',
-		en: 'Reject a follow request.'
+		'ja-JP': '自分に届いた、指定したフォローリクエストを拒否します。',
+		'en-US': 'Reject a follow request.'
 	},
 
 	requireCredential: true,
diff --git a/src/server/api/endpoints/following/stalk.ts b/src/server/api/endpoints/following/stalk.ts
index 79a3fb976c..d44cea2cc4 100644
--- a/src/server/api/endpoints/following/stalk.ts
+++ b/src/server/api/endpoints/following/stalk.ts
@@ -4,8 +4,8 @@ import { ILocalUser } from '../../../../models/user';
 
 export const meta = {
 	desc: {
-		ja: '指定したユーザーをストーキングします。',
-		en: 'Stalk a user.'
+		'ja-JP': '指定したユーザーをストーキングします。',
+		'en-US': 'Stalk a user.'
 	},
 
 	requireCredential: true,
diff --git a/src/server/api/endpoints/following/unstalk.ts b/src/server/api/endpoints/following/unstalk.ts
index 71a7a97eeb..8b66f0727e 100644
--- a/src/server/api/endpoints/following/unstalk.ts
+++ b/src/server/api/endpoints/following/unstalk.ts
@@ -4,8 +4,8 @@ import { ILocalUser } from '../../../../models/user';
 
 export const meta = {
 	desc: {
-		ja: '指定したユーザーのストーキングをやめます。',
-		en: 'Unstalk a user.'
+		'ja-JP': '指定したユーザーのストーキングをやめます。',
+		'en-US': 'Unstalk a user.'
 	},
 
 	requireCredential: true,
diff --git a/src/server/api/endpoints/games/reversi/games/surrender.ts b/src/server/api/endpoints/games/reversi/games/surrender.ts
index 49821650ed..8ca0143674 100644
--- a/src/server/api/endpoints/games/reversi/games/surrender.ts
+++ b/src/server/api/endpoints/games/reversi/games/surrender.ts
@@ -6,7 +6,7 @@ import { publishReversiGameStream } from '../../../../../../stream';
 
 export const meta = {
 	desc: {
-		ja: '指定したリバーシの対局で投了します。'
+		'ja-JP': '指定したリバーシの対局で投了します。'
 	},
 
 	requireCredential: true,
@@ -14,7 +14,7 @@ export const meta = {
 	params: {
 		gameId: $.type(ID).note({
 			desc: {
-				ja: '投了したい対局'
+				'ja-JP': '投了したい対局'
 			}
 		})
 	}
diff --git a/src/server/api/endpoints/hashtags/search.ts b/src/server/api/endpoints/hashtags/search.ts
index 262370cacc..f6fb35b2ff 100644
--- a/src/server/api/endpoints/hashtags/search.ts
+++ b/src/server/api/endpoints/hashtags/search.ts
@@ -5,7 +5,7 @@ const escapeRegexp = require('escape-regexp');
 
 export const meta = {
 	desc: {
-		ja: 'ハッシュタグを検索します。'
+		'ja-JP': 'ハッシュタグを検索します。'
 	},
 
 	requireCredential: false,
@@ -14,20 +14,20 @@ export const meta = {
 		limit: $.num.optional.range(1, 100).note({
 			default: 10,
 			desc: {
-				ja: '最大数'
+				'ja-JP': '最大数'
 			}
 		}),
 
 		query: $.str.note({
 			desc: {
-				ja: 'クエリ'
+				'ja-JP': 'クエリ'
 			}
 		}),
 
 		offset: $.num.optional.min(0).note({
 			default: 0,
 			desc: {
-				ja: 'オフセット'
+				'ja-JP': 'オフセット'
 			}
 		})
 	}
diff --git a/src/server/api/endpoints/i.ts b/src/server/api/endpoints/i.ts
index 7f25c07957..1f99ef2d8d 100644
--- a/src/server/api/endpoints/i.ts
+++ b/src/server/api/endpoints/i.ts
@@ -3,7 +3,7 @@ import { IApp } from '../../../models/app';
 
 export const meta = {
 	desc: {
-		ja: '自分のアカウント情報を取得します。'
+		'ja-JP': '自分のアカウント情報を取得します。'
 	},
 
 	requireCredential: true,
diff --git a/src/server/api/endpoints/i/favorites.ts b/src/server/api/endpoints/i/favorites.ts
index 47c8a87fd9..32c1a55fb0 100644
--- a/src/server/api/endpoints/i/favorites.ts
+++ b/src/server/api/endpoints/i/favorites.ts
@@ -4,8 +4,8 @@ import { ILocalUser } from '../../../../models/user';
 
 export const meta = {
 	desc: {
-		ja: 'お気に入りに登録した投稿一覧を取得します。',
-		en: 'Get favorited notes'
+		'ja-JP': 'お気に入りに登録した投稿一覧を取得します。',
+		'en-US': 'Get favorited notes'
 	},
 
 	requireCredential: true,
diff --git a/src/server/api/endpoints/i/update.ts b/src/server/api/endpoints/i/update.ts
index 61a6b20c7c..cdb4eb3f56 100644
--- a/src/server/api/endpoints/i/update.ts
+++ b/src/server/api/endpoints/i/update.ts
@@ -8,8 +8,8 @@ import config from '../../../../config';
 
 export const meta = {
 	desc: {
-		ja: 'アカウント情報を更新します。',
-		en: 'Update myself'
+		'ja-JP': 'アカウント情報を更新します。',
+		'en-US': 'Update myself'
 	},
 
 	requireCredential: true,
diff --git a/src/server/api/endpoints/messaging/history.ts b/src/server/api/endpoints/messaging/history.ts
index 43cceacf95..1dd08cd13c 100644
--- a/src/server/api/endpoints/messaging/history.ts
+++ b/src/server/api/endpoints/messaging/history.ts
@@ -6,8 +6,8 @@ import { ILocalUser } from '../../../../models/user';
 
 export const meta = {
 	desc: {
-		ja: 'Messagingの履歴を取得します。',
-		en: 'Show messaging history.'
+		'ja-JP': 'Messagingの履歴を取得します。',
+		'en-US': 'Show messaging history.'
 	},
 
 	requireCredential: true,
diff --git a/src/server/api/endpoints/messaging/messages.ts b/src/server/api/endpoints/messaging/messages.ts
index ae26419bc6..dec0638eed 100644
--- a/src/server/api/endpoints/messaging/messages.ts
+++ b/src/server/api/endpoints/messaging/messages.ts
@@ -6,8 +6,8 @@ import read from '../../common/read-messaging-message';
 
 export const meta = {
 	desc: {
-		ja: '指定したユーザーとのMessagingのメッセージ一覧を取得します。',
-		en: 'Get messages of messaging.'
+		'ja-JP': '指定したユーザーとのMessagingのメッセージ一覧を取得します。',
+		'en-US': 'Get messages of messaging.'
 	},
 
 	requireCredential: true,
diff --git a/src/server/api/endpoints/messaging/messages/create.ts b/src/server/api/endpoints/messaging/messages/create.ts
index d33d9e7e77..a6fabcfa45 100644
--- a/src/server/api/endpoints/messaging/messages/create.ts
+++ b/src/server/api/endpoints/messaging/messages/create.ts
@@ -12,8 +12,8 @@ import pushSw from '../../../../../push-sw';
 
 export const meta = {
 	desc: {
-		ja: '指定したユーザーへMessagingのメッセージを送信します。',
-		en: 'Create a message of messaging.'
+		'ja-JP': '指定したユーザーへMessagingのメッセージを送信します。',
+		'en-US': 'Create a message of messaging.'
 	},
 
 	requireCredential: true,
diff --git a/src/server/api/endpoints/messaging/messages/read.ts b/src/server/api/endpoints/messaging/messages/read.ts
index f609337523..581b57579b 100644
--- a/src/server/api/endpoints/messaging/messages/read.ts
+++ b/src/server/api/endpoints/messaging/messages/read.ts
@@ -6,8 +6,8 @@ import getParams from '../../../get-params';
 
 export const meta = {
 	desc: {
-		ja: '指定した自分宛てのメッセージを既読にします。',
-		en: 'Mark as read a message of messaging.'
+		'ja-JP': '指定した自分宛てのメッセージを既読にします。',
+		'en-US': 'Mark as read a message of messaging.'
 	},
 
 	requireCredential: true,
@@ -17,8 +17,8 @@ export const meta = {
 	params: {
 		messageId: $.type(ID).note({
 			desc: {
-				ja: '既読にするメッセージのID',
-				en: 'The ID of a message that you want to mark as read'
+				'ja-JP': '既読にするメッセージのID',
+				'en-US': 'The ID of a message that you want to mark as read'
 			}
 		})
 	}
diff --git a/src/server/api/endpoints/mute/create.ts b/src/server/api/endpoints/mute/create.ts
index bd70cd62ef..5b2e7a8d71 100644
--- a/src/server/api/endpoints/mute/create.ts
+++ b/src/server/api/endpoints/mute/create.ts
@@ -4,8 +4,8 @@ import Mute from '../../../../models/mute';
 
 export const meta = {
 	desc: {
-		ja: 'ユーザーをミュートします。',
-		en: 'Mute a user'
+		'ja-JP': 'ユーザーをミュートします。',
+		'en-US': 'Mute a user'
 	},
 
 	requireCredential: true,
diff --git a/src/server/api/endpoints/mute/delete.ts b/src/server/api/endpoints/mute/delete.ts
index 3187c46f83..e8ed75a847 100644
--- a/src/server/api/endpoints/mute/delete.ts
+++ b/src/server/api/endpoints/mute/delete.ts
@@ -4,8 +4,8 @@ import Mute from '../../../../models/mute';
 
 export const meta = {
 	desc: {
-		ja: 'ユーザーのミュートを解除します。',
-		en: 'Unmute a user'
+		'ja-JP': 'ユーザーのミュートを解除します。',
+		'en-US': 'Unmute a user'
 	},
 
 	requireCredential: true,
diff --git a/src/server/api/endpoints/mute/list.ts b/src/server/api/endpoints/mute/list.ts
index e297605338..387b2396f5 100644
--- a/src/server/api/endpoints/mute/list.ts
+++ b/src/server/api/endpoints/mute/list.ts
@@ -5,8 +5,8 @@ import { getFriendIds } from '../../common/get-friends';
 
 export const meta = {
 	desc: {
-		ja: 'ミュートしているユーザー一覧を取得します。',
-		en: 'Get muted users.'
+		'ja-JP': 'ミュートしているユーザー一覧を取得します。',
+		'en-US': 'Get muted users.'
 	},
 
 	requireCredential: true,
diff --git a/src/server/api/endpoints/my/apps.ts b/src/server/api/endpoints/my/apps.ts
index 35185db41d..412dff6164 100644
--- a/src/server/api/endpoints/my/apps.ts
+++ b/src/server/api/endpoints/my/apps.ts
@@ -4,8 +4,8 @@ import { ILocalUser } from '../../../../models/user';
 
 export const meta = {
 	desc: {
-		ja: '自分のアプリケーション一覧を取得します。',
-		en: 'Get my apps'
+		'ja-JP': '自分のアプリケーション一覧を取得します。',
+		'en-US': 'Get my apps'
 	},
 
 	requireCredential: true
diff --git a/src/server/api/endpoints/notes/create.ts b/src/server/api/endpoints/notes/create.ts
index 9cdbec5270..04f5f7562e 100644
--- a/src/server/api/endpoints/notes/create.ts
+++ b/src/server/api/endpoints/notes/create.ts
@@ -9,7 +9,7 @@ import getParams from '../../get-params';
 
 export const meta = {
 	desc: {
-		ja: '投稿します。'
+		'ja-JP': '投稿します。'
 	},
 
 	requireCredential: true,
@@ -25,33 +25,33 @@ export const meta = {
 		visibility: $.str.optional.or(['public', 'home', 'followers', 'specified', 'private']).note({
 			default: 'public',
 			desc: {
-				ja: '投稿の公開範囲'
+				'ja-JP': '投稿の公開範囲'
 			}
 		}),
 
 		visibleUserIds: $.arr($.type(ID)).optional.unique().min(1).note({
 			desc: {
-				ja: '(投稿の公開範囲が specified の場合)投稿を閲覧できるユーザー'
+				'ja-JP': '(投稿の公開範囲が specified の場合)投稿を閲覧できるユーザー'
 			}
 		}),
 
 		text: $.str.optional.nullable.pipe(isValidText).note({
 			default: null,
 			desc: {
-				ja: '投稿内容'
+				'ja-JP': '投稿内容'
 			}
 		}),
 
 		cw: $.str.optional.nullable.pipe(isValidCw).note({
 			desc: {
-				ja: 'コンテンツの警告。このパラメータを指定すると設定したテキストで投稿のコンテンツを隠す事が出来ます。'
+				'ja-JP': 'コンテンツの警告。このパラメータを指定すると設定したテキストで投稿のコンテンツを隠す事が出来ます。'
 			}
 		}),
 
 		viaMobile: $.bool.optional.note({
 			default: false,
 			desc: {
-				ja: 'モバイルデバイスからの投稿か否か。'
+				'ja-JP': 'モバイルデバイスからの投稿か否か。'
 			}
 		}),
 
@@ -66,20 +66,20 @@ export const meta = {
 			speed: $.num.nullable
 		}).optional.nullable.strict().note({
 			desc: {
-				ja: '位置情報'
+				'ja-JP': '位置情報'
 			},
 			ref: 'geo'
 		}),
 
 		mediaIds: $.arr($.type(ID)).optional.unique().range(1, 4).note({
 			desc: {
-				ja: '添付するメディア'
+				'ja-JP': '添付するメディア'
 			}
 		}),
 
 		renoteId: $.type(ID).optional.note({
 			desc: {
-				ja: 'Renote対象'
+				'ja-JP': 'Renote対象'
 			}
 		}),
 
@@ -90,7 +90,7 @@ export const meta = {
 				.each(c => c.length > 0 && c.length < 50)
 		}).optional.strict().note({
 			desc: {
-				ja: 'アンケート'
+				'ja-JP': 'アンケート'
 			},
 			ref: 'poll'
 		})
@@ -102,7 +102,7 @@ export const meta = {
 			createdNote: {
 				type: 'entity(Note)',
 				desc: {
-					ja: '作成した投稿'
+					'ja-JP': '作成した投稿'
 				}
 			}
 		}
diff --git a/src/server/api/endpoints/notes/delete.ts b/src/server/api/endpoints/notes/delete.ts
index 22c6101e14..6d9826cf7b 100644
--- a/src/server/api/endpoints/notes/delete.ts
+++ b/src/server/api/endpoints/notes/delete.ts
@@ -5,8 +5,8 @@ import { ILocalUser } from '../../../../models/user';
 
 export const meta = {
 	desc: {
-		ja: '指定した投稿を削除します。',
-		en: 'Delete a note.'
+		'ja-JP': '指定した投稿を削除します。',
+		'en-US': 'Delete a note.'
 	},
 
 	requireCredential: true,
diff --git a/src/server/api/endpoints/notes/favorites/create.ts b/src/server/api/endpoints/notes/favorites/create.ts
index 87f6cf1f08..daf7780abc 100644
--- a/src/server/api/endpoints/notes/favorites/create.ts
+++ b/src/server/api/endpoints/notes/favorites/create.ts
@@ -5,8 +5,8 @@ import { ILocalUser } from '../../../../../models/user';
 
 export const meta = {
 	desc: {
-		ja: '指定した投稿をお気に入りに登録します。',
-		en: 'Favorite a note.'
+		'ja-JP': '指定した投稿をお気に入りに登録します。',
+		'en-US': 'Favorite a note.'
 	},
 
 	requireCredential: true,
diff --git a/src/server/api/endpoints/notes/favorites/delete.ts b/src/server/api/endpoints/notes/favorites/delete.ts
index 3906fe99bb..e42b24d324 100644
--- a/src/server/api/endpoints/notes/favorites/delete.ts
+++ b/src/server/api/endpoints/notes/favorites/delete.ts
@@ -5,8 +5,8 @@ import { ILocalUser } from '../../../../../models/user';
 
 export const meta = {
 	desc: {
-		ja: '指定した投稿のお気に入りを解除します。',
-		en: 'Unfavorite a note.'
+		'ja-JP': '指定した投稿のお気に入りを解除します。',
+		'en-US': 'Unfavorite a note.'
 	},
 
 	requireCredential: true,
diff --git a/src/server/api/endpoints/notes/hybrid-timeline.ts b/src/server/api/endpoints/notes/hybrid-timeline.ts
index 3fce4fb9af..2dbb1190c1 100644
--- a/src/server/api/endpoints/notes/hybrid-timeline.ts
+++ b/src/server/api/endpoints/notes/hybrid-timeline.ts
@@ -10,65 +10,65 @@ export const meta = {
 	name: 'notes/hybrid-timeline',
 
 	desc: {
-		ja: 'ハイブリッドタイムラインを取得します。'
+		'ja-JP': 'ハイブリッドタイムラインを取得します。'
 	},
 
 	params: {
 		limit: $.num.optional.range(1, 100).note({
 			default: 10,
 			desc: {
-				ja: '最大数'
+				'ja-JP': '最大数'
 			}
 		}),
 
 		sinceId: $.type(ID).optional.note({
 			desc: {
-				ja: '指定すると、この投稿を基点としてより新しい投稿を取得します'
+				'ja-JP': '指定すると、この投稿を基点としてより新しい投稿を取得します'
 			}
 		}),
 
 		untilId: $.type(ID).optional.note({
 			desc: {
-				ja: '指定すると、この投稿を基点としてより古い投稿を取得します'
+				'ja-JP': '指定すると、この投稿を基点としてより古い投稿を取得します'
 			}
 		}),
 
 		sinceDate: $.num.optional.note({
 			desc: {
-				ja: '指定した時間を基点としてより新しい投稿を取得します。数値は、1970年1月1日 00:00:00 UTC から指定した日時までの経過時間をミリ秒単位で表します。'
+				'ja-JP': '指定した時間を基点としてより新しい投稿を取得します。数値は、1970年1月1日 00:00:00 UTC から指定した日時までの経過時間をミリ秒単位で表します。'
 			}
 		}),
 
 		untilDate: $.num.optional.note({
 			desc: {
-				ja: '指定した時間を基点としてより古い投稿を取得します。数値は、1970年1月1日 00:00:00 UTC から指定した日時までの経過時間をミリ秒単位で表します。'
+				'ja-JP': '指定した時間を基点としてより古い投稿を取得します。数値は、1970年1月1日 00:00:00 UTC から指定した日時までの経過時間をミリ秒単位で表します。'
 			}
 		}),
 
 		includeMyRenotes: $.bool.optional.note({
 			default: true,
 			desc: {
-				ja: '自分の行ったRenoteを含めるかどうか'
+				'ja-JP': '自分の行ったRenoteを含めるかどうか'
 			}
 		}),
 
 		includeRenotedMyNotes: $.bool.optional.note({
 			default: true,
 			desc: {
-				ja: 'Renoteされた自分の投稿を含めるかどうか'
+				'ja-JP': 'Renoteされた自分の投稿を含めるかどうか'
 			}
 		}),
 
 		includeLocalRenotes: $.bool.optional.note({
 			default: true,
 			desc: {
-				ja: 'Renoteされたローカルの投稿を含めるかどうか'
+				'ja-JP': 'Renoteされたローカルの投稿を含めるかどうか'
 			}
 		}),
 
 		mediaOnly: $.bool.optional.note({
 			desc: {
-				ja: 'true にすると、メディアが添付された投稿だけ取得します'
+				'ja-JP': 'true にすると、メディアが添付された投稿だけ取得します'
 			}
 		}),
 	}
diff --git a/src/server/api/endpoints/notes/mentions.ts b/src/server/api/endpoints/notes/mentions.ts
index db91230a81..a7fb14d8a9 100644
--- a/src/server/api/endpoints/notes/mentions.ts
+++ b/src/server/api/endpoints/notes/mentions.ts
@@ -6,8 +6,8 @@ import { ILocalUser } from '../../../../models/user';
 
 export const meta = {
 	desc: {
-		ja: '自分に言及している投稿の一覧を取得します。',
-		en: 'Get mentions of myself.'
+		'ja-JP': '自分に言及している投稿の一覧を取得します。',
+		'en-US': 'Get mentions of myself.'
 	},
 
 	requireCredential: true
diff --git a/src/server/api/endpoints/notes/polls/recommendation.ts b/src/server/api/endpoints/notes/polls/recommendation.ts
index a0469d1870..9af223c010 100644
--- a/src/server/api/endpoints/notes/polls/recommendation.ts
+++ b/src/server/api/endpoints/notes/polls/recommendation.ts
@@ -5,8 +5,8 @@ import { ILocalUser } from '../../../../../models/user';
 
 export const meta = {
 	desc: {
-		ja: 'おすすめのアンケート一覧を取得します。',
-		en: 'Get recommended polls.'
+		'ja-JP': 'おすすめのアンケート一覧を取得します。',
+		'en-US': 'Get recommended polls.'
 	},
 
 	requireCredential: true,
diff --git a/src/server/api/endpoints/notes/polls/vote.ts b/src/server/api/endpoints/notes/polls/vote.ts
index 568c187f8a..ab80e7f5d0 100644
--- a/src/server/api/endpoints/notes/polls/vote.ts
+++ b/src/server/api/endpoints/notes/polls/vote.ts
@@ -9,8 +9,8 @@ import { ILocalUser } from '../../../../../models/user';
 
 export const meta = {
 	desc: {
-		ja: '指定した投稿のアンケートに投票します。',
-		en: 'Vote poll of a note.'
+		'ja-JP': '指定した投稿のアンケートに投票します。',
+		'en-US': 'Vote poll of a note.'
 	},
 
 	requireCredential: true,
diff --git a/src/server/api/endpoints/notes/reactions.ts b/src/server/api/endpoints/notes/reactions.ts
index 8921c55916..6e7d60e0f0 100644
--- a/src/server/api/endpoints/notes/reactions.ts
+++ b/src/server/api/endpoints/notes/reactions.ts
@@ -5,8 +5,8 @@ import { ILocalUser } from '../../../../models/user';
 
 export const meta = {
 	desc: {
-		ja: '指定した投稿のリアクション一覧を取得します。',
-		en: 'Show reactions of a note.'
+		'ja-JP': '指定した投稿のリアクション一覧を取得します。',
+		'en-US': 'Show reactions of a note.'
 	},
 
 	requireCredential: true
diff --git a/src/server/api/endpoints/notes/reactions/create.ts b/src/server/api/endpoints/notes/reactions/create.ts
index 65e24e7c06..0781db16c5 100644
--- a/src/server/api/endpoints/notes/reactions/create.ts
+++ b/src/server/api/endpoints/notes/reactions/create.ts
@@ -7,8 +7,8 @@ import getParams from '../../../get-params';
 
 export const meta = {
 	desc: {
-		ja: '指定した投稿にリアクションします。',
-		en: 'React to a note.'
+		'ja-JP': '指定した投稿にリアクションします。',
+		'en-US': 'React to a note.'
 	},
 
 	requireCredential: true,
@@ -18,13 +18,13 @@ export const meta = {
 	params: {
 		noteId: $.type(ID).note({
 			desc: {
-				ja: '対象の投稿'
+				'ja-JP': '対象の投稿'
 			}
 		}),
 
 		reaction: $.str.pipe(validateReaction.ok).note({
 			desc: {
-				ja: 'リアクションの種類'
+				'ja-JP': 'リアクションの種類'
 			}
 		})
 	}
diff --git a/src/server/api/endpoints/notes/reactions/delete.ts b/src/server/api/endpoints/notes/reactions/delete.ts
index 62af0407bc..598eb65364 100644
--- a/src/server/api/endpoints/notes/reactions/delete.ts
+++ b/src/server/api/endpoints/notes/reactions/delete.ts
@@ -5,8 +5,8 @@ import { ILocalUser } from '../../../../../models/user';
 
 export const meta = {
 	desc: {
-		ja: '指定した投稿へのリアクションを取り消します。',
-		en: 'Unreact to a note.'
+		'ja-JP': '指定した投稿へのリアクションを取り消します。',
+		'en-US': 'Unreact to a note.'
 	},
 
 	requireCredential: true,
diff --git a/src/server/api/endpoints/notes/timeline.ts b/src/server/api/endpoints/notes/timeline.ts
index 3e3fa8c4aa..099bf2010b 100644
--- a/src/server/api/endpoints/notes/timeline.ts
+++ b/src/server/api/endpoints/notes/timeline.ts
@@ -8,8 +8,8 @@ import getParams from '../../get-params';
 
 export const meta = {
 	desc: {
-		ja: 'タイムラインを取得します。',
-		en: 'Get timeline of myself.'
+		'ja-JP': 'タイムラインを取得します。',
+		'en-US': 'Get timeline of myself.'
 	},
 
 	requireCredential: true,
@@ -18,58 +18,58 @@ export const meta = {
 		limit: $.num.optional.range(1, 100).note({
 			default: 10,
 			desc: {
-				ja: '最大数'
+				'ja-JP': '最大数'
 			}
 		}),
 
 		sinceId: $.type(ID).optional.note({
 			desc: {
-				ja: '指定すると、この投稿を基点としてより新しい投稿を取得します'
+				'ja-JP': '指定すると、この投稿を基点としてより新しい投稿を取得します'
 			}
 		}),
 
 		untilId: $.type(ID).optional.note({
 			desc: {
-				ja: '指定すると、この投稿を基点としてより古い投稿を取得します'
+				'ja-JP': '指定すると、この投稿を基点としてより古い投稿を取得します'
 			}
 		}),
 
 		sinceDate: $.num.optional.note({
 			desc: {
-				ja: '指定した時間を基点としてより新しい投稿を取得します。数値は、1970年1月1日 00:00:00 UTC から指定した日時までの経過時間をミリ秒単位で表します。'
+				'ja-JP': '指定した時間を基点としてより新しい投稿を取得します。数値は、1970年1月1日 00:00:00 UTC から指定した日時までの経過時間をミリ秒単位で表します。'
 			}
 		}),
 
 		untilDate: $.num.optional.note({
 			desc: {
-				ja: '指定した時間を基点としてより古い投稿を取得します。数値は、1970年1月1日 00:00:00 UTC から指定した日時までの経過時間をミリ秒単位で表します。'
+				'ja-JP': '指定した時間を基点としてより古い投稿を取得します。数値は、1970年1月1日 00:00:00 UTC から指定した日時までの経過時間をミリ秒単位で表します。'
 			}
 		}),
 
 		includeMyRenotes: $.bool.optional.note({
 			default: true,
 			desc: {
-				ja: '自分の行ったRenoteを含めるかどうか'
+				'ja-JP': '自分の行ったRenoteを含めるかどうか'
 			}
 		}),
 
 		includeRenotedMyNotes: $.bool.optional.note({
 			default: true,
 			desc: {
-				ja: 'Renoteされた自分の投稿を含めるかどうか'
+				'ja-JP': 'Renoteされた自分の投稿を含めるかどうか'
 			}
 		}),
 
 		includeLocalRenotes: $.bool.optional.note({
 			default: true,
 			desc: {
-				ja: 'Renoteされたローカルの投稿を含めるかどうか'
+				'ja-JP': 'Renoteされたローカルの投稿を含めるかどうか'
 			}
 		}),
 
 		mediaOnly: $.bool.optional.note({
 			desc: {
-				ja: 'true にすると、メディアが添付された投稿だけ取得します'
+				'ja-JP': 'true にすると、メディアが添付された投稿だけ取得します'
 			}
 		}),
 	}
diff --git a/src/server/api/endpoints/notes/trend.ts b/src/server/api/endpoints/notes/trend.ts
index 1cbbfacadc..7a0a098f28 100644
--- a/src/server/api/endpoints/notes/trend.ts
+++ b/src/server/api/endpoints/notes/trend.ts
@@ -5,8 +5,8 @@ import { ILocalUser } from '../../../../models/user';
 
 export const meta = {
 	desc: {
-		ja: '人気の投稿の一覧を取得します。',
-		en: 'Get trend notes.'
+		'ja-JP': '人気の投稿の一覧を取得します。',
+		'en-US': 'Get trend notes.'
 	},
 
 	requireCredential: true
diff --git a/src/server/api/endpoints/notes/user-list-timeline.ts b/src/server/api/endpoints/notes/user-list-timeline.ts
index dcef548666..a7b43014ed 100644
--- a/src/server/api/endpoints/notes/user-list-timeline.ts
+++ b/src/server/api/endpoints/notes/user-list-timeline.ts
@@ -8,8 +8,8 @@ import getParams from '../../get-params';
 
 export const meta = {
 	desc: {
-		ja: '指定したユーザーリストのタイムラインを取得します。',
-		en: 'Get timeline of a user list.'
+		'ja-JP': '指定したユーザーリストのタイムラインを取得します。',
+		'en-US': 'Get timeline of a user list.'
 	},
 
 	requireCredential: true,
@@ -17,65 +17,65 @@ export const meta = {
 	params: {
 		listId: $.type(ID).note({
 			desc: {
-				ja: 'リストのID'
+				'ja-JP': 'リストのID'
 			}
 		}),
 
 		limit: $.num.optional.range(1, 100).note({
 			default: 10,
 			desc: {
-				ja: '最大数'
+				'ja-JP': '最大数'
 			}
 		}),
 
 		sinceId: $.type(ID).optional.note({
 			desc: {
-				ja: '指定すると、この投稿を基点としてより新しい投稿を取得します'
+				'ja-JP': '指定すると、この投稿を基点としてより新しい投稿を取得します'
 			}
 		}),
 
 		untilId: $.type(ID).optional.note({
 			desc: {
-				ja: '指定すると、この投稿を基点としてより古い投稿を取得します'
+				'ja-JP': '指定すると、この投稿を基点としてより古い投稿を取得します'
 			}
 		}),
 
 		sinceDate: $.num.optional.note({
 			desc: {
-				ja: '指定した時間を基点としてより新しい投稿を取得します。数値は、1970年1月1日 00:00:00 UTC から指定した日時までの経過時間をミリ秒単位で表します。'
+				'ja-JP': '指定した時間を基点としてより新しい投稿を取得します。数値は、1970年1月1日 00:00:00 UTC から指定した日時までの経過時間をミリ秒単位で表します。'
 			}
 		}),
 
 		untilDate: $.num.optional.note({
 			desc: {
-				ja: '指定した時間を基点としてより古い投稿を取得します。数値は、1970年1月1日 00:00:00 UTC から指定した日時までの経過時間をミリ秒単位で表します。'
+				'ja-JP': '指定した時間を基点としてより古い投稿を取得します。数値は、1970年1月1日 00:00:00 UTC から指定した日時までの経過時間をミリ秒単位で表します。'
 			}
 		}),
 
 		includeMyRenotes: $.bool.optional.note({
 			default: true,
 			desc: {
-				ja: '自分の行ったRenoteを含めるかどうか'
+				'ja-JP': '自分の行ったRenoteを含めるかどうか'
 			}
 		}),
 
 		includeRenotedMyNotes: $.bool.optional.note({
 			default: true,
 			desc: {
-				ja: 'Renoteされた自分の投稿を含めるかどうか'
+				'ja-JP': 'Renoteされた自分の投稿を含めるかどうか'
 			}
 		}),
 
 		includeLocalRenotes: $.bool.optional.note({
 			default: true,
 			desc: {
-				ja: 'Renoteされたローカルの投稿を含めるかどうか'
+				'ja-JP': 'Renoteされたローカルの投稿を含めるかどうか'
 			}
 		}),
 
 		mediaOnly: $.bool.optional.note({
 			desc: {
-				ja: 'true にすると、メディアが添付された投稿だけ取得します'
+				'ja-JP': 'true にすると、メディアが添付された投稿だけ取得します'
 			}
 		}),
 	}
diff --git a/src/server/api/endpoints/notifications/mark_all_as_read.ts b/src/server/api/endpoints/notifications/mark_all_as_read.ts
index a9875ebb01..e2bde777b3 100644
--- a/src/server/api/endpoints/notifications/mark_all_as_read.ts
+++ b/src/server/api/endpoints/notifications/mark_all_as_read.ts
@@ -4,8 +4,8 @@ import User, { ILocalUser } from '../../../../models/user';
 
 export const meta = {
 	desc: {
-		ja: '全ての通知を既読にします。',
-		en: 'Mark all notifications as read.'
+		'ja-JP': '全ての通知を既読にします。',
+		'en-US': 'Mark all notifications as read.'
 	},
 
 	requireCredential: true,
diff --git a/src/server/api/endpoints/users/lists/create.ts b/src/server/api/endpoints/users/lists/create.ts
index d7dc2a5f70..ac4f957a0d 100644
--- a/src/server/api/endpoints/users/lists/create.ts
+++ b/src/server/api/endpoints/users/lists/create.ts
@@ -4,8 +4,8 @@ import { ILocalUser } from '../../../../../models/user';
 
 export const meta = {
 	desc: {
-		ja: 'ユーザーリストを作成します。',
-		en: 'Create a user list'
+		'ja-JP': 'ユーザーリストを作成します。',
+		'en-US': 'Create a user list'
 	},
 
 	requireCredential: true,
diff --git a/src/server/api/endpoints/users/lists/list.ts b/src/server/api/endpoints/users/lists/list.ts
index 31fef26bdc..966e1d3ad9 100644
--- a/src/server/api/endpoints/users/lists/list.ts
+++ b/src/server/api/endpoints/users/lists/list.ts
@@ -3,7 +3,7 @@ import { ILocalUser } from '../../../../../models/user';
 
 export const meta = {
 	desc: {
-		ja: '自分の作成したユーザーリスト一覧を取得します。'
+		'ja-JP': '自分の作成したユーザーリスト一覧を取得します。'
 	},
 
 	requireCredential: true,
diff --git a/src/server/api/endpoints/users/lists/push.ts b/src/server/api/endpoints/users/lists/push.ts
index bd4e201bde..2d68ec7458 100644
--- a/src/server/api/endpoints/users/lists/push.ts
+++ b/src/server/api/endpoints/users/lists/push.ts
@@ -8,8 +8,8 @@ import { deliver } from '../../../../../queue';
 
 export const meta = {
 	desc: {
-		ja: '指定したユーザーリストに指定したユーザーを追加します。',
-		en: 'Add a user to a user list.'
+		'ja-JP': '指定したユーザーリストに指定したユーザーを追加します。',
+		'en-US': 'Add a user to a user list.'
 	},
 
 	requireCredential: true,
diff --git a/src/server/api/endpoints/users/lists/show.ts b/src/server/api/endpoints/users/lists/show.ts
index 2fd142a609..a2dd00c6e1 100644
--- a/src/server/api/endpoints/users/lists/show.ts
+++ b/src/server/api/endpoints/users/lists/show.ts
@@ -4,8 +4,8 @@ import { ILocalUser } from '../../../../../models/user';
 
 export const meta = {
 	desc: {
-		ja: '指定したユーザーリストの情報を取得します。',
-		en: 'Show a user list.'
+		'ja-JP': '指定したユーザーリストの情報を取得します。',
+		'en-US': 'Show a user list.'
 	},
 
 	requireCredential: true,
diff --git a/src/server/api/endpoints/users/recommendation.ts b/src/server/api/endpoints/users/recommendation.ts
index 13377e6fff..e0a5cb9e36 100644
--- a/src/server/api/endpoints/users/recommendation.ts
+++ b/src/server/api/endpoints/users/recommendation.ts
@@ -6,7 +6,7 @@ import Mute from '../../../../models/mute';
 
 export const meta = {
 	desc: {
-		ja: 'おすすめのユーザー一覧を取得します。'
+		'ja-JP': 'おすすめのユーザー一覧を取得します。'
 	},
 
 	requireCredential: true,
diff --git a/src/server/api/endpoints/users/search.ts b/src/server/api/endpoints/users/search.ts
index eda3f95728..307a8f6894 100644
--- a/src/server/api/endpoints/users/search.ts
+++ b/src/server/api/endpoints/users/search.ts
@@ -5,7 +5,7 @@ import getParams from '../../get-params';
 
 export const meta = {
 	desc: {
-		ja: 'ユーザーを検索します。'
+		'ja-JP': 'ユーザーを検索します。'
 	},
 
 	requireCredential: false,
@@ -13,28 +13,28 @@ export const meta = {
 	params: {
 		query: $.str.note({
 			desc: {
-				ja: 'クエリ'
+				'ja-JP': 'クエリ'
 			}
 		}),
 
 		offset: $.num.optional.min(0).note({
 			default: 0,
 			desc: {
-				ja: 'オフセット'
+				'ja-JP': 'オフセット'
 			}
 		}),
 
 		limit: $.num.optional.range(1, 100).note({
 			default: 10,
 			desc: {
-				ja: '取得する数'
+				'ja-JP': '取得する数'
 			}
 		}),
 
 		localOnly: $.bool.optional.note({
 			default: false,
 			desc: {
-				ja: 'ローカルユーザーのみ検索対象にするか否か'
+				'ja-JP': 'ローカルユーザーのみ検索対象にするか否か'
 			}
 		}),
 	},