summary refs log tree commit diff
path: root/api
diff options
context:
space:
mode:
authorFeatyre <88265031+Featyre@users.noreply.github.com>2021-11-22 21:44:26 +0800
committerGitHub <noreply@github.com>2021-11-22 21:44:26 +0800
commit17fed6a4b60335ff7b4506ebe7880606d99a3568 (patch)
tree2ac2f9338e01c76fb810d552b6d78507d597ce45 /api
parentUpdate Identify.ts (diff)
parentMerge pull request #491 from TheArcaneBrony/master (diff)
downloadserver-17fed6a4b60335ff7b4506ebe7880606d99a3568.tar.xz
Merge branch 'fosscord:master' into master
Diffstat (limited to 'api')
-rw-r--r--api/assets/checkLocale.js47
-rw-r--r--api/assets/dff87c953f43b561d71fbcfe8a93a79a.png0
-rw-r--r--api/assets/preload-plugins/autoRegister.js62
-rw-r--r--api/assets/user.css1
-rw-r--r--api/client_test/index.html103
-rw-r--r--api/locales/ar/auth.json18
-rw-r--r--api/locales/ar/common.json28
-rw-r--r--api/locales/be/auth.json18
-rw-r--r--api/locales/be/common.json28
-rw-r--r--api/locales/bg/auth.json18
-rw-r--r--api/locales/bg/common.json28
-rw-r--r--api/locales/cs/auth.json20
-rw-r--r--api/locales/cs/common.json28
-rw-r--r--api/locales/da/auth.json16
-rw-r--r--api/locales/da/common.json28
-rw-r--r--api/locales/de/common.json28
-rw-r--r--api/locales/el/auth.json16
-rw-r--r--api/locales/el/common.json28
-rw-r--r--api/locales/eo/auth.json18
-rw-r--r--api/locales/eo/common.json28
-rw-r--r--api/locales/es/auth.json20
-rw-r--r--api/locales/es/common.json28
-rw-r--r--api/locales/fi/auth.json16
-rw-r--r--api/locales/fi/common.json28
-rw-r--r--api/locales/fr/auth.json18
-rw-r--r--api/locales/fr/common.json28
-rw-r--r--api/locales/hi/auth.json18
-rw-r--r--api/locales/hi/common.json28
-rw-r--r--api/locales/hr/auth.json18
-rw-r--r--api/locales/hr/common.json28
-rw-r--r--api/locales/hu/auth.json20
-rw-r--r--api/locales/hu/common.json28
-rw-r--r--api/locales/it/auth.json18
-rw-r--r--api/locales/it/common.json28
-rw-r--r--api/locales/ja/auth.json16
-rw-r--r--api/locales/ja/common.json28
-rw-r--r--api/locales/ko/auth.json20
-rw-r--r--api/locales/ko/common.json28
-rw-r--r--api/locales/lt/auth.json20
-rw-r--r--api/locales/lt/common.json4
-rw-r--r--api/locales/nl/auth.json20
-rw-r--r--api/locales/nl/common.json28
-rw-r--r--api/locales/no/auth.json16
-rw-r--r--api/locales/no/common.json28
-rw-r--r--api/locales/ro/auth.json16
-rw-r--r--api/locales/ro/common.json28
-rw-r--r--api/locales/ru/auth.json20
-rw-r--r--api/locales/ru/common.json28
-rw-r--r--api/locales/sh/auth.json18
-rw-r--r--api/locales/sh/common.json28
-rw-r--r--api/locales/sk/auth.json20
-rw-r--r--api/locales/sk/common.json28
-rw-r--r--api/locales/sv/auth.json18
-rw-r--r--api/locales/sv/common.json28
-rw-r--r--api/locales/te/auth.json16
-rw-r--r--api/locales/te/common.json18
-rw-r--r--api/locales/tr/common.json10
-rw-r--r--api/locales/uk/auth.json16
-rw-r--r--api/locales/uk/common.json28
-rw-r--r--api/locales/vi/auth.json20
-rw-r--r--api/locales/vi/common.json28
-rw-r--r--api/locales/zh/auth.json18
-rw-r--r--api/package-lock.json2
-rw-r--r--api/src/Server.ts2
-rw-r--r--api/src/middlewares/Authentication.ts3
-rw-r--r--api/src/middlewares/TestClient.ts19
-rw-r--r--api/src/routes/guilds/templates/index.ts8
-rw-r--r--api/src/routes/policies/instance/domains.ts18
-rw-r--r--api/src/routes/policies/instance/index.ts12
-rw-r--r--api/src/routes/policies/instance/limits.ts11
-rw-r--r--api/src/routes/track.ts11
71 files changed, 854 insertions, 711 deletions
diff --git a/api/assets/checkLocale.js b/api/assets/checkLocale.js
new file mode 100644
index 00000000..016d66c8
--- /dev/null
+++ b/api/assets/checkLocale.js
@@ -0,0 +1,47 @@
+			const localStorage = window.localStorage;
+			// TODO: remote auth
+			// window.GLOBAL_ENV.REMOTE_AUTH_ENDPOINT = window.GLOBAL_ENV.GATEWAY_ENDPOINT.replace(/wss?:/, "");
+			localStorage.setItem("gatewayURL", window.GLOBAL_ENV.GATEWAY_ENDPOINT);
+			localStorage.setItem(
+				"DeveloperOptionsStore",
+				`{"trace":false,"canary":false,"logGatewayEvents":true,"logOverlayEvents":true,"logAnalyticsEvents":true,"sourceMapsEnabled":false,"axeEnabled":false}`
+			);
+
+			const supportedLocales = [
+				"bg",
+				"cs",
+				"da",
+				"de",
+				"el",
+				"en-GB",
+				"es-ES",
+				"fi",
+				"fr",
+				"hi",
+				"hr",
+				"hu",
+				"it",
+				"ja",
+				"ko",
+				"lt",
+				"nl",
+				"no",
+				"pl",
+				"pt-BR",
+				"ro",
+				"ru",
+				"sv-SE",
+				"th",
+				"tr",
+				"uk",
+				"vi",
+				"zh-CN",
+				"zh-TW"
+			];
+
+			const settings = JSON.parse(localStorage.getItem("UserSettingsStore"));
+			if (settings && !supportedLocales.includes(settings.locale)) {
+				// fix client locale wrong and client not loading at all
+				settings.locale = "en-US";
+				localStorage.setItem("UserSettingsStore", JSON.stringify(settings));
+			}
\ No newline at end of file
diff --git a/api/assets/dff87c953f43b561d71fbcfe8a93a79a.png b/api/assets/dff87c953f43b561d71fbcfe8a93a79a.png
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/api/assets/dff87c953f43b561d71fbcfe8a93a79a.png
diff --git a/api/assets/preload-plugins/autoRegister.js b/api/assets/preload-plugins/autoRegister.js
new file mode 100644
index 00000000..bb0b903d
--- /dev/null
+++ b/api/assets/preload-plugins/autoRegister.js
@@ -0,0 +1,62 @@
+// Auto register guest account:
+const prefix = [
+	"mysterious",
+	"adventurous",
+	"courageous",
+	"precious",
+	"cynical",
+	"flamer ",
+	"despicable",
+	"suspicious",
+	"gorgeous",
+	"impeccable",
+	"lovely",
+	"stunning",
+	"keyed",
+	"phoned",
+	"glorious",
+	"amazing",
+	"strange",
+	"arcane"
+];
+const suffix = [
+	"Anonymous",
+	"Boy",
+	"Lurker",
+	"Keyhitter",
+	"User",
+	"Enjoyer",
+	"Hunk",
+	"Coolstar",
+	"Wrestling",
+	"TylerTheCreator",
+	"Ad",
+	"Gamer",
+	"Games",
+	"Programmer"
+];
+
+Array.prototype.random = function () {
+	return this[Math.floor(Math.random() * this.length)];
+};
+
+function _generateName() {
+	return `${prefix.random()}${suffix.random()}`;
+}
+
+var token = JSON.parse(localStorage.getItem("token"));
+if (!token && location.pathname !== "/login" && location.pathname !== "/register") {
+	fetch(`${window.GLOBAL_ENV.API_ENDPOINT}/auth/register`, {
+		method: "POST",
+		headers: { "content-type": "application/json" },
+		body: JSON.stringify({ username: `${_generateName()}`, consent: true }) //${Date.now().toString().slice(-4)}
+	})
+		.then((x) => x.json())
+		.then((x) => {
+			localStorage.setItem("token", `"${x.token}"`);
+			if (!window.localStorage) {
+				// client already loaded -> need to reload to apply the newly registered user token
+				location.reload();
+			}
+		});
+}
diff --git a/api/assets/user.css b/api/assets/user.css
new file mode 100644
index 00000000..a7e5c4f3
--- /dev/null
+++ b/api/assets/user.css
@@ -0,0 +1 @@
+/* Your custom CSS goes here, enjoy! */
\ No newline at end of file
diff --git a/api/client_test/index.html b/api/client_test/index.html
index a68b191a..0b3a775a 100644
--- a/api/client_test/index.html
+++ b/api/client_test/index.html
@@ -4,6 +4,10 @@
 		<meta charset="UTF-8" />
 		<meta name="viewport" content="width=device-width, initial-scale=1.0" />
 		<title>Discord Test Client</title>
+		<link rel="stylesheet" href="/assets/fosscord.css" />
+		<link id="logincss" rel="stylesheet" href="/assets/fosscord-login.css" />
+		<link id="customcss" rel="stylesheet" href="/assets/user.css" />
+		<!-- preload plugin marker -->
 	</head>
 
 	<body>
@@ -47,106 +51,25 @@
 				`{"trace":false,"canary":false,"logGatewayEvents":true,"logOverlayEvents":true,"logAnalyticsEvents":true,"sourceMapsEnabled":false,"axeEnabled":false}`
 			);
 
-			// Auto register guest account:
-			const prefix = [
-				"mysterious",
-				"adventurous",
-				"courageous",
-				"precious",
-				"cynical",
-				"despicable",
-				"suspicious",
-				"gorgeous",
-				"lovely",
-				"stunning",
-				"based",
-				"keyed",
-				"ratioed",
-				"twink",
-				"phoned"
-			];
-			const suffix = [
-				"Anonymous",
-				"Lurker",
-				"User",
-				"Enjoyer",
-				"Hunk",
-				"Top",
-				"Bottom",
-				"Sub",
-				"Coolstar",
-				"Wrestling",
-				"TylerTheCreator",
-				"Ad"
-			];
-
-			Array.prototype.random = function () {
-				return this[Math.floor(Math.random() * this.length)];
-			};
-
-			function _generateName() {
-				return `${prefix.random()}${suffix.random()}`;
-			}
-
-			const token = JSON.parse(localStorage.getItem("token"));
-			if (!token && location.pathname !== "/login" && location.pathname !== "/register") {
-				fetch(`${window.GLOBAL_ENV.API_ENDPOINT}/auth/register`, {
-					method: "POST",
-					headers: { "content-type": "application/json" },
-					body: JSON.stringify({ username: `${_generateName()}`, consent: true }) //${Date.now().toString().slice(-4)}
-				})
-					.then((x) => x.json())
-					.then((x) => {
-						localStorage.setItem("token", `"${x.token}"`);
-						if (!window.localStorage) {
-							// client already loaded -> need to reload to apply the newly registered user token
-							location.reload();
-						}
-					});
-			}
-
-			const supportedLocales = [
-				"bg",
-				"cs",
-				"da",
-				"de",
-				"el",
-				"en-GB",
-				"es-ES",
-				"fi",
-				"fr",
-				"hi",
-				"hr",
-				"hu",
-				"it",
-				"ja",
-				"ko",
-				"lt",
-				"nl",
-				"no",
-				"pl",
-				"pt-BR",
-				"ro",
-				"ru",
-				"sv-SE",
-				"th",
-				"tr",
-				"uk",
-				"vi",
-				"zh-CN",
-				"zh-TW"
-			];
+			setInterval(() => {
+				var token = JSON.parse(localStorage.getItem("token"));
+				if (token) {
+					document.querySelector("#logincss").remove();
+				}
+			}, 1000);
 
 			const settings = JSON.parse(localStorage.getItem("UserSettingsStore"));
-			if (settings && !supportedLocales.includes(settings.locale)) {
+			if (settings && settings.locale.length <= 2) {
 				// fix client locale wrong and client not loading at all
 				settings.locale = "en-US";
 				localStorage.setItem("UserSettingsStore", JSON.stringify(settings));
 			}
 		</script>
+		<script src="/assets/checkLocale.js"></script>
 		<script src="/assets/479a2f1e7d625dc134b9.js"></script>
 		<script src="/assets/a15fd133a1d2d77a2424.js"></script>
 		<script src="/assets/97e6fa22aa08ee4daa5e.js"></script>
 		<script src="/assets/9b2b7f0632acd0c5e781.js"></script>
+		<!-- plugin marker -->
 	</body>
 </html>
diff --git a/api/locales/ar/auth.json b/api/locales/ar/auth.json
index d60a0b35..e19547a0 100644
--- a/api/locales/ar/auth.json
+++ b/api/locales/ar/auth.json
@@ -1,16 +1,16 @@
 {
 	"login": {
-		"INVALID_LOGIN": "البريد الإلكتروني أو الهاتف غير موجود",
-		"INVALID_PASSWORD": "كلمة المرور غير صالحة",
+		"INVALID_LOGIN": "E-Mail or Phone not found",
+		"INVALID_PASSWORD": "Invalid Password",
 		"ACCOUNT_DISABLED": "This account is disabled"
 	},
 	"register": {
-		"REGISTRATION_DISABLED": "تم تعطيل تسجيل المستخدم الجديد",
-		"INVITE_ONLY": "يجب دعوتك للتسجيل",
-		"EMAIL_INVALID": "البريد الإلكتروني خاطئ",
-		"EMAIL_ALREADY_REGISTERED": "البريد الإلكتروني مسجل بالفعل",
-		"DATE_OF_BIRTH_UNDERAGE": "يجب أن تكون {{years}} سنة أو أكثر",
-		"CONSENT_REQUIRED": "يجب أن توافق على شروط الخدمة وسياسة الخصوصية.",
-		"USERNAME_TOO_MANY_USERS": "عدد كبير جدا من المستخدمين لديهم اسم المستخدم هذا، الرجاء محاولة اسم آخر"
+		"REGISTRATION_DISABLED": "New user registration is disabled",
+		"INVITE_ONLY": "You must be invited to register",
+		"EMAIL_INVALID": "Invalid Email",
+		"EMAIL_ALREADY_REGISTERED": "Email is already registered",
+		"DATE_OF_BIRTH_UNDERAGE": "You need to be {{years}} years or older",
+		"CONSENT_REQUIRED": "You must agree to the Terms of Service and Privacy Policy.",
+		"USERNAME_TOO_MANY_USERS": "Too many users have this username, please try another"
 	}
 }
diff --git a/api/locales/ar/common.json b/api/locales/ar/common.json
index 09a4915a..8bb9c042 100644
--- a/api/locales/ar/common.json
+++ b/api/locales/ar/common.json
@@ -1,18 +1,18 @@
 {
 	"field": {
-		"BASE_TYPE_REQUIRED": "هذا الحقل مطلوب",
-		"BASE_TYPE_STRING": "يجب أن يكون هذا الحقل سلسلة من الأحرف",
-		"BASE_TYPE_NUMBER": "يجب أن يكون هذا الحقل رقم",
-		"BASE_TYPE_BIGINT": "يجب أن يكون هذا الحقل أكبر",
-		"BASE_TYPE_BOOLEAN": "يجب أن يكون هذا الحقل منطقيا",
-		"BASE_TYPE_CHOICES": "يجب أن يكون هذا الحقل واحدا من ({{types}})",
-		"BASE_TYPE_CLASS": "يجب أن يكون هذا الحقل مثيل {{type}}",
-		"BASE_TYPE_OBJECT": "يجب أن يكون هذا الحقل كائناً",
-		"BASE_TYPE_ARRAY": "يجب أن يكون هذا الحقل مصفوفة",
-		"UNKOWN_FIELD": "مفتاح غير معروف: {{key}}",
-		"BASE_TYPE_CONSTANT": "يجب أن يكون هذا الحقل {{value}}",
-		"EMAIL_TYPE_INVALID_EMAIL": "عنوان البريد الإلكتروني ليس مشكّل جيدا",
-		"DATE_TYPE_PARSE": "لا يمكن تحليل {{date}}. يجب أن يكون ISO8601",
-		"BASE_TYPE_BAD_LENGTH": "يجب أن يكون بين {{length}} في الطول"
+		"BASE_TYPE_REQUIRED": "This field is required",
+		"BASE_TYPE_STRING": "This field must be a string",
+		"BASE_TYPE_NUMBER": "This field must be a number",
+		"BASE_TYPE_BIGINT": "This field must be a bigint",
+		"BASE_TYPE_BOOLEAN": "This field must be a boolean",
+		"BASE_TYPE_CHOICES": "This field must be one of ({{types}})",
+		"BASE_TYPE_CLASS": "This field must be an instance of {{type}}",
+		"BASE_TYPE_OBJECT": "This field must be an object",
+		"BASE_TYPE_ARRAY": "This field must be an array",
+		"UNKOWN_FIELD": "Unknown key: {{key}}",
+		"BASE_TYPE_CONSTANT": "This field must be {{value}}",
+		"EMAIL_TYPE_INVALID_EMAIL": "Not a well-formed email address",
+		"DATE_TYPE_PARSE": "Could not parse {{date}}. Should be ISO8601",
+		"BASE_TYPE_BAD_LENGTH": "Must be between {{length}} in length"
 	}
 }
diff --git a/api/locales/be/auth.json b/api/locales/be/auth.json
index b9ac5e2e..e19547a0 100644
--- a/api/locales/be/auth.json
+++ b/api/locales/be/auth.json
@@ -1,16 +1,16 @@
 {
 	"login": {
-		"INVALID_LOGIN": "Дадзены адрас электроннай пошты ці тэлефон не знойдзены",
-		"INVALID_PASSWORD": "Няправільны пароль",
+		"INVALID_LOGIN": "E-Mail or Phone not found",
+		"INVALID_PASSWORD": "Invalid Password",
 		"ACCOUNT_DISABLED": "This account is disabled"
 	},
 	"register": {
-		"REGISTRATION_DISABLED": "Рэгістрацыя новага карыстальніка адключана",
-		"INVITE_ONLY": "Вас павінны запрасіць, каб зарэгістравацца",
-		"EMAIL_INVALID": "Няправільны адрас электроннай пошты",
-		"EMAIL_ALREADY_REGISTERED": "Дадзены адрас электроннай пошты ўжо зарэгістраваны",
-		"DATE_OF_BIRTH_UNDERAGE": "Вам павінна быць не менш за {{years}} гадоў або больш",
-		"CONSENT_REQUIRED": "Вы павінны пагадзіцца з Умовамі прадастаўлення паслуг і Палітыкай прыватнасці.",
-		"USERNAME_TOO_MANY_USERS": "Занадта шмат карыстальнікаў маюць гэтае імя карыстальніка, калі ласка, паспрабуйце іншае"
+		"REGISTRATION_DISABLED": "New user registration is disabled",
+		"INVITE_ONLY": "You must be invited to register",
+		"EMAIL_INVALID": "Invalid Email",
+		"EMAIL_ALREADY_REGISTERED": "Email is already registered",
+		"DATE_OF_BIRTH_UNDERAGE": "You need to be {{years}} years or older",
+		"CONSENT_REQUIRED": "You must agree to the Terms of Service and Privacy Policy.",
+		"USERNAME_TOO_MANY_USERS": "Too many users have this username, please try another"
 	}
 }
diff --git a/api/locales/be/common.json b/api/locales/be/common.json
index 1b3115cc..8bb9c042 100644
--- a/api/locales/be/common.json
+++ b/api/locales/be/common.json
@@ -1,18 +1,18 @@
 {
 	"field": {
-		"BASE_TYPE_REQUIRED": "Гэта поле з'яўляецца абавязковым",
-		"BASE_TYPE_STRING": "Гэта поле павінна быць string",
-		"BASE_TYPE_NUMBER": "Гэта поле павінна быць number",
-		"BASE_TYPE_BIGINT": "Гэта поле павінна быць bigint",
-		"BASE_TYPE_BOOLEAN": "Гэта поле павінна быць boolean",
-		"BASE_TYPE_CHOICES": "Гэта поле павінна быць адным з ({{types}})",
-		"BASE_TYPE_CLASS": "Гэта поле павінна быць асобнікам {{type}}",
-		"BASE_TYPE_OBJECT": "Гэта поле павінна быць аб'ектам",
-		"BASE_TYPE_ARRAY": "Гэта поле павінна быць масівам",
-		"UNKOWN_FIELD": "Невядомае поле: {{key}}",
-		"BASE_TYPE_CONSTANT": "Гэта поле павінна быць {{value}}",
-		"EMAIL_TYPE_INVALID_EMAIL": "Няправільны фармат адрасы электроннай пошты",
-		"DATE_TYPE_PARSE": "Немагчыма разабраць {{date}}. Яна павінна быць у ISO8601",
-		"BASE_TYPE_BAD_LENGTH": "Павінна быць паміж {{length}} у даўжыню"
+		"BASE_TYPE_REQUIRED": "This field is required",
+		"BASE_TYPE_STRING": "This field must be a string",
+		"BASE_TYPE_NUMBER": "This field must be a number",
+		"BASE_TYPE_BIGINT": "This field must be a bigint",
+		"BASE_TYPE_BOOLEAN": "This field must be a boolean",
+		"BASE_TYPE_CHOICES": "This field must be one of ({{types}})",
+		"BASE_TYPE_CLASS": "This field must be an instance of {{type}}",
+		"BASE_TYPE_OBJECT": "This field must be an object",
+		"BASE_TYPE_ARRAY": "This field must be an array",
+		"UNKOWN_FIELD": "Unknown key: {{key}}",
+		"BASE_TYPE_CONSTANT": "This field must be {{value}}",
+		"EMAIL_TYPE_INVALID_EMAIL": "Not a well-formed email address",
+		"DATE_TYPE_PARSE": "Could not parse {{date}}. Should be ISO8601",
+		"BASE_TYPE_BAD_LENGTH": "Must be between {{length}} in length"
 	}
 }
diff --git a/api/locales/bg/auth.json b/api/locales/bg/auth.json
index 1dfd3568..e19547a0 100644
--- a/api/locales/bg/auth.json
+++ b/api/locales/bg/auth.json
@@ -1,16 +1,16 @@
 {
 	"login": {
-		"INVALID_LOGIN": "Невалиден имейл адрес или телефонен номер",
-		"INVALID_PASSWORD": "Невалидна парола",
+		"INVALID_LOGIN": "E-Mail or Phone not found",
+		"INVALID_PASSWORD": "Invalid Password",
 		"ACCOUNT_DISABLED": "This account is disabled"
 	},
 	"register": {
-		"REGISTRATION_DISABLED": "Регистрацията на нов потребител е деактивирана",
-		"INVITE_ONLY": "Вие трябва да бъдете поканени, за да можете да се регистрирате",
-		"EMAIL_INVALID": "Невалиден имейл",
-		"EMAIL_ALREADY_REGISTERED": "Имейлът вече е регистриран",
-		"DATE_OF_BIRTH_UNDERAGE": "Трябва да сте навършили {{years}} или повече години",
-		"CONSENT_REQUIRED": "Трябва да се съгласите с Общите условия и Политиката за поверителност.",
-		"USERNAME_TOO_MANY_USERS": "Твърде много потребители имат това потребителско име, моля опитайте друго"
+		"REGISTRATION_DISABLED": "New user registration is disabled",
+		"INVITE_ONLY": "You must be invited to register",
+		"EMAIL_INVALID": "Invalid Email",
+		"EMAIL_ALREADY_REGISTERED": "Email is already registered",
+		"DATE_OF_BIRTH_UNDERAGE": "You need to be {{years}} years or older",
+		"CONSENT_REQUIRED": "You must agree to the Terms of Service and Privacy Policy.",
+		"USERNAME_TOO_MANY_USERS": "Too many users have this username, please try another"
 	}
 }
diff --git a/api/locales/bg/common.json b/api/locales/bg/common.json
index dca90717..8bb9c042 100644
--- a/api/locales/bg/common.json
+++ b/api/locales/bg/common.json
@@ -1,18 +1,18 @@
 {
 	"field": {
-		"BASE_TYPE_REQUIRED": "Това поле е задължително",
-		"BASE_TYPE_STRING": "Това поле трябва да е низ",
-		"BASE_TYPE_NUMBER": "Това поле трябва да е число",
-		"BASE_TYPE_BIGINT": "Това поле трябва да е голямо",
-		"BASE_TYPE_BOOLEAN": "Това поле трябва да бъде булево",
-		"BASE_TYPE_CHOICES": "Това поле трябва да бъде едно от ({{types}})",
-		"BASE_TYPE_CLASS": "Това поле трябва да бъде екземпляр на {{type}}",
-		"BASE_TYPE_OBJECT": "Това поле трябва да бъде обект",
-		"BASE_TYPE_ARRAY": "Това поле трябва да бъде масив",
-		"UNKOWN_FIELD": "Непознат ключ: {{key}}",
-		"BASE_TYPE_CONSTANT": "Това поле трябва да е {{value}}",
-		"EMAIL_TYPE_INVALID_EMAIL": "Невалиден имейл адрес",
-		"DATE_TYPE_PARSE": "Не може да се анализира {{date}}. Трябва да е ISO8601",
-		"BASE_TYPE_BAD_LENGTH": "Трябва да е с дължина между {{length}}"
+		"BASE_TYPE_REQUIRED": "This field is required",
+		"BASE_TYPE_STRING": "This field must be a string",
+		"BASE_TYPE_NUMBER": "This field must be a number",
+		"BASE_TYPE_BIGINT": "This field must be a bigint",
+		"BASE_TYPE_BOOLEAN": "This field must be a boolean",
+		"BASE_TYPE_CHOICES": "This field must be one of ({{types}})",
+		"BASE_TYPE_CLASS": "This field must be an instance of {{type}}",
+		"BASE_TYPE_OBJECT": "This field must be an object",
+		"BASE_TYPE_ARRAY": "This field must be an array",
+		"UNKOWN_FIELD": "Unknown key: {{key}}",
+		"BASE_TYPE_CONSTANT": "This field must be {{value}}",
+		"EMAIL_TYPE_INVALID_EMAIL": "Not a well-formed email address",
+		"DATE_TYPE_PARSE": "Could not parse {{date}}. Should be ISO8601",
+		"BASE_TYPE_BAD_LENGTH": "Must be between {{length}} in length"
 	}
 }
diff --git a/api/locales/cs/auth.json b/api/locales/cs/auth.json
index 59fa4fcf..e19547a0 100644
--- a/api/locales/cs/auth.json
+++ b/api/locales/cs/auth.json
@@ -1,16 +1,16 @@
 {
 	"login": {
-		"INVALID_LOGIN": "E-Mail nebo telefon nenalezen",
-		"INVALID_PASSWORD": "Neplatné heslo",
-		"ACCOUNT_DISABLED": "Tento účet je vypnutý"
+		"INVALID_LOGIN": "E-Mail or Phone not found",
+		"INVALID_PASSWORD": "Invalid Password",
+		"ACCOUNT_DISABLED": "This account is disabled"
 	},
 	"register": {
-		"REGISTRATION_DISABLED": "Registrace nového uživatele je zakázána",
-		"INVITE_ONLY": "Musíte být pozváni k registraci",
-		"EMAIL_INVALID": "Neplatný E-mail",
-		"EMAIL_ALREADY_REGISTERED": "E-mail je již registrován",
-		"DATE_OF_BIRTH_UNDERAGE": "Musíš být {{years}} let nebo starší",
-		"CONSENT_REQUIRED": "Musíte souhlasit s obchodními podmínkami a zásadami ochrany osobních údajů.",
-		"USERNAME_TOO_MANY_USERS": "Příliš mnoho uživatelů má toto uživatelské jméno, zkuste prosím jiné"
+		"REGISTRATION_DISABLED": "New user registration is disabled",
+		"INVITE_ONLY": "You must be invited to register",
+		"EMAIL_INVALID": "Invalid Email",
+		"EMAIL_ALREADY_REGISTERED": "Email is already registered",
+		"DATE_OF_BIRTH_UNDERAGE": "You need to be {{years}} years or older",
+		"CONSENT_REQUIRED": "You must agree to the Terms of Service and Privacy Policy.",
+		"USERNAME_TOO_MANY_USERS": "Too many users have this username, please try another"
 	}
 }
diff --git a/api/locales/cs/common.json b/api/locales/cs/common.json
index 61d70a40..8bb9c042 100644
--- a/api/locales/cs/common.json
+++ b/api/locales/cs/common.json
@@ -1,18 +1,18 @@
 {
 	"field": {
-		"BASE_TYPE_REQUIRED": "Toto pole je povinné",
-		"BASE_TYPE_STRING": "Toto pole musí být řetězec",
-		"BASE_TYPE_NUMBER": "Toto pole musí být číslo",
-		"BASE_TYPE_BIGINT": "Toto pole musí být velké",
-		"BASE_TYPE_BOOLEAN": "Toto pole musí být logická hodnota",
-		"BASE_TYPE_CHOICES": "Toto pole musí být jedno z ({{types}})",
-		"BASE_TYPE_CLASS": "Toto pole musí být instancí {{type}}",
-		"BASE_TYPE_OBJECT": "Toto pole musí být objekt",
-		"BASE_TYPE_ARRAY": "Toto pole musí být pole",
-		"UNKOWN_FIELD": "Neznámý klíč: {{key}}",
-		"BASE_TYPE_CONSTANT": "Toto pole musí být {{value}}",
-		"EMAIL_TYPE_INVALID_EMAIL": "Není dobře vytvořená e-mailová adresa",
-		"DATE_TYPE_PARSE": "Nelze naparsovat {{date}}. Mělo by být ISO8601",
-		"BASE_TYPE_BAD_LENGTH": "Musí být mezi {{length}} délkou"
+		"BASE_TYPE_REQUIRED": "This field is required",
+		"BASE_TYPE_STRING": "This field must be a string",
+		"BASE_TYPE_NUMBER": "This field must be a number",
+		"BASE_TYPE_BIGINT": "This field must be a bigint",
+		"BASE_TYPE_BOOLEAN": "This field must be a boolean",
+		"BASE_TYPE_CHOICES": "This field must be one of ({{types}})",
+		"BASE_TYPE_CLASS": "This field must be an instance of {{type}}",
+		"BASE_TYPE_OBJECT": "This field must be an object",
+		"BASE_TYPE_ARRAY": "This field must be an array",
+		"UNKOWN_FIELD": "Unknown key: {{key}}",
+		"BASE_TYPE_CONSTANT": "This field must be {{value}}",
+		"EMAIL_TYPE_INVALID_EMAIL": "Not a well-formed email address",
+		"DATE_TYPE_PARSE": "Could not parse {{date}}. Should be ISO8601",
+		"BASE_TYPE_BAD_LENGTH": "Must be between {{length}} in length"
 	}
 }
diff --git a/api/locales/da/auth.json b/api/locales/da/auth.json
index 87465404..e19547a0 100644
--- a/api/locales/da/auth.json
+++ b/api/locales/da/auth.json
@@ -1,16 +1,16 @@
 {
 	"login": {
-		"INVALID_LOGIN": "E-mail eller telefon ikke fundet",
-		"INVALID_PASSWORD": "Ugyldig Adgangskode",
+		"INVALID_LOGIN": "E-Mail or Phone not found",
+		"INVALID_PASSWORD": "Invalid Password",
 		"ACCOUNT_DISABLED": "This account is disabled"
 	},
 	"register": {
-		"REGISTRATION_DISABLED": "Ny brugerregistrering er deaktiveret",
-		"INVITE_ONLY": "Du skal inviteres til at registrere dig",
+		"REGISTRATION_DISABLED": "New user registration is disabled",
+		"INVITE_ONLY": "You must be invited to register",
 		"EMAIL_INVALID": "Invalid Email",
-		"EMAIL_ALREADY_REGISTERED": "E-mail er allerede registreret",
-		"DATE_OF_BIRTH_UNDERAGE": "Du skal være {{years}} år eller ældre",
-		"CONSENT_REQUIRED": "Du skal acceptere Servicevilkår og privatlivspolitik.",
-		"USERNAME_TOO_MANY_USERS": "For mange brugere har dette brugernavn, prøv venligst et andet"
+		"EMAIL_ALREADY_REGISTERED": "Email is already registered",
+		"DATE_OF_BIRTH_UNDERAGE": "You need to be {{years}} years or older",
+		"CONSENT_REQUIRED": "You must agree to the Terms of Service and Privacy Policy.",
+		"USERNAME_TOO_MANY_USERS": "Too many users have this username, please try another"
 	}
 }
diff --git a/api/locales/da/common.json b/api/locales/da/common.json
index d307d064..8bb9c042 100644
--- a/api/locales/da/common.json
+++ b/api/locales/da/common.json
@@ -1,18 +1,18 @@
 {
 	"field": {
-		"BASE_TYPE_REQUIRED": "Dette felt er påkrævet",
-		"BASE_TYPE_STRING": "Dette felt skal være en streng",
-		"BASE_TYPE_NUMBER": "Dette felt skal være et tal",
-		"BASE_TYPE_BIGINT": "Dette felt skal være en bigint",
-		"BASE_TYPE_BOOLEAN": "Dette felt skal være en boolsk",
-		"BASE_TYPE_CHOICES": "Dette felt skal være et af ({{types}})",
-		"BASE_TYPE_CLASS": "Dette felt skal være en instans på {{type}}",
-		"BASE_TYPE_OBJECT": "Dette felt skal være et objekt",
-		"BASE_TYPE_ARRAY": "Dette felt skal være et array",
-		"UNKOWN_FIELD": "Ukendt nøgle: {{key}}",
-		"BASE_TYPE_CONSTANT": "Dette felt skal være {{value}}",
-		"EMAIL_TYPE_INVALID_EMAIL": "Ikke en velformet e-mailadresse",
-		"DATE_TYPE_PARSE": "Kunne ikke fortolke {{date}}. Bør være ISO8601",
-		"BASE_TYPE_BAD_LENGTH": "Skal være mellem {{length}} i længden"
+		"BASE_TYPE_REQUIRED": "This field is required",
+		"BASE_TYPE_STRING": "This field must be a string",
+		"BASE_TYPE_NUMBER": "This field must be a number",
+		"BASE_TYPE_BIGINT": "This field must be a bigint",
+		"BASE_TYPE_BOOLEAN": "This field must be a boolean",
+		"BASE_TYPE_CHOICES": "This field must be one of ({{types}})",
+		"BASE_TYPE_CLASS": "This field must be an instance of {{type}}",
+		"BASE_TYPE_OBJECT": "This field must be an object",
+		"BASE_TYPE_ARRAY": "This field must be an array",
+		"UNKOWN_FIELD": "Unknown key: {{key}}",
+		"BASE_TYPE_CONSTANT": "This field must be {{value}}",
+		"EMAIL_TYPE_INVALID_EMAIL": "Not a well-formed email address",
+		"DATE_TYPE_PARSE": "Could not parse {{date}}. Should be ISO8601",
+		"BASE_TYPE_BAD_LENGTH": "Must be between {{length}} in length"
 	}
 }
diff --git a/api/locales/de/common.json b/api/locales/de/common.json
index 39f38c49..8bb9c042 100644
--- a/api/locales/de/common.json
+++ b/api/locales/de/common.json
@@ -1,18 +1,18 @@
 {
 	"field": {
-		"BASE_TYPE_REQUIRED": "Dieses Feld ist erforderlich",
-		"BASE_TYPE_STRING": "Dieses Feld muss ein String sein",
-		"BASE_TYPE_NUMBER": "Dieses Feld muss eine Zahl sein",
-		"BASE_TYPE_BIGINT": "Dieses Feld muss ein bigint sein",
-		"BASE_TYPE_BOOLEAN": "Dieses Feld muss ein boolean sein",
-		"BASE_TYPE_CHOICES": "Dieses Feld muss eines von ({{types}}) sein",
-		"BASE_TYPE_CLASS": "Dieses Feld muss {{type}} sein",
-		"BASE_TYPE_OBJECT": "Dieses Feld muss ein Objekt sein",
-		"BASE_TYPE_ARRAY": "Dieses Feld muss ein Array sein",
-		"UNKOWN_FIELD": "Unbekanntes Feld: {{key}}",
-		"BASE_TYPE_CONSTANT": "Dieses Feld muss {{value}} sein",
-		"EMAIL_TYPE_INVALID_EMAIL": "Keine gültige E-Mail-Adresse",
-		"DATE_TYPE_PARSE": "Konnte {{date}} nicht lesen. Muss ISO8601 entsprechen",
-		"BASE_TYPE_BAD_LENGTH": "Muss zwischen {{length}} lang sein"
+		"BASE_TYPE_REQUIRED": "This field is required",
+		"BASE_TYPE_STRING": "This field must be a string",
+		"BASE_TYPE_NUMBER": "This field must be a number",
+		"BASE_TYPE_BIGINT": "This field must be a bigint",
+		"BASE_TYPE_BOOLEAN": "This field must be a boolean",
+		"BASE_TYPE_CHOICES": "This field must be one of ({{types}})",
+		"BASE_TYPE_CLASS": "This field must be an instance of {{type}}",
+		"BASE_TYPE_OBJECT": "This field must be an object",
+		"BASE_TYPE_ARRAY": "This field must be an array",
+		"UNKOWN_FIELD": "Unknown key: {{key}}",
+		"BASE_TYPE_CONSTANT": "This field must be {{value}}",
+		"EMAIL_TYPE_INVALID_EMAIL": "Not a well-formed email address",
+		"DATE_TYPE_PARSE": "Could not parse {{date}}. Should be ISO8601",
+		"BASE_TYPE_BAD_LENGTH": "Must be between {{length}} in length"
 	}
 }
diff --git a/api/locales/el/auth.json b/api/locales/el/auth.json
index 9315d590..e19547a0 100644
--- a/api/locales/el/auth.json
+++ b/api/locales/el/auth.json
@@ -1,16 +1,16 @@
 {
 	"login": {
-		"INVALID_LOGIN": "Το e-mail ή το τηλέφωνο δεν βρέθηκε",
-		"INVALID_PASSWORD": "Μη Έγκυρος Κωδικός",
+		"INVALID_LOGIN": "E-Mail or Phone not found",
+		"INVALID_PASSWORD": "Invalid Password",
 		"ACCOUNT_DISABLED": "This account is disabled"
 	},
 	"register": {
-		"REGISTRATION_DISABLED": "Η εγγραφή νέου χρήστη είναι απενεργοποιημένη",
-		"INVITE_ONLY": "Πρέπει να προσκληθείτε να εγγραφείτε",
+		"REGISTRATION_DISABLED": "New user registration is disabled",
+		"INVITE_ONLY": "You must be invited to register",
 		"EMAIL_INVALID": "Invalid Email",
-		"EMAIL_ALREADY_REGISTERED": "Το email έχει ήδη καταχωρηθεί",
-		"DATE_OF_BIRTH_UNDERAGE": "Πρέπει να είστε {{years}} ετών ή μεγαλύτεροι",
-		"CONSENT_REQUIRED": "Πρέπει να συμφωνήσετε με τους Όρους Παροχής Υπηρεσιών και την Πολιτική Απορρήτου.",
-		"USERNAME_TOO_MANY_USERS": "Πάρα πολλοί χρήστες έχουν αυτό το όνομα χρήστη, παρακαλώ δοκιμάστε ένα άλλο"
+		"EMAIL_ALREADY_REGISTERED": "Email is already registered",
+		"DATE_OF_BIRTH_UNDERAGE": "You need to be {{years}} years or older",
+		"CONSENT_REQUIRED": "You must agree to the Terms of Service and Privacy Policy.",
+		"USERNAME_TOO_MANY_USERS": "Too many users have this username, please try another"
 	}
 }
diff --git a/api/locales/el/common.json b/api/locales/el/common.json
index f4857cdc..8bb9c042 100644
--- a/api/locales/el/common.json
+++ b/api/locales/el/common.json
@@ -1,18 +1,18 @@
 {
 	"field": {
-		"BASE_TYPE_REQUIRED": "Αυτό το πεδίο είναι υποχρεωτικό",
-		"BASE_TYPE_STRING": "Αυτό το πεδίο πρέπει να είναι μια συμβολοσειρά",
-		"BASE_TYPE_NUMBER": "Αυτό το πεδίο πρέπει να είναι αριθμός",
-		"BASE_TYPE_BIGINT": "Αυτό το πεδίο πρέπει να είναι μεγαλοπρεπής",
-		"BASE_TYPE_BOOLEAN": "Αυτό το πεδίο πρέπει να είναι boolean",
-		"BASE_TYPE_CHOICES": "Αυτό το πεδίο πρέπει να είναι ένα από{{types}})",
-		"BASE_TYPE_CLASS": "Αυτό το πεδίο πρέπει να είναι ένα παράδειγμα {{type}}",
-		"BASE_TYPE_OBJECT": "Αυτό το πεδίο πρέπει να είναι αντικείμενο",
-		"BASE_TYPE_ARRAY": "Αυτό το πεδίο πρέπει να είναι ένας πίνακας",
-		"UNKOWN_FIELD": "Άγνωστο κλειδί: {{key}}",
-		"BASE_TYPE_CONSTANT": "Αυτό το πεδίο πρέπει να είναι {{value}}",
-		"EMAIL_TYPE_INVALID_EMAIL": "Δεν είναι καλά σχηματισμένη διεύθυνση ηλεκτρονικού ταχυδρομείου",
-		"DATE_TYPE_PARSE": "Αδυναμία ανάλυσης του {{date}}. Πρέπει να είναι ISO8601",
-		"BASE_TYPE_BAD_LENGTH": "Πρέπει να είναι μεταξύ {{length}} σε μήκος"
+		"BASE_TYPE_REQUIRED": "This field is required",
+		"BASE_TYPE_STRING": "This field must be a string",
+		"BASE_TYPE_NUMBER": "This field must be a number",
+		"BASE_TYPE_BIGINT": "This field must be a bigint",
+		"BASE_TYPE_BOOLEAN": "This field must be a boolean",
+		"BASE_TYPE_CHOICES": "This field must be one of ({{types}})",
+		"BASE_TYPE_CLASS": "This field must be an instance of {{type}}",
+		"BASE_TYPE_OBJECT": "This field must be an object",
+		"BASE_TYPE_ARRAY": "This field must be an array",
+		"UNKOWN_FIELD": "Unknown key: {{key}}",
+		"BASE_TYPE_CONSTANT": "This field must be {{value}}",
+		"EMAIL_TYPE_INVALID_EMAIL": "Not a well-formed email address",
+		"DATE_TYPE_PARSE": "Could not parse {{date}}. Should be ISO8601",
+		"BASE_TYPE_BAD_LENGTH": "Must be between {{length}} in length"
 	}
 }
diff --git a/api/locales/eo/auth.json b/api/locales/eo/auth.json
index 2d0f7de9..e19547a0 100644
--- a/api/locales/eo/auth.json
+++ b/api/locales/eo/auth.json
@@ -1,16 +1,16 @@
 {
 	"login": {
-		"INVALID_LOGIN": "E-Mail aŭ Telefonnumero ne trovis",
-		"INVALID_PASSWORD": "Pasfrazo ne validas",
+		"INVALID_LOGIN": "E-Mail or Phone not found",
+		"INVALID_PASSWORD": "Invalid Password",
 		"ACCOUNT_DISABLED": "This account is disabled"
 	},
 	"register": {
-		"REGISTRATION_DISABLED": "Nova uzanta reĝistro estas malebligita",
-		"INVITE_ONLY": "Vi devas esti invitita de iu membro",
-		"EMAIL_INVALID": "Retpoŝto ne estas valida",
-		"EMAIL_ALREADY_REGISTERED": "Tiu retpoŝto estas jam registrita",
-		"DATE_OF_BIRTH_UNDERAGE": "Vi povas esti {{years}} jaroj aŭ pli aĝa",
-		"CONSENT_REQUIRED": "Vi devi konsenti Kondiĉo de Servo kaj Politiko de privateco.",
-		"USERNAME_TOO_MANY_USERS": "Pli multaj uzantoj havas tiu salutnomo, bonvolu provi ankoraŭ"
+		"REGISTRATION_DISABLED": "New user registration is disabled",
+		"INVITE_ONLY": "You must be invited to register",
+		"EMAIL_INVALID": "Invalid Email",
+		"EMAIL_ALREADY_REGISTERED": "Email is already registered",
+		"DATE_OF_BIRTH_UNDERAGE": "You need to be {{years}} years or older",
+		"CONSENT_REQUIRED": "You must agree to the Terms of Service and Privacy Policy.",
+		"USERNAME_TOO_MANY_USERS": "Too many users have this username, please try another"
 	}
 }
diff --git a/api/locales/eo/common.json b/api/locales/eo/common.json
index 76a72960..8bb9c042 100644
--- a/api/locales/eo/common.json
+++ b/api/locales/eo/common.json
@@ -1,18 +1,18 @@
 {
 	"field": {
-		"BASE_TYPE_REQUIRED": "Tio kampo estas bezona",
-		"BASE_TYPE_STRING": "Tio kampo devas string",
-		"BASE_TYPE_NUMBER": "Tio kampo devas numbero",
-		"BASE_TYPE_BIGINT": "Tio kampo devas bigint",
-		"BASE_TYPE_BOOLEAN": "Tio kampo devas bulea",
-		"BASE_TYPE_CHOICES": "Tio kampo devas unu de ({{types}})",
-		"BASE_TYPE_CLASS": "Tio kampo devas kazo de {{type}}",
-		"BASE_TYPE_OBJECT": "Tio kampo devas objekto",
-		"BASE_TYPE_ARRAY": "Tio kampo devas tabelo",
-		"UNKOWN_FIELD": "Nekonata ŝlosilo: {{key}}",
-		"BASE_TYPE_CONSTANT": "Tio kampo devas {{value}}",
-		"EMAIL_TYPE_INVALID_EMAIL": "Formado de retpoŝto estas nevalida",
-		"DATE_TYPE_PARSE": "Nevalida dato {{date}}. Devas ISO8601",
-		"BASE_TYPE_BAD_LENGTH": "Devas sub {{length}} en longo"
+		"BASE_TYPE_REQUIRED": "This field is required",
+		"BASE_TYPE_STRING": "This field must be a string",
+		"BASE_TYPE_NUMBER": "This field must be a number",
+		"BASE_TYPE_BIGINT": "This field must be a bigint",
+		"BASE_TYPE_BOOLEAN": "This field must be a boolean",
+		"BASE_TYPE_CHOICES": "This field must be one of ({{types}})",
+		"BASE_TYPE_CLASS": "This field must be an instance of {{type}}",
+		"BASE_TYPE_OBJECT": "This field must be an object",
+		"BASE_TYPE_ARRAY": "This field must be an array",
+		"UNKOWN_FIELD": "Unknown key: {{key}}",
+		"BASE_TYPE_CONSTANT": "This field must be {{value}}",
+		"EMAIL_TYPE_INVALID_EMAIL": "Not a well-formed email address",
+		"DATE_TYPE_PARSE": "Could not parse {{date}}. Should be ISO8601",
+		"BASE_TYPE_BAD_LENGTH": "Must be between {{length}} in length"
 	}
 }
diff --git a/api/locales/es/auth.json b/api/locales/es/auth.json
index b7f96f80..e19547a0 100644
--- a/api/locales/es/auth.json
+++ b/api/locales/es/auth.json
@@ -1,16 +1,16 @@
 {
 	"login": {
-		"INVALID_LOGIN": "E-Mail o teléfono no encontrado",
-		"INVALID_PASSWORD": "Contraseña Incorrecta",
-		"ACCOUNT_DISABLED": "Esta cuenta está desactivada"
+		"INVALID_LOGIN": "E-Mail or Phone not found",
+		"INVALID_PASSWORD": "Invalid Password",
+		"ACCOUNT_DISABLED": "This account is disabled"
 	},
 	"register": {
-		"REGISTRATION_DISABLED": "El registro de un nuevo usuario no se encuentra habilitado",
-		"INVITE_ONLY": "Tenés que ser invitado para poder registrarte",
-		"EMAIL_INVALID": "Email inválido",
-		"EMAIL_ALREADY_REGISTERED": "Este E-mail ya está registrado",
-		"DATE_OF_BIRTH_UNDERAGE": "Necesitás tener {{years}} años o más",
-		"CONSENT_REQUIRED": "Tenés que aceptar los Términos de Servicio y la Política de Privacidad.",
-		"USERNAME_TOO_MANY_USERS": "Demasiados usuarios tienen este nombre de usuario, por favor intentá con otro"
+		"REGISTRATION_DISABLED": "New user registration is disabled",
+		"INVITE_ONLY": "You must be invited to register",
+		"EMAIL_INVALID": "Invalid Email",
+		"EMAIL_ALREADY_REGISTERED": "Email is already registered",
+		"DATE_OF_BIRTH_UNDERAGE": "You need to be {{years}} years or older",
+		"CONSENT_REQUIRED": "You must agree to the Terms of Service and Privacy Policy.",
+		"USERNAME_TOO_MANY_USERS": "Too many users have this username, please try another"
 	}
 }
diff --git a/api/locales/es/common.json b/api/locales/es/common.json
index f0a48bd4..8bb9c042 100644
--- a/api/locales/es/common.json
+++ b/api/locales/es/common.json
@@ -1,18 +1,18 @@
 {
 	"field": {
-		"BASE_TYPE_REQUIRED": "Este campo es obligatorio",
-		"BASE_TYPE_STRING": "Este campo debe ser un texto",
-		"BASE_TYPE_NUMBER": "Este campo debe ser un número",
-		"BASE_TYPE_BIGINT": "Este campo debe ser un tamaño grande",
-		"BASE_TYPE_BOOLEAN": "Este campo debe ser un boolean",
-		"BASE_TYPE_CHOICES": "Este campo debe ser uno de ({{types}})",
-		"BASE_TYPE_CLASS": "Este campo debe ser una instancia de {{type}}",
-		"BASE_TYPE_OBJECT": "Este campo debe ser un objeto",
-		"BASE_TYPE_ARRAY": "Este campo debe ser una matriz",
-		"UNKOWN_FIELD": "Clave desconocida: {{key}}",
-		"BASE_TYPE_CONSTANT": "Este campo debe ser {{value}}",
-		"EMAIL_TYPE_INVALID_EMAIL": "No es una dirección de email bien formada",
-		"DATE_TYPE_PARSE": "No se pudo analizar {{date}}. Debe ser ISO8601",
-		"BASE_TYPE_BAD_LENGTH": "Debe estar entre {{length}} de longitud"
+		"BASE_TYPE_REQUIRED": "This field is required",
+		"BASE_TYPE_STRING": "This field must be a string",
+		"BASE_TYPE_NUMBER": "This field must be a number",
+		"BASE_TYPE_BIGINT": "This field must be a bigint",
+		"BASE_TYPE_BOOLEAN": "This field must be a boolean",
+		"BASE_TYPE_CHOICES": "This field must be one of ({{types}})",
+		"BASE_TYPE_CLASS": "This field must be an instance of {{type}}",
+		"BASE_TYPE_OBJECT": "This field must be an object",
+		"BASE_TYPE_ARRAY": "This field must be an array",
+		"UNKOWN_FIELD": "Unknown key: {{key}}",
+		"BASE_TYPE_CONSTANT": "This field must be {{value}}",
+		"EMAIL_TYPE_INVALID_EMAIL": "Not a well-formed email address",
+		"DATE_TYPE_PARSE": "Could not parse {{date}}. Should be ISO8601",
+		"BASE_TYPE_BAD_LENGTH": "Must be between {{length}} in length"
 	}
 }
diff --git a/api/locales/fi/auth.json b/api/locales/fi/auth.json
index ba099f28..e19547a0 100644
--- a/api/locales/fi/auth.json
+++ b/api/locales/fi/auth.json
@@ -1,16 +1,16 @@
 {
 	"login": {
-		"INVALID_LOGIN": "Sähköpostia tai puhelinta ei löydy",
-		"INVALID_PASSWORD": "Virheellinen Salasana",
+		"INVALID_LOGIN": "E-Mail or Phone not found",
+		"INVALID_PASSWORD": "Invalid Password",
 		"ACCOUNT_DISABLED": "This account is disabled"
 	},
 	"register": {
-		"REGISTRATION_DISABLED": "Uuden käyttäjän rekisteröinti pois käytöstä",
-		"INVITE_ONLY": "Sinut on kutsuttava rekisteröitymään",
+		"REGISTRATION_DISABLED": "New user registration is disabled",
+		"INVITE_ONLY": "You must be invited to register",
 		"EMAIL_INVALID": "Invalid Email",
-		"EMAIL_ALREADY_REGISTERED": "Sähköposti on jo rekisteröity",
-		"DATE_OF_BIRTH_UNDERAGE": "Sinun täytyy olla {{years}} vuotta tai vanhempi",
-		"CONSENT_REQUIRED": "Sinun on hyväksyttävä käyttöehdot ja tietosuojakäytäntö.",
-		"USERNAME_TOO_MANY_USERS": "Liian monilla käyttäjillä on tämä käyttäjänimi, yritä toista"
+		"EMAIL_ALREADY_REGISTERED": "Email is already registered",
+		"DATE_OF_BIRTH_UNDERAGE": "You need to be {{years}} years or older",
+		"CONSENT_REQUIRED": "You must agree to the Terms of Service and Privacy Policy.",
+		"USERNAME_TOO_MANY_USERS": "Too many users have this username, please try another"
 	}
 }
diff --git a/api/locales/fi/common.json b/api/locales/fi/common.json
index 80a73715..8bb9c042 100644
--- a/api/locales/fi/common.json
+++ b/api/locales/fi/common.json
@@ -1,18 +1,18 @@
 {
 	"field": {
-		"BASE_TYPE_REQUIRED": "Tämä kenttä on pakollinen",
-		"BASE_TYPE_STRING": "Tämän kentän on oltava merkkijono",
-		"BASE_TYPE_NUMBER": "Tämän kentän on oltava numero",
-		"BASE_TYPE_BIGINT": "Tämän kentän on oltava isoin",
-		"BASE_TYPE_BOOLEAN": "Tämän kentän on oltava totuus",
-		"BASE_TYPE_CHOICES": "Tämän kentän on oltava yksi ({{types}})",
-		"BASE_TYPE_CLASS": "Tämän kentän on oltava {{type}} instanssi",
-		"BASE_TYPE_OBJECT": "Tämän kentän on oltava objekti",
-		"BASE_TYPE_ARRAY": "Tämän kentän on oltava array",
-		"UNKOWN_FIELD": "Tuntematon avain: {{key}}",
-		"BASE_TYPE_CONSTANT": "Tämän kentän on oltava {{value}}",
-		"EMAIL_TYPE_INVALID_EMAIL": "Sähköpostiosoite ei ole hyvin muodostettu",
-		"DATE_TYPE_PARSE": "Ei voitu jäsentää {{date}}. Pitäisi olla ISO8601",
-		"BASE_TYPE_BAD_LENGTH": "Pituuden on oltava välillä {{length}}"
+		"BASE_TYPE_REQUIRED": "This field is required",
+		"BASE_TYPE_STRING": "This field must be a string",
+		"BASE_TYPE_NUMBER": "This field must be a number",
+		"BASE_TYPE_BIGINT": "This field must be a bigint",
+		"BASE_TYPE_BOOLEAN": "This field must be a boolean",
+		"BASE_TYPE_CHOICES": "This field must be one of ({{types}})",
+		"BASE_TYPE_CLASS": "This field must be an instance of {{type}}",
+		"BASE_TYPE_OBJECT": "This field must be an object",
+		"BASE_TYPE_ARRAY": "This field must be an array",
+		"UNKOWN_FIELD": "Unknown key: {{key}}",
+		"BASE_TYPE_CONSTANT": "This field must be {{value}}",
+		"EMAIL_TYPE_INVALID_EMAIL": "Not a well-formed email address",
+		"DATE_TYPE_PARSE": "Could not parse {{date}}. Should be ISO8601",
+		"BASE_TYPE_BAD_LENGTH": "Must be between {{length}} in length"
 	}
 }
diff --git a/api/locales/fr/auth.json b/api/locales/fr/auth.json
index eb9eef98..e19547a0 100644
--- a/api/locales/fr/auth.json
+++ b/api/locales/fr/auth.json
@@ -1,16 +1,16 @@
 {
 	"login": {
-		"INVALID_LOGIN": "E-Mail ou Téléphone introuvable",
-		"INVALID_PASSWORD": "Mot de passe invalide",
+		"INVALID_LOGIN": "E-Mail or Phone not found",
+		"INVALID_PASSWORD": "Invalid Password",
 		"ACCOUNT_DISABLED": "This account is disabled"
 	},
 	"register": {
-		"REGISTRATION_DISABLED": "L'inscription aux nouveaux utilisateurs est désactivée",
-		"INVITE_ONLY": "Vous devez être invité à s'inscrire",
-		"EMAIL_INVALID": "Adresse e-mail invalide",
-		"EMAIL_ALREADY_REGISTERED": "L'adresse e-mail est déjà enregistrée",
-		"DATE_OF_BIRTH_UNDERAGE": "Vous devez avoir {{years}} ans ou plus",
-		"CONSENT_REQUIRED": "Vous devez accepter les conditions d'utilisation et la politique de confidentialité.",
-		"USERNAME_TOO_MANY_USERS": "Trop d'utilisateurs ont ce nom d'utilisateur, veuillez en essayer un autre"
+		"REGISTRATION_DISABLED": "New user registration is disabled",
+		"INVITE_ONLY": "You must be invited to register",
+		"EMAIL_INVALID": "Invalid Email",
+		"EMAIL_ALREADY_REGISTERED": "Email is already registered",
+		"DATE_OF_BIRTH_UNDERAGE": "You need to be {{years}} years or older",
+		"CONSENT_REQUIRED": "You must agree to the Terms of Service and Privacy Policy.",
+		"USERNAME_TOO_MANY_USERS": "Too many users have this username, please try another"
 	}
 }
diff --git a/api/locales/fr/common.json b/api/locales/fr/common.json
index 33c56eb9..8bb9c042 100644
--- a/api/locales/fr/common.json
+++ b/api/locales/fr/common.json
@@ -1,18 +1,18 @@
 {
 	"field": {
-		"BASE_TYPE_REQUIRED": "Ce champ est obligatoire",
-		"BASE_TYPE_STRING": "Ce champ doit être une chaîne de caractères",
-		"BASE_TYPE_NUMBER": "Ce champ doit être un nombre",
-		"BASE_TYPE_BIGINT": "Ce champ doit être un bigint",
-		"BASE_TYPE_BOOLEAN": "Ce champ doit être un boolean",
-		"BASE_TYPE_CHOICES": "Ce champ doit être l'un des ({{types}})",
-		"BASE_TYPE_CLASS": "Ce champ doit être une instance de {{type}}",
-		"BASE_TYPE_OBJECT": "Ce champ doit être un objet",
-		"BASE_TYPE_ARRAY": "Ce champ doit être un tableau",
-		"UNKOWN_FIELD": "Clé inconnue: {{key}}",
-		"BASE_TYPE_CONSTANT": "Ce champ doit être {{value}}",
-		"EMAIL_TYPE_INVALID_EMAIL": "Adresse e-mail mal formaté",
-		"DATE_TYPE_PARSE": "Impossible d'analyser {{date}}. Doit être ISO8601",
-		"BASE_TYPE_BAD_LENGTH": "Doit être entre {{length}} de longueur"
+		"BASE_TYPE_REQUIRED": "This field is required",
+		"BASE_TYPE_STRING": "This field must be a string",
+		"BASE_TYPE_NUMBER": "This field must be a number",
+		"BASE_TYPE_BIGINT": "This field must be a bigint",
+		"BASE_TYPE_BOOLEAN": "This field must be a boolean",
+		"BASE_TYPE_CHOICES": "This field must be one of ({{types}})",
+		"BASE_TYPE_CLASS": "This field must be an instance of {{type}}",
+		"BASE_TYPE_OBJECT": "This field must be an object",
+		"BASE_TYPE_ARRAY": "This field must be an array",
+		"UNKOWN_FIELD": "Unknown key: {{key}}",
+		"BASE_TYPE_CONSTANT": "This field must be {{value}}",
+		"EMAIL_TYPE_INVALID_EMAIL": "Not a well-formed email address",
+		"DATE_TYPE_PARSE": "Could not parse {{date}}. Should be ISO8601",
+		"BASE_TYPE_BAD_LENGTH": "Must be between {{length}} in length"
 	}
 }
diff --git a/api/locales/hi/auth.json b/api/locales/hi/auth.json
index 00c7586b..e19547a0 100644
--- a/api/locales/hi/auth.json
+++ b/api/locales/hi/auth.json
@@ -1,16 +1,16 @@
 {
 	"login": {
-		"INVALID_LOGIN": "ईमेल या फ़ोन नहीं मिला",
-		"INVALID_PASSWORD": "अमान्य पासवर्ड",
+		"INVALID_LOGIN": "E-Mail or Phone not found",
+		"INVALID_PASSWORD": "Invalid Password",
 		"ACCOUNT_DISABLED": "This account is disabled"
 	},
 	"register": {
-		"REGISTRATION_DISABLED": "नया उपयोगकर्ता पंजीकरण अक्षम है",
-		"INVITE_ONLY": "आपको पंजीकरण के लिए आमंत्रण किया गया है",
-		"EMAIL_INVALID": "अमान्य ई-मेल",
-		"EMAIL_ALREADY_REGISTERED": "ईमेल पहले से ही पंजीकृत है.",
-		"DATE_OF_BIRTH_UNDERAGE": "आपकी उम्र [[years]] वर्ष होनी चाहिए",
-		"CONSENT_REQUIRED": "आपको सेवाओं और गोपनीयता नीति से सहमत होना होगा",
-		"USERNAME_TOO_MANY_USERS": "बहुत से उपयोगकर्ताओं के पास यह उपयोगकर्ता नाम है, कृपया दूसरा प्रयास करें"
+		"REGISTRATION_DISABLED": "New user registration is disabled",
+		"INVITE_ONLY": "You must be invited to register",
+		"EMAIL_INVALID": "Invalid Email",
+		"EMAIL_ALREADY_REGISTERED": "Email is already registered",
+		"DATE_OF_BIRTH_UNDERAGE": "You need to be {{years}} years or older",
+		"CONSENT_REQUIRED": "You must agree to the Terms of Service and Privacy Policy.",
+		"USERNAME_TOO_MANY_USERS": "Too many users have this username, please try another"
 	}
 }
diff --git a/api/locales/hi/common.json b/api/locales/hi/common.json
index 0117eeee..8bb9c042 100644
--- a/api/locales/hi/common.json
+++ b/api/locales/hi/common.json
@@ -1,18 +1,18 @@
 {
 	"field": {
-		"BASE_TYPE_REQUIRED": "यह फ़ील्ड आवश्यक है",
-		"BASE_TYPE_STRING": "यह फ़ील्ड एक स्ट्रिंग होनी चाहिए",
-		"BASE_TYPE_NUMBER": "यह फ़ील्ड एक संख्या होनी चाहिए",
-		"BASE_TYPE_BIGINT": "यह फ़ील्ड एक बिगिन्ट होनी चाहिए",
-		"BASE_TYPE_BOOLEAN": "यह फ़ील्ड एक बूलियन होनी चाहिए",
-		"BASE_TYPE_CHOICES": "यह फ़ील्ड एक प्रकार का [[[types]]] होना चाहिए",
-		"BASE_TYPE_CLASS": "यह फ़ील्ड एक प्रकार का [[[types]]] होना चाहिए",
-		"BASE_TYPE_OBJECT": "यह फ़ील्ड एक ऑब्जेक्ट होनी चाहिए",
-		"BASE_TYPE_ARRAY": "यह फ़ील्ड एक ऐरे होनी चाहिए",
-		"UNKOWN_FIELD": "अज्ञात कुंजी: [[key]]",
-		"BASE_TYPE_CONSTANT": "यह क्षेत्र {{value}} होना चाहिए",
-		"EMAIL_TYPE_INVALID_EMAIL": "खराब ईमेल एड्रेस",
-		"DATE_TYPE_PARSE": "{{date}} की पदव्‍याख्‍या नहीं हो पाई है। ISO8601 होना चाहिए",
-		"BASE_TYPE_BAD_LENGTH": "लंबाई {{length}} के बीच में होनी चाहिए"
+		"BASE_TYPE_REQUIRED": "This field is required",
+		"BASE_TYPE_STRING": "This field must be a string",
+		"BASE_TYPE_NUMBER": "This field must be a number",
+		"BASE_TYPE_BIGINT": "This field must be a bigint",
+		"BASE_TYPE_BOOLEAN": "This field must be a boolean",
+		"BASE_TYPE_CHOICES": "This field must be one of ({{types}})",
+		"BASE_TYPE_CLASS": "This field must be an instance of {{type}}",
+		"BASE_TYPE_OBJECT": "This field must be an object",
+		"BASE_TYPE_ARRAY": "This field must be an array",
+		"UNKOWN_FIELD": "Unknown key: {{key}}",
+		"BASE_TYPE_CONSTANT": "This field must be {{value}}",
+		"EMAIL_TYPE_INVALID_EMAIL": "Not a well-formed email address",
+		"DATE_TYPE_PARSE": "Could not parse {{date}}. Should be ISO8601",
+		"BASE_TYPE_BAD_LENGTH": "Must be between {{length}} in length"
 	}
 }
diff --git a/api/locales/hr/auth.json b/api/locales/hr/auth.json
index 0f2c8456..e19547a0 100644
--- a/api/locales/hr/auth.json
+++ b/api/locales/hr/auth.json
@@ -1,16 +1,16 @@
 {
 	"login": {
-		"INVALID_LOGIN": "Email ili broj mobitela nije pronađen",
-		"INVALID_PASSWORD": "Pogrešna lozinka",
+		"INVALID_LOGIN": "E-Mail or Phone not found",
+		"INVALID_PASSWORD": "Invalid Password",
 		"ACCOUNT_DISABLED": "This account is disabled"
 	},
 	"register": {
-		"REGISTRATION_DISABLED": "Registracija novog korisnika je onemogućena",
-		"INVITE_ONLY": "Morate biti pozvani da se registrirate",
-		"EMAIL_INVALID": "Nevažeći email",
-		"EMAIL_ALREADY_REGISTERED": "Email je već registriran",
-		"DATE_OF_BIRTH_UNDERAGE": "Morate imati {{years}} godina ili više",
-		"CONSENT_REQUIRED": "Morate se složiti s uvjetima pružanja usluge i pravila o privatnosti.",
-		"USERNAME_TOO_MANY_USERS": "Previše korisnika ima ovo korisničko ime, molimo vas da pokušate sa drugim"
+		"REGISTRATION_DISABLED": "New user registration is disabled",
+		"INVITE_ONLY": "You must be invited to register",
+		"EMAIL_INVALID": "Invalid Email",
+		"EMAIL_ALREADY_REGISTERED": "Email is already registered",
+		"DATE_OF_BIRTH_UNDERAGE": "You need to be {{years}} years or older",
+		"CONSENT_REQUIRED": "You must agree to the Terms of Service and Privacy Policy.",
+		"USERNAME_TOO_MANY_USERS": "Too many users have this username, please try another"
 	}
 }
diff --git a/api/locales/hr/common.json b/api/locales/hr/common.json
index 4afc5794..8bb9c042 100644
--- a/api/locales/hr/common.json
+++ b/api/locales/hr/common.json
@@ -1,18 +1,18 @@
 {
 	"field": {
-		"BASE_TYPE_REQUIRED": "Ovo polje je obavezno",
-		"BASE_TYPE_STRING": "Ovo polje mora biti niz",
-		"BASE_TYPE_NUMBER": "Ovo polje mora biti broj",
-		"BASE_TYPE_BIGINT": "Ovo polje mora biti bigint",
-		"BASE_TYPE_BOOLEAN": "Ovo polje mora biti boolean",
-		"BASE_TYPE_CHOICES": "Ovo polje mora biti jedno od ({{types}})",
-		"BASE_TYPE_CLASS": "Ovo polje mora biti primjer od {{type}}",
-		"BASE_TYPE_OBJECT": "Ovo polje mora biti objekt",
-		"BASE_TYPE_ARRAY": "Ovo polje mora biti niz",
-		"UNKOWN_FIELD": "Nepoznati ključ: {{key}}",
-		"BASE_TYPE_CONSTANT": "Ovo polje mora biti {{value}}",
-		"EMAIL_TYPE_INVALID_EMAIL": "Nije dobro oblikovana Email adresa",
-		"DATE_TYPE_PARSE": "Nije moguće raščlaniti {{date}}. Treba biti ISO8601",
-		"BASE_TYPE_BAD_LENGTH": "Mora biti između {{length}} u duljini"
+		"BASE_TYPE_REQUIRED": "This field is required",
+		"BASE_TYPE_STRING": "This field must be a string",
+		"BASE_TYPE_NUMBER": "This field must be a number",
+		"BASE_TYPE_BIGINT": "This field must be a bigint",
+		"BASE_TYPE_BOOLEAN": "This field must be a boolean",
+		"BASE_TYPE_CHOICES": "This field must be one of ({{types}})",
+		"BASE_TYPE_CLASS": "This field must be an instance of {{type}}",
+		"BASE_TYPE_OBJECT": "This field must be an object",
+		"BASE_TYPE_ARRAY": "This field must be an array",
+		"UNKOWN_FIELD": "Unknown key: {{key}}",
+		"BASE_TYPE_CONSTANT": "This field must be {{value}}",
+		"EMAIL_TYPE_INVALID_EMAIL": "Not a well-formed email address",
+		"DATE_TYPE_PARSE": "Could not parse {{date}}. Should be ISO8601",
+		"BASE_TYPE_BAD_LENGTH": "Must be between {{length}} in length"
 	}
 }
diff --git a/api/locales/hu/auth.json b/api/locales/hu/auth.json
index cf2f7d06..e19547a0 100644
--- a/api/locales/hu/auth.json
+++ b/api/locales/hu/auth.json
@@ -1,16 +1,16 @@
 {
 	"login": {
-		"INVALID_LOGIN": "Nincs ilyen E-Mail vagy Telefon",
-		"INVALID_PASSWORD": "Érvénytelen jelszó",
-		"ACCOUNT_DISABLED": "Ez a fiók le van tiltva"
+		"INVALID_LOGIN": "E-Mail or Phone not found",
+		"INVALID_PASSWORD": "Invalid Password",
+		"ACCOUNT_DISABLED": "This account is disabled"
 	},
 	"register": {
-		"REGISTRATION_DISABLED": "Új felhasználók regisztrációja nem engedélyezett",
-		"INVITE_ONLY": "Csak meghívottak regisztrálhatnak",
-		"EMAIL_INVALID": "Érvénytelen Email",
-		"EMAIL_ALREADY_REGISTERED": "Az Email már regisztrálva van",
-		"DATE_OF_BIRTH_UNDERAGE": "{{years}} éves vagy idősebbnek kell lenned",
-		"CONSENT_REQUIRED": "El kell fogadnod a Felhasználási Feltételeket és az Adatvédelmi Nyilatkozatot.",
-		"USERNAME_TOO_MANY_USERS": "Túl sok felhasználó használja ezt a nevet, kérlek próbálj egy másikat"
+		"REGISTRATION_DISABLED": "New user registration is disabled",
+		"INVITE_ONLY": "You must be invited to register",
+		"EMAIL_INVALID": "Invalid Email",
+		"EMAIL_ALREADY_REGISTERED": "Email is already registered",
+		"DATE_OF_BIRTH_UNDERAGE": "You need to be {{years}} years or older",
+		"CONSENT_REQUIRED": "You must agree to the Terms of Service and Privacy Policy.",
+		"USERNAME_TOO_MANY_USERS": "Too many users have this username, please try another"
 	}
 }
diff --git a/api/locales/hu/common.json b/api/locales/hu/common.json
index 43bd2722..8bb9c042 100644
--- a/api/locales/hu/common.json
+++ b/api/locales/hu/common.json
@@ -1,18 +1,18 @@
 {
 	"field": {
-		"BASE_TYPE_REQUIRED": "Ez a mező kötelező",
-		"BASE_TYPE_STRING": "Ennek a mezőnek string-nek kell lennie",
-		"BASE_TYPE_NUMBER": "Ennek a mezőnek számnak kell lennie",
-		"BASE_TYPE_BIGINT": "Ennek a mezőnek bigint-nek kell lennie",
-		"BASE_TYPE_BOOLEAN": "Ennek a mezőnek boolean-nek kell lennie",
-		"BASE_TYPE_CHOICES": "Ennek a mezőnek {{types}} típusúnak kell lennie",
-		"BASE_TYPE_CLASS": "Ennek a mezőnek {{type}} típusúnak kell lennie",
-		"BASE_TYPE_OBJECT": "Ennek a mezőnek object-nek kell lennie",
-		"BASE_TYPE_ARRAY": "Ennek a mezőnek array-nek kell lennie",
-		"UNKOWN_FIELD": "Ismeretlen kulcs: {{key}}",
-		"BASE_TYPE_CONSTANT": "A mezőnek {{value}} kell lennie",
-		"EMAIL_TYPE_INVALID_EMAIL": "Nem jól megformázott email cím",
-		"DATE_TYPE_PARSE": "Nem sikerült elemezni {{date}}. ISO8901-nak kéne lennie",
-		"BASE_TYPE_BAD_LENGTH": "{{length}} között kell lennie hosszban"
+		"BASE_TYPE_REQUIRED": "This field is required",
+		"BASE_TYPE_STRING": "This field must be a string",
+		"BASE_TYPE_NUMBER": "This field must be a number",
+		"BASE_TYPE_BIGINT": "This field must be a bigint",
+		"BASE_TYPE_BOOLEAN": "This field must be a boolean",
+		"BASE_TYPE_CHOICES": "This field must be one of ({{types}})",
+		"BASE_TYPE_CLASS": "This field must be an instance of {{type}}",
+		"BASE_TYPE_OBJECT": "This field must be an object",
+		"BASE_TYPE_ARRAY": "This field must be an array",
+		"UNKOWN_FIELD": "Unknown key: {{key}}",
+		"BASE_TYPE_CONSTANT": "This field must be {{value}}",
+		"EMAIL_TYPE_INVALID_EMAIL": "Not a well-formed email address",
+		"DATE_TYPE_PARSE": "Could not parse {{date}}. Should be ISO8601",
+		"BASE_TYPE_BAD_LENGTH": "Must be between {{length}} in length"
 	}
 }
diff --git a/api/locales/it/auth.json b/api/locales/it/auth.json
index 3ba387e9..e19547a0 100644
--- a/api/locales/it/auth.json
+++ b/api/locales/it/auth.json
@@ -1,16 +1,16 @@
 {
 	"login": {
-		"INVALID_LOGIN": "E-Mail o numero di telefono non trovato",
-		"INVALID_PASSWORD": "Password Non Valida",
+		"INVALID_LOGIN": "E-Mail or Phone not found",
+		"INVALID_PASSWORD": "Invalid Password",
 		"ACCOUNT_DISABLED": "This account is disabled"
 	},
 	"register": {
-		"REGISTRATION_DISABLED": "La registrazione di nuovi utenti è disabilitata",
-		"INVITE_ONLY": "Devi essere stato invitato per registrarti",
-		"EMAIL_INVALID": "Indirizzo e-mail non valido",
-		"EMAIL_ALREADY_REGISTERED": "Email già registrata",
-		"DATE_OF_BIRTH_UNDERAGE": "Devi avere almeno {{years}} anni",
-		"CONSENT_REQUIRED": "È necessario accettare i Termini di Servizio e l'Informativa sulla privacy.",
-		"USERNAME_TOO_MANY_USERS": "Troppi utenti hanno questo nickname, per favore provane un altro"
+		"REGISTRATION_DISABLED": "New user registration is disabled",
+		"INVITE_ONLY": "You must be invited to register",
+		"EMAIL_INVALID": "Invalid Email",
+		"EMAIL_ALREADY_REGISTERED": "Email is already registered",
+		"DATE_OF_BIRTH_UNDERAGE": "You need to be {{years}} years or older",
+		"CONSENT_REQUIRED": "You must agree to the Terms of Service and Privacy Policy.",
+		"USERNAME_TOO_MANY_USERS": "Too many users have this username, please try another"
 	}
 }
diff --git a/api/locales/it/common.json b/api/locales/it/common.json
index 1faa3df0..8bb9c042 100644
--- a/api/locales/it/common.json
+++ b/api/locales/it/common.json
@@ -1,18 +1,18 @@
 {
 	"field": {
-		"BASE_TYPE_REQUIRED": "Questo campo è obbligatorio",
-		"BASE_TYPE_STRING": "Questo campo deve essere una stringa",
-		"BASE_TYPE_NUMBER": "Questo campo deve essere un numero",
-		"BASE_TYPE_BIGINT": "Questo campo deve essere un numero intero",
-		"BASE_TYPE_BOOLEAN": "Questo campo deve essere un numero booleano",
-		"BASE_TYPE_CHOICES": "Questo campo deve essere uno di ({{types}})",
-		"BASE_TYPE_CLASS": "Questo campo deve essere un'istanza di {{type}}",
-		"BASE_TYPE_OBJECT": "Questo campo deve essere un oggetto",
-		"BASE_TYPE_ARRAY": "Questo campo deve essere un array",
-		"UNKOWN_FIELD": "Chiave non riconosciuta: {{key}}",
-		"BASE_TYPE_CONSTANT": "Questo campo deve essere {{value}}",
-		"EMAIL_TYPE_INVALID_EMAIL": "Questo indirizzo e-mail non è in un formato valido",
-		"DATE_TYPE_PARSE": "Impossibile analizzare {{date}}. Dovrebbe essere ISO8601",
-		"BASE_TYPE_BAD_LENGTH": "Deve essere compreso tra {{length}} in lunghezza"
+		"BASE_TYPE_REQUIRED": "This field is required",
+		"BASE_TYPE_STRING": "This field must be a string",
+		"BASE_TYPE_NUMBER": "This field must be a number",
+		"BASE_TYPE_BIGINT": "This field must be a bigint",
+		"BASE_TYPE_BOOLEAN": "This field must be a boolean",
+		"BASE_TYPE_CHOICES": "This field must be one of ({{types}})",
+		"BASE_TYPE_CLASS": "This field must be an instance of {{type}}",
+		"BASE_TYPE_OBJECT": "This field must be an object",
+		"BASE_TYPE_ARRAY": "This field must be an array",
+		"UNKOWN_FIELD": "Unknown key: {{key}}",
+		"BASE_TYPE_CONSTANT": "This field must be {{value}}",
+		"EMAIL_TYPE_INVALID_EMAIL": "Not a well-formed email address",
+		"DATE_TYPE_PARSE": "Could not parse {{date}}. Should be ISO8601",
+		"BASE_TYPE_BAD_LENGTH": "Must be between {{length}} in length"
 	}
 }
diff --git a/api/locales/ja/auth.json b/api/locales/ja/auth.json
index 7a131bb7..e19547a0 100644
--- a/api/locales/ja/auth.json
+++ b/api/locales/ja/auth.json
@@ -1,16 +1,16 @@
 {
 	"login": {
-		"INVALID_LOGIN": "メールまたは電話が見つかりません",
-		"INVALID_PASSWORD": "無効なパスワード",
+		"INVALID_LOGIN": "E-Mail or Phone not found",
+		"INVALID_PASSWORD": "Invalid Password",
 		"ACCOUNT_DISABLED": "This account is disabled"
 	},
 	"register": {
-		"REGISTRATION_DISABLED": "新しいユーザー登録は無効です",
-		"INVITE_ONLY": "登録するには招待する必要があります",
+		"REGISTRATION_DISABLED": "New user registration is disabled",
+		"INVITE_ONLY": "You must be invited to register",
 		"EMAIL_INVALID": "Invalid Email",
-		"EMAIL_ALREADY_REGISTERED": "メールアドレスは既に登録されています",
-		"DATE_OF_BIRTH_UNDERAGE": "{{years}} 歳以上である必要があります",
-		"CONSENT_REQUIRED": "利用規約およびプライバシーポリシーに同意する必要があります。",
-		"USERNAME_TOO_MANY_USERS": "このユーザー名を持つユーザーが多すぎます。別のユーザーをお試しください。"
+		"EMAIL_ALREADY_REGISTERED": "Email is already registered",
+		"DATE_OF_BIRTH_UNDERAGE": "You need to be {{years}} years or older",
+		"CONSENT_REQUIRED": "You must agree to the Terms of Service and Privacy Policy.",
+		"USERNAME_TOO_MANY_USERS": "Too many users have this username, please try another"
 	}
 }
diff --git a/api/locales/ja/common.json b/api/locales/ja/common.json
index 687c04e2..8bb9c042 100644
--- a/api/locales/ja/common.json
+++ b/api/locales/ja/common.json
@@ -1,18 +1,18 @@
 {
 	"field": {
-		"BASE_TYPE_REQUIRED": "このフィールドは必須項目です",
-		"BASE_TYPE_STRING": "このフィールドは文字列でなければなりません",
-		"BASE_TYPE_NUMBER": "このフィールドは数値でなければなりません",
-		"BASE_TYPE_BIGINT": "このフィールドはbigintでなければなりません",
-		"BASE_TYPE_BOOLEAN": "このフィールドはブール値でなければなりません",
-		"BASE_TYPE_CHOICES": "このフィールドは ({{types}} ) のいずれかでなければなりません",
-		"BASE_TYPE_CLASS": "このフィールドは {{type}} のインスタンスでなければなりません",
-		"BASE_TYPE_OBJECT": "このフィールドはオブジェクトでなければなりません",
-		"BASE_TYPE_ARRAY": "このフィールドは配列でなければなりません",
-		"UNKOWN_FIELD": "不明なキー: {{key}}",
-		"BASE_TYPE_CONSTANT": "このフィールドは {{value}} でなければなりません",
-		"EMAIL_TYPE_INVALID_EMAIL": "メールアドレスが正しくありません",
-		"DATE_TYPE_PARSE": "{{date}}を解析できませんでした。ISO8601である必要があります",
-		"BASE_TYPE_BAD_LENGTH": "{{length}} 以内でなければなりません"
+		"BASE_TYPE_REQUIRED": "This field is required",
+		"BASE_TYPE_STRING": "This field must be a string",
+		"BASE_TYPE_NUMBER": "This field must be a number",
+		"BASE_TYPE_BIGINT": "This field must be a bigint",
+		"BASE_TYPE_BOOLEAN": "This field must be a boolean",
+		"BASE_TYPE_CHOICES": "This field must be one of ({{types}})",
+		"BASE_TYPE_CLASS": "This field must be an instance of {{type}}",
+		"BASE_TYPE_OBJECT": "This field must be an object",
+		"BASE_TYPE_ARRAY": "This field must be an array",
+		"UNKOWN_FIELD": "Unknown key: {{key}}",
+		"BASE_TYPE_CONSTANT": "This field must be {{value}}",
+		"EMAIL_TYPE_INVALID_EMAIL": "Not a well-formed email address",
+		"DATE_TYPE_PARSE": "Could not parse {{date}}. Should be ISO8601",
+		"BASE_TYPE_BAD_LENGTH": "Must be between {{length}} in length"
 	}
 }
diff --git a/api/locales/ko/auth.json b/api/locales/ko/auth.json
index 683ba78a..e19547a0 100644
--- a/api/locales/ko/auth.json
+++ b/api/locales/ko/auth.json
@@ -1,16 +1,16 @@
 {
 	"login": {
-		"INVALID_LOGIN": "이메일 또는 전화번호를 찾을 수 없습니다",
-		"INVALID_PASSWORD": "비밀번호가 틀렸습니다",
-		"ACCOUNT_DISABLED": "이 계정은 비활성화되었습니다"
+		"INVALID_LOGIN": "E-Mail or Phone not found",
+		"INVALID_PASSWORD": "Invalid Password",
+		"ACCOUNT_DISABLED": "This account is disabled"
 	},
 	"register": {
-		"REGISTRATION_DISABLED": "신규 사용자의 등록이 비활성화되었습니다",
-		"INVITE_ONLY": "초대받은 사람만 가입할 수 있습니다",
-		"EMAIL_INVALID": "이메일이 유효하지 않습니다",
-		"EMAIL_ALREADY_REGISTERED": "이미 등록된 이메일입니다",
-		"DATE_OF_BIRTH_UNDERAGE": "최소 {{years}} 이상이어야 합니다",
-		"CONSENT_REQUIRED": "서비스 약관 및 개인정보 취급방침에 동의하셔야 합니다.",
-		"USERNAME_TOO_MANY_USERS": "이 사용자명을 쓰는 사용자가 너무 많습니다. 다른 사용자명을 시도하세요"
+		"REGISTRATION_DISABLED": "New user registration is disabled",
+		"INVITE_ONLY": "You must be invited to register",
+		"EMAIL_INVALID": "Invalid Email",
+		"EMAIL_ALREADY_REGISTERED": "Email is already registered",
+		"DATE_OF_BIRTH_UNDERAGE": "You need to be {{years}} years or older",
+		"CONSENT_REQUIRED": "You must agree to the Terms of Service and Privacy Policy.",
+		"USERNAME_TOO_MANY_USERS": "Too many users have this username, please try another"
 	}
 }
diff --git a/api/locales/ko/common.json b/api/locales/ko/common.json
index bb521b37..8bb9c042 100644
--- a/api/locales/ko/common.json
+++ b/api/locales/ko/common.json
@@ -1,18 +1,18 @@
 {
 	"field": {
-		"BASE_TYPE_REQUIRED": "필수로 기입해야 합니다",
-		"BASE_TYPE_STRING": "문자열을 입력해야 합니다",
-		"BASE_TYPE_NUMBER": "숫자를 입력해야 합니다",
-		"BASE_TYPE_BIGINT": "bigint를 입력해야 합니다",
-		"BASE_TYPE_BOOLEAN": "논리값을 입력해야 합니다",
-		"BASE_TYPE_CHOICES": "값의 유형이 ({{types}}) 중 하나여야 합니다",
-		"BASE_TYPE_CLASS": "값의 유형이 {{type}}(이)여야 합니다",
-		"BASE_TYPE_OBJECT": "객체를 입력해야 합니다",
-		"BASE_TYPE_ARRAY": "배열을 입력해야 합니다",
-		"UNKOWN_FIELD": "알 수 없는 키: {{key}}",
-		"BASE_TYPE_CONSTANT": "{{value}}(을)를 입력해야 합니다",
-		"EMAIL_TYPE_INVALID_EMAIL": "올바른 이메일 주소 형식이 아닙니다",
-		"DATE_TYPE_PARSE": "{{date}} 형식을 분석할 수 없습니다. ISO8601을 따라야 합니다",
-		"BASE_TYPE_BAD_LENGTH": "길이가 {{length}} 사이여야 합니다"
+		"BASE_TYPE_REQUIRED": "This field is required",
+		"BASE_TYPE_STRING": "This field must be a string",
+		"BASE_TYPE_NUMBER": "This field must be a number",
+		"BASE_TYPE_BIGINT": "This field must be a bigint",
+		"BASE_TYPE_BOOLEAN": "This field must be a boolean",
+		"BASE_TYPE_CHOICES": "This field must be one of ({{types}})",
+		"BASE_TYPE_CLASS": "This field must be an instance of {{type}}",
+		"BASE_TYPE_OBJECT": "This field must be an object",
+		"BASE_TYPE_ARRAY": "This field must be an array",
+		"UNKOWN_FIELD": "Unknown key: {{key}}",
+		"BASE_TYPE_CONSTANT": "This field must be {{value}}",
+		"EMAIL_TYPE_INVALID_EMAIL": "Not a well-formed email address",
+		"DATE_TYPE_PARSE": "Could not parse {{date}}. Should be ISO8601",
+		"BASE_TYPE_BAD_LENGTH": "Must be between {{length}} in length"
 	}
 }
diff --git a/api/locales/lt/auth.json b/api/locales/lt/auth.json
index 20c1ac29..e19547a0 100644
--- a/api/locales/lt/auth.json
+++ b/api/locales/lt/auth.json
@@ -1,16 +1,16 @@
 {
 	"login": {
-		"INVALID_LOGIN": "El. Paštas ar telefonas nerastas",
-		"INVALID_PASSWORD": "Neteisingas slaptažodis",
-		"ACCOUNT_DISABLED": "Ši paskyra išjungta"
+		"INVALID_LOGIN": "E-Mail or Phone not found",
+		"INVALID_PASSWORD": "Invalid Password",
+		"ACCOUNT_DISABLED": "This account is disabled"
 	},
 	"register": {
-		"REGISTRATION_DISABLED": "Naujų vartotojų registracija išjungta",
-		"INVITE_ONLY": "Jūs turite būti pakviesti registruotis",
-		"EMAIL_INVALID": "Netinkamas el. pašto adresas",
-		"EMAIL_ALREADY_REGISTERED": "El. pašto adresas jau užregistruotas",
-		"DATE_OF_BIRTH_UNDERAGE": "Jūs turite būti {{years}} metų ar vyresni",
-		"CONSENT_REQUIRED": "Jūs turite sutikti su paslaugos teikimo sąlygomis ir privatumo politika.",
-		"USERNAME_TOO_MANY_USERS": "Per daug vartotojų turi šį vartotojo vardą, prašome naudoti kitą"
+		"REGISTRATION_DISABLED": "New user registration is disabled",
+		"INVITE_ONLY": "You must be invited to register",
+		"EMAIL_INVALID": "Invalid Email",
+		"EMAIL_ALREADY_REGISTERED": "Email is already registered",
+		"DATE_OF_BIRTH_UNDERAGE": "You need to be {{years}} years or older",
+		"CONSENT_REQUIRED": "You must agree to the Terms of Service and Privacy Policy.",
+		"USERNAME_TOO_MANY_USERS": "Too many users have this username, please try another"
 	}
 }
diff --git a/api/locales/lt/common.json b/api/locales/lt/common.json
index bc9ad022..8bb9c042 100644
--- a/api/locales/lt/common.json
+++ b/api/locales/lt/common.json
@@ -1,6 +1,6 @@
 {
 	"field": {
-		"BASE_TYPE_REQUIRED": "Šis laukelis privalomas",
+		"BASE_TYPE_REQUIRED": "This field is required",
 		"BASE_TYPE_STRING": "This field must be a string",
 		"BASE_TYPE_NUMBER": "This field must be a number",
 		"BASE_TYPE_BIGINT": "This field must be a bigint",
@@ -11,7 +11,7 @@
 		"BASE_TYPE_ARRAY": "This field must be an array",
 		"UNKOWN_FIELD": "Unknown key: {{key}}",
 		"BASE_TYPE_CONSTANT": "This field must be {{value}}",
-		"EMAIL_TYPE_INVALID_EMAIL": "Neteisingai suformuotas el. pašto adresas",
+		"EMAIL_TYPE_INVALID_EMAIL": "Not a well-formed email address",
 		"DATE_TYPE_PARSE": "Could not parse {{date}}. Should be ISO8601",
 		"BASE_TYPE_BAD_LENGTH": "Must be between {{length}} in length"
 	}
diff --git a/api/locales/nl/auth.json b/api/locales/nl/auth.json
index f45dd377..e19547a0 100644
--- a/api/locales/nl/auth.json
+++ b/api/locales/nl/auth.json
@@ -1,16 +1,16 @@
 {
 	"login": {
-		"INVALID_LOGIN": "E-mailadres of telefoon niet gevonden",
-		"INVALID_PASSWORD": "Ongeldig wachtwoord",
-		"ACCOUNT_DISABLED": "Dit account is verwijderd."
+		"INVALID_LOGIN": "E-Mail or Phone not found",
+		"INVALID_PASSWORD": "Invalid Password",
+		"ACCOUNT_DISABLED": "This account is disabled"
 	},
 	"register": {
-		"REGISTRATION_DISABLED": "Registratie voor nieuwe gebruikers is uitgeschakeld",
-		"INVITE_ONLY": "U moet worden uitgenodigd om te registreren",
-		"EMAIL_INVALID": "Email is ongeldig.",
-		"EMAIL_ALREADY_REGISTERED": "Dit e-mailadres is al geregistreerd",
-		"DATE_OF_BIRTH_UNDERAGE": "Je moet {{years}} jaar of ouder zijn",
-		"CONSENT_REQUIRED": "U moet akkoord gaan met de Algemene Voorwaarden en het Privacybeleid.",
-		"USERNAME_TOO_MANY_USERS": "Te veel gebruikers hebben deze gebruikersnaam, probeer een andere"
+		"REGISTRATION_DISABLED": "New user registration is disabled",
+		"INVITE_ONLY": "You must be invited to register",
+		"EMAIL_INVALID": "Invalid Email",
+		"EMAIL_ALREADY_REGISTERED": "Email is already registered",
+		"DATE_OF_BIRTH_UNDERAGE": "You need to be {{years}} years or older",
+		"CONSENT_REQUIRED": "You must agree to the Terms of Service and Privacy Policy.",
+		"USERNAME_TOO_MANY_USERS": "Too many users have this username, please try another"
 	}
 }
diff --git a/api/locales/nl/common.json b/api/locales/nl/common.json
index f18c1dcb..8bb9c042 100644
--- a/api/locales/nl/common.json
+++ b/api/locales/nl/common.json
@@ -1,18 +1,18 @@
 {
 	"field": {
-		"BASE_TYPE_REQUIRED": "Dit veld is verplicht",
-		"BASE_TYPE_STRING": "Dit veld moet een tekenreeks zijn",
-		"BASE_TYPE_NUMBER": "Dit veld moet een getal zijn",
-		"BASE_TYPE_BIGINT": "Dit veld moet een bigint zijn",
-		"BASE_TYPE_BOOLEAN": "Dit veld moet een Booleaanse waarde zijn",
-		"BASE_TYPE_CHOICES": "Dit veld moet een van ({{types}} ) zijn",
-		"BASE_TYPE_CLASS": "Dit veld moet een exemplaar zijn van {{type}}",
-		"BASE_TYPE_OBJECT": "Dit veld moet een object zijn",
-		"BASE_TYPE_ARRAY": "Dit veld moet een array zijn",
-		"UNKOWN_FIELD": "Onbekend sleutel: {{key}}",
-		"BASE_TYPE_CONSTANT": "Dit veld moet {{value}} zijn",
-		"EMAIL_TYPE_INVALID_EMAIL": "Niet een geldig e-mailadres",
-		"DATE_TYPE_PARSE": "Kan {{date}}niet parsen. Moet ISO8601 zijn",
-		"BASE_TYPE_BAD_LENGTH": "Moet tussen {{length}} in lengte zijn"
+		"BASE_TYPE_REQUIRED": "This field is required",
+		"BASE_TYPE_STRING": "This field must be a string",
+		"BASE_TYPE_NUMBER": "This field must be a number",
+		"BASE_TYPE_BIGINT": "This field must be a bigint",
+		"BASE_TYPE_BOOLEAN": "This field must be a boolean",
+		"BASE_TYPE_CHOICES": "This field must be one of ({{types}})",
+		"BASE_TYPE_CLASS": "This field must be an instance of {{type}}",
+		"BASE_TYPE_OBJECT": "This field must be an object",
+		"BASE_TYPE_ARRAY": "This field must be an array",
+		"UNKOWN_FIELD": "Unknown key: {{key}}",
+		"BASE_TYPE_CONSTANT": "This field must be {{value}}",
+		"EMAIL_TYPE_INVALID_EMAIL": "Not a well-formed email address",
+		"DATE_TYPE_PARSE": "Could not parse {{date}}. Should be ISO8601",
+		"BASE_TYPE_BAD_LENGTH": "Must be between {{length}} in length"
 	}
 }
diff --git a/api/locales/no/auth.json b/api/locales/no/auth.json
index 2c0ea29e..e19547a0 100644
--- a/api/locales/no/auth.json
+++ b/api/locales/no/auth.json
@@ -1,16 +1,16 @@
 {
 	"login": {
-		"INVALID_LOGIN": "Fant ikke e-postadresse eller telefon",
-		"INVALID_PASSWORD": "Ugyldig passord",
+		"INVALID_LOGIN": "E-Mail or Phone not found",
+		"INVALID_PASSWORD": "Invalid Password",
 		"ACCOUNT_DISABLED": "This account is disabled"
 	},
 	"register": {
-		"REGISTRATION_DISABLED": "Ny brukerregistrering er deaktivert",
-		"INVITE_ONLY": "Du må bli invitert for å registrere deg",
+		"REGISTRATION_DISABLED": "New user registration is disabled",
+		"INVITE_ONLY": "You must be invited to register",
 		"EMAIL_INVALID": "Invalid Email",
-		"EMAIL_ALREADY_REGISTERED": "E-postadressen er allerede registrert",
-		"DATE_OF_BIRTH_UNDERAGE": "Du må være {{years}} eller eldre",
-		"CONSENT_REQUIRED": "Du må godta vilkårene for bruk og personvernerklæringen.",
-		"USERNAME_TOO_MANY_USERS": "For mange brukere har dette brukernavnet, prøv et annet"
+		"EMAIL_ALREADY_REGISTERED": "Email is already registered",
+		"DATE_OF_BIRTH_UNDERAGE": "You need to be {{years}} years or older",
+		"CONSENT_REQUIRED": "You must agree to the Terms of Service and Privacy Policy.",
+		"USERNAME_TOO_MANY_USERS": "Too many users have this username, please try another"
 	}
 }
diff --git a/api/locales/no/common.json b/api/locales/no/common.json
index ab58a24e..8bb9c042 100644
--- a/api/locales/no/common.json
+++ b/api/locales/no/common.json
@@ -1,18 +1,18 @@
 {
 	"field": {
-		"BASE_TYPE_REQUIRED": "Dette feltet er obligatorisk",
-		"BASE_TYPE_STRING": "Dette feltet må være en streng",
-		"BASE_TYPE_NUMBER": "Dette feltet må være et tall",
-		"BASE_TYPE_BIGINT": "Dette feltet må være en stor",
-		"BASE_TYPE_BOOLEAN": "Dette feltet må være en boolsk verdi",
-		"BASE_TYPE_CHOICES": "Dette feltet må være ett av ({{types}})",
-		"BASE_TYPE_CLASS": "Dette feltet må være en forekomst av {{type}}",
-		"BASE_TYPE_OBJECT": "Dette feltet må være et objekt",
-		"BASE_TYPE_ARRAY": "Dette feltet må være en liste",
-		"UNKOWN_FIELD": "Ukjent nøkkel: {{key}}",
-		"BASE_TYPE_CONSTANT": "Dette feltet må være {{value}}",
-		"EMAIL_TYPE_INVALID_EMAIL": "Ikke et gyldig e-postadresse format",
-		"DATE_TYPE_PARSE": "Kunne ikke analysere {{date}}. Skal være ISO8601",
-		"BASE_TYPE_BAD_LENGTH": "Må være mellom {{length}} i lengde"
+		"BASE_TYPE_REQUIRED": "This field is required",
+		"BASE_TYPE_STRING": "This field must be a string",
+		"BASE_TYPE_NUMBER": "This field must be a number",
+		"BASE_TYPE_BIGINT": "This field must be a bigint",
+		"BASE_TYPE_BOOLEAN": "This field must be a boolean",
+		"BASE_TYPE_CHOICES": "This field must be one of ({{types}})",
+		"BASE_TYPE_CLASS": "This field must be an instance of {{type}}",
+		"BASE_TYPE_OBJECT": "This field must be an object",
+		"BASE_TYPE_ARRAY": "This field must be an array",
+		"UNKOWN_FIELD": "Unknown key: {{key}}",
+		"BASE_TYPE_CONSTANT": "This field must be {{value}}",
+		"EMAIL_TYPE_INVALID_EMAIL": "Not a well-formed email address",
+		"DATE_TYPE_PARSE": "Could not parse {{date}}. Should be ISO8601",
+		"BASE_TYPE_BAD_LENGTH": "Must be between {{length}} in length"
 	}
 }
diff --git a/api/locales/ro/auth.json b/api/locales/ro/auth.json
index 929e2596..e19547a0 100644
--- a/api/locales/ro/auth.json
+++ b/api/locales/ro/auth.json
@@ -1,16 +1,16 @@
 {
 	"login": {
-		"INVALID_LOGIN": "E-mailul sau telefonul nu au fost găsite",
-		"INVALID_PASSWORD": "Parolă nevalidă",
+		"INVALID_LOGIN": "E-Mail or Phone not found",
+		"INVALID_PASSWORD": "Invalid Password",
 		"ACCOUNT_DISABLED": "This account is disabled"
 	},
 	"register": {
-		"REGISTRATION_DISABLED": "Înregistrarea noului utilizator este dezactivată",
-		"INVITE_ONLY": "Trebuie să fii invitat să te înregistrezi",
+		"REGISTRATION_DISABLED": "New user registration is disabled",
+		"INVITE_ONLY": "You must be invited to register",
 		"EMAIL_INVALID": "Invalid Email",
-		"EMAIL_ALREADY_REGISTERED": "E-mailul este deja înregistrat",
-		"DATE_OF_BIRTH_UNDERAGE": "Trebuie să ai {{years}} ani sau mai mult",
-		"CONSENT_REQUIRED": "Trebuie să fiți de acord cu Termenii de utilizare și Politica de confidențialitate.",
-		"USERNAME_TOO_MANY_USERS": "Prea mulți utilizatori au acest nume de utilizator, vă rugăm să încercați altul"
+		"EMAIL_ALREADY_REGISTERED": "Email is already registered",
+		"DATE_OF_BIRTH_UNDERAGE": "You need to be {{years}} years or older",
+		"CONSENT_REQUIRED": "You must agree to the Terms of Service and Privacy Policy.",
+		"USERNAME_TOO_MANY_USERS": "Too many users have this username, please try another"
 	}
 }
diff --git a/api/locales/ro/common.json b/api/locales/ro/common.json
index eec6d0d5..8bb9c042 100644
--- a/api/locales/ro/common.json
+++ b/api/locales/ro/common.json
@@ -1,18 +1,18 @@
 {
 	"field": {
-		"BASE_TYPE_REQUIRED": "Acest câmp este necesar",
-		"BASE_TYPE_STRING": "Acest câmp trebuie să fie un şir de caractere",
-		"BASE_TYPE_NUMBER": "Acest câmp trebuie să fie un număr",
-		"BASE_TYPE_BIGINT": "Acest câmp trebuie să fie mare",
-		"BASE_TYPE_BOOLEAN": "Acest câmp trebuie să fie un boolean",
-		"BASE_TYPE_CHOICES": "Acest câmp trebuie să fie unul din ({{types}})",
-		"BASE_TYPE_CLASS": "Acest câmp trebuie să fie o instanță de {{type}}",
-		"BASE_TYPE_OBJECT": "Acest câmp trebuie să fie un obiect",
-		"BASE_TYPE_ARRAY": "Acest câmp trebuie să fie un array",
-		"UNKOWN_FIELD": "Cheie necunoscută: {{key}}",
-		"BASE_TYPE_CONSTANT": "Acest câmp trebuie să fie {{value}}",
-		"EMAIL_TYPE_INVALID_EMAIL": "Adresa de email nu este bine formatata",
-		"DATE_TYPE_PARSE": "Nu s-a putut analiza {{date}}. Ar trebui să fie ISO8601",
-		"BASE_TYPE_BAD_LENGTH": "Trebuie să fie între {{length}} lungime"
+		"BASE_TYPE_REQUIRED": "This field is required",
+		"BASE_TYPE_STRING": "This field must be a string",
+		"BASE_TYPE_NUMBER": "This field must be a number",
+		"BASE_TYPE_BIGINT": "This field must be a bigint",
+		"BASE_TYPE_BOOLEAN": "This field must be a boolean",
+		"BASE_TYPE_CHOICES": "This field must be one of ({{types}})",
+		"BASE_TYPE_CLASS": "This field must be an instance of {{type}}",
+		"BASE_TYPE_OBJECT": "This field must be an object",
+		"BASE_TYPE_ARRAY": "This field must be an array",
+		"UNKOWN_FIELD": "Unknown key: {{key}}",
+		"BASE_TYPE_CONSTANT": "This field must be {{value}}",
+		"EMAIL_TYPE_INVALID_EMAIL": "Not a well-formed email address",
+		"DATE_TYPE_PARSE": "Could not parse {{date}}. Should be ISO8601",
+		"BASE_TYPE_BAD_LENGTH": "Must be between {{length}} in length"
 	}
 }
diff --git a/api/locales/ru/auth.json b/api/locales/ru/auth.json
index 26b3f5a7..e19547a0 100644
--- a/api/locales/ru/auth.json
+++ b/api/locales/ru/auth.json
@@ -1,16 +1,16 @@
 {
 	"login": {
-		"INVALID_LOGIN": "Данный адрес электронной почты или телефон не найден",
-		"INVALID_PASSWORD": "Неверный пароль",
-		"ACCOUNT_DISABLED": "Этот аккаунт отключён"
+		"INVALID_LOGIN": "E-Mail or Phone not found",
+		"INVALID_PASSWORD": "Invalid Password",
+		"ACCOUNT_DISABLED": "This account is disabled"
 	},
 	"register": {
-		"REGISTRATION_DISABLED": "Регистрация нового пользователя отключена",
-		"INVITE_ONLY": "Вы должны быть приглашены для регистрации",
-		"EMAIL_INVALID": "Неверный адрес электронной почты",
-		"EMAIL_ALREADY_REGISTERED": "Данный адрес электронной почты уже зарегистрирован",
-		"DATE_OF_BIRTH_UNDERAGE": "Вам должно быть {{years}} лет или старше",
-		"CONSENT_REQUIRED": "Вы должны согласиться с Условиями обслуживания и Политикой конфиденциальности.",
-		"USERNAME_TOO_MANY_USERS": "Слишком много пользователей имеют это имя пользователя, пожалуйста, попробуйте другое"
+		"REGISTRATION_DISABLED": "New user registration is disabled",
+		"INVITE_ONLY": "You must be invited to register",
+		"EMAIL_INVALID": "Invalid Email",
+		"EMAIL_ALREADY_REGISTERED": "Email is already registered",
+		"DATE_OF_BIRTH_UNDERAGE": "You need to be {{years}} years or older",
+		"CONSENT_REQUIRED": "You must agree to the Terms of Service and Privacy Policy.",
+		"USERNAME_TOO_MANY_USERS": "Too many users have this username, please try another"
 	}
 }
diff --git a/api/locales/ru/common.json b/api/locales/ru/common.json
index aff9677b..8bb9c042 100644
--- a/api/locales/ru/common.json
+++ b/api/locales/ru/common.json
@@ -1,18 +1,18 @@
 {
 	"field": {
-		"BASE_TYPE_REQUIRED": "Это поле является обязательным",
-		"BASE_TYPE_STRING": "Это поле должно быть string",
-		"BASE_TYPE_NUMBER": "Это поле должно быть number",
-		"BASE_TYPE_BIGINT": "Это поле должно быть bigint",
-		"BASE_TYPE_BOOLEAN": "Это поле должно быть boolean",
-		"BASE_TYPE_CHOICES": "Это поле должно быть одним из ({{types}})",
-		"BASE_TYPE_CLASS": "Это поле должно быть экземпляром {{type}}",
-		"BASE_TYPE_OBJECT": "Это поле должно быть объектом",
-		"BASE_TYPE_ARRAY": "Это поле должно быть массивом",
-		"UNKOWN_FIELD": "Неизвестное поле: {{key}}",
-		"BASE_TYPE_CONSTANT": "Это поле должно быть {{value}}",
-		"EMAIL_TYPE_INVALID_EMAIL": "Неправильный формат адреса электронной почты",
-		"DATE_TYPE_PARSE": "Не удалось разобрать {{date}}. Дата должна быть в ISO8601",
-		"BASE_TYPE_BAD_LENGTH": "Длина должна быть между {{length}} в длину"
+		"BASE_TYPE_REQUIRED": "This field is required",
+		"BASE_TYPE_STRING": "This field must be a string",
+		"BASE_TYPE_NUMBER": "This field must be a number",
+		"BASE_TYPE_BIGINT": "This field must be a bigint",
+		"BASE_TYPE_BOOLEAN": "This field must be a boolean",
+		"BASE_TYPE_CHOICES": "This field must be one of ({{types}})",
+		"BASE_TYPE_CLASS": "This field must be an instance of {{type}}",
+		"BASE_TYPE_OBJECT": "This field must be an object",
+		"BASE_TYPE_ARRAY": "This field must be an array",
+		"UNKOWN_FIELD": "Unknown key: {{key}}",
+		"BASE_TYPE_CONSTANT": "This field must be {{value}}",
+		"EMAIL_TYPE_INVALID_EMAIL": "Not a well-formed email address",
+		"DATE_TYPE_PARSE": "Could not parse {{date}}. Should be ISO8601",
+		"BASE_TYPE_BAD_LENGTH": "Must be between {{length}} in length"
 	}
 }
diff --git a/api/locales/sh/auth.json b/api/locales/sh/auth.json
index 0f2c8456..e19547a0 100644
--- a/api/locales/sh/auth.json
+++ b/api/locales/sh/auth.json
@@ -1,16 +1,16 @@
 {
 	"login": {
-		"INVALID_LOGIN": "Email ili broj mobitela nije pronađen",
-		"INVALID_PASSWORD": "Pogrešna lozinka",
+		"INVALID_LOGIN": "E-Mail or Phone not found",
+		"INVALID_PASSWORD": "Invalid Password",
 		"ACCOUNT_DISABLED": "This account is disabled"
 	},
 	"register": {
-		"REGISTRATION_DISABLED": "Registracija novog korisnika je onemogućena",
-		"INVITE_ONLY": "Morate biti pozvani da se registrirate",
-		"EMAIL_INVALID": "Nevažeći email",
-		"EMAIL_ALREADY_REGISTERED": "Email je već registriran",
-		"DATE_OF_BIRTH_UNDERAGE": "Morate imati {{years}} godina ili više",
-		"CONSENT_REQUIRED": "Morate se složiti s uvjetima pružanja usluge i pravila o privatnosti.",
-		"USERNAME_TOO_MANY_USERS": "Previše korisnika ima ovo korisničko ime, molimo vas da pokušate sa drugim"
+		"REGISTRATION_DISABLED": "New user registration is disabled",
+		"INVITE_ONLY": "You must be invited to register",
+		"EMAIL_INVALID": "Invalid Email",
+		"EMAIL_ALREADY_REGISTERED": "Email is already registered",
+		"DATE_OF_BIRTH_UNDERAGE": "You need to be {{years}} years or older",
+		"CONSENT_REQUIRED": "You must agree to the Terms of Service and Privacy Policy.",
+		"USERNAME_TOO_MANY_USERS": "Too many users have this username, please try another"
 	}
 }
diff --git a/api/locales/sh/common.json b/api/locales/sh/common.json
index 4afc5794..8bb9c042 100644
--- a/api/locales/sh/common.json
+++ b/api/locales/sh/common.json
@@ -1,18 +1,18 @@
 {
 	"field": {
-		"BASE_TYPE_REQUIRED": "Ovo polje je obavezno",
-		"BASE_TYPE_STRING": "Ovo polje mora biti niz",
-		"BASE_TYPE_NUMBER": "Ovo polje mora biti broj",
-		"BASE_TYPE_BIGINT": "Ovo polje mora biti bigint",
-		"BASE_TYPE_BOOLEAN": "Ovo polje mora biti boolean",
-		"BASE_TYPE_CHOICES": "Ovo polje mora biti jedno od ({{types}})",
-		"BASE_TYPE_CLASS": "Ovo polje mora biti primjer od {{type}}",
-		"BASE_TYPE_OBJECT": "Ovo polje mora biti objekt",
-		"BASE_TYPE_ARRAY": "Ovo polje mora biti niz",
-		"UNKOWN_FIELD": "Nepoznati ključ: {{key}}",
-		"BASE_TYPE_CONSTANT": "Ovo polje mora biti {{value}}",
-		"EMAIL_TYPE_INVALID_EMAIL": "Nije dobro oblikovana Email adresa",
-		"DATE_TYPE_PARSE": "Nije moguće raščlaniti {{date}}. Treba biti ISO8601",
-		"BASE_TYPE_BAD_LENGTH": "Mora biti između {{length}} u duljini"
+		"BASE_TYPE_REQUIRED": "This field is required",
+		"BASE_TYPE_STRING": "This field must be a string",
+		"BASE_TYPE_NUMBER": "This field must be a number",
+		"BASE_TYPE_BIGINT": "This field must be a bigint",
+		"BASE_TYPE_BOOLEAN": "This field must be a boolean",
+		"BASE_TYPE_CHOICES": "This field must be one of ({{types}})",
+		"BASE_TYPE_CLASS": "This field must be an instance of {{type}}",
+		"BASE_TYPE_OBJECT": "This field must be an object",
+		"BASE_TYPE_ARRAY": "This field must be an array",
+		"UNKOWN_FIELD": "Unknown key: {{key}}",
+		"BASE_TYPE_CONSTANT": "This field must be {{value}}",
+		"EMAIL_TYPE_INVALID_EMAIL": "Not a well-formed email address",
+		"DATE_TYPE_PARSE": "Could not parse {{date}}. Should be ISO8601",
+		"BASE_TYPE_BAD_LENGTH": "Must be between {{length}} in length"
 	}
 }
diff --git a/api/locales/sk/auth.json b/api/locales/sk/auth.json
index 52d96c70..e19547a0 100644
--- a/api/locales/sk/auth.json
+++ b/api/locales/sk/auth.json
@@ -1,16 +1,16 @@
 {
 	"login": {
-		"INVALID_LOGIN": "E-mail alebo Telefón nebol nájdený",
-		"INVALID_PASSWORD": "Neplatné Heslo",
-		"ACCOUNT_DISABLED": "Tento účet je deaktivovaný"
+		"INVALID_LOGIN": "E-Mail or Phone not found",
+		"INVALID_PASSWORD": "Invalid Password",
+		"ACCOUNT_DISABLED": "This account is disabled"
 	},
 	"register": {
-		"REGISTRATION_DISABLED": "Registrácia nového používateľa je zakázaná",
-		"INVITE_ONLY": "Na registráciu musíte byť pozvaní",
-		"EMAIL_INVALID": "Neplatný Email",
-		"EMAIL_ALREADY_REGISTERED": "Email je už zaregistrovaný",
-		"DATE_OF_BIRTH_UNDERAGE": "Musíte mať {{years}} alebo viac rokov",
-		"CONSENT_REQUIRED": "Musíte súhlasiť s Podmienkami používania služby a Zásadami ochrany osobných údajov.",
-		"USERNAME_TOO_MANY_USERS": "Toto používateľské meno má príliš veľa používateľov, skúste iné"
+		"REGISTRATION_DISABLED": "New user registration is disabled",
+		"INVITE_ONLY": "You must be invited to register",
+		"EMAIL_INVALID": "Invalid Email",
+		"EMAIL_ALREADY_REGISTERED": "Email is already registered",
+		"DATE_OF_BIRTH_UNDERAGE": "You need to be {{years}} years or older",
+		"CONSENT_REQUIRED": "You must agree to the Terms of Service and Privacy Policy.",
+		"USERNAME_TOO_MANY_USERS": "Too many users have this username, please try another"
 	}
 }
diff --git a/api/locales/sk/common.json b/api/locales/sk/common.json
index c7435665..8bb9c042 100644
--- a/api/locales/sk/common.json
+++ b/api/locales/sk/common.json
@@ -1,18 +1,18 @@
 {
 	"field": {
-		"BASE_TYPE_REQUIRED": "Toto pole je povinné",
-		"BASE_TYPE_STRING": "Toto pole musí byť slovo alebo veta",
-		"BASE_TYPE_NUMBER": "Toto pole musí byť číslo",
-		"BASE_TYPE_BIGINT": "Toto pole musí byť binárna číslica",
-		"BASE_TYPE_BOOLEAN": "Toto pole musí byť buď áno, alebo nie",
-		"BASE_TYPE_CHOICES": "Toto pole musí byť jedným z ({{types}})",
-		"BASE_TYPE_CLASS": "Toto pole musí byť inštanciou z {{type}}",
-		"BASE_TYPE_OBJECT": "Toto pole musí byť objekt",
-		"BASE_TYPE_ARRAY": "Toto pole musí byť pole",
-		"UNKOWN_FIELD": "Neznámy kľúč: {{key}}",
-		"BASE_TYPE_CONSTANT": "Toto pole musí byť {{value}}",
-		"EMAIL_TYPE_INVALID_EMAIL": "Nie je správne formulovaná emailová adresa",
-		"DATE_TYPE_PARSE": "Nepodarilo sa analyzovať {{date}}. Malo by byť ISO8601",
-		"BASE_TYPE_BAD_LENGTH": "Musí mať dĺžku medzi {{length}}"
+		"BASE_TYPE_REQUIRED": "This field is required",
+		"BASE_TYPE_STRING": "This field must be a string",
+		"BASE_TYPE_NUMBER": "This field must be a number",
+		"BASE_TYPE_BIGINT": "This field must be a bigint",
+		"BASE_TYPE_BOOLEAN": "This field must be a boolean",
+		"BASE_TYPE_CHOICES": "This field must be one of ({{types}})",
+		"BASE_TYPE_CLASS": "This field must be an instance of {{type}}",
+		"BASE_TYPE_OBJECT": "This field must be an object",
+		"BASE_TYPE_ARRAY": "This field must be an array",
+		"UNKOWN_FIELD": "Unknown key: {{key}}",
+		"BASE_TYPE_CONSTANT": "This field must be {{value}}",
+		"EMAIL_TYPE_INVALID_EMAIL": "Not a well-formed email address",
+		"DATE_TYPE_PARSE": "Could not parse {{date}}. Should be ISO8601",
+		"BASE_TYPE_BAD_LENGTH": "Must be between {{length}} in length"
 	}
 }
diff --git a/api/locales/sv/auth.json b/api/locales/sv/auth.json
index c94b0810..e19547a0 100644
--- a/api/locales/sv/auth.json
+++ b/api/locales/sv/auth.json
@@ -1,16 +1,16 @@
 {
 	"login": {
-		"INVALID_LOGIN": "E-post eller telefon hittades inte",
-		"INVALID_PASSWORD": "Ogiltigt lösenord",
+		"INVALID_LOGIN": "E-Mail or Phone not found",
+		"INVALID_PASSWORD": "Invalid Password",
 		"ACCOUNT_DISABLED": "This account is disabled"
 	},
 	"register": {
-		"REGISTRATION_DISABLED": "Registrering av nya användare är inaktiverat",
-		"INVITE_ONLY": "Du måste vara inbjuden för att registrera dig",
-		"EMAIL_INVALID": "Ogiltig e-post",
-		"EMAIL_ALREADY_REGISTERED": "E-postadressen är redan registrerad",
-		"DATE_OF_BIRTH_UNDERAGE": "Du måste vara {{years}} år eller äldre",
-		"CONSENT_REQUIRED": "Du måste godkänna användarvillkoren och sekretesspolicyn.",
-		"USERNAME_TOO_MANY_USERS": "För många användare har detta användarnamn, försök med ett annat"
+		"REGISTRATION_DISABLED": "New user registration is disabled",
+		"INVITE_ONLY": "You must be invited to register",
+		"EMAIL_INVALID": "Invalid Email",
+		"EMAIL_ALREADY_REGISTERED": "Email is already registered",
+		"DATE_OF_BIRTH_UNDERAGE": "You need to be {{years}} years or older",
+		"CONSENT_REQUIRED": "You must agree to the Terms of Service and Privacy Policy.",
+		"USERNAME_TOO_MANY_USERS": "Too many users have this username, please try another"
 	}
 }
diff --git a/api/locales/sv/common.json b/api/locales/sv/common.json
index 03ef05bc..8bb9c042 100644
--- a/api/locales/sv/common.json
+++ b/api/locales/sv/common.json
@@ -1,18 +1,18 @@
 {
 	"field": {
-		"BASE_TYPE_REQUIRED": "Detta fält är obligatoriskt",
-		"BASE_TYPE_STRING": "Detta fält måste vara en sträng",
-		"BASE_TYPE_NUMBER": "Detta fält måste vara ett nummer",
-		"BASE_TYPE_BIGINT": "Detta fält måste vara av typen bigint",
-		"BASE_TYPE_BOOLEAN": "Detta fält måste vara booleskt",
-		"BASE_TYPE_CHOICES": "Detta fält måste vara av typen av ett av följande ({{types}})",
-		"BASE_TYPE_CLASS": "Det här fältet måste vara en instans av {{type}}",
-		"BASE_TYPE_OBJECT": "Detta fält måste vara ett objekt",
-		"BASE_TYPE_ARRAY": "Detta fält måste vara en lista",
-		"UNKOWN_FIELD": "Okänd nyckel: {{key}}",
-		"BASE_TYPE_CONSTANT": "Det här fältet måste vara {{value}}",
-		"EMAIL_TYPE_INVALID_EMAIL": "E-postadressen har inte korrekt format",
-		"DATE_TYPE_PARSE": "Kunde inte tolka {{date}}. Bör vara ISO8601",
-		"BASE_TYPE_BAD_LENGTH": "Måste vara mellan {{length}} i längd"
+		"BASE_TYPE_REQUIRED": "This field is required",
+		"BASE_TYPE_STRING": "This field must be a string",
+		"BASE_TYPE_NUMBER": "This field must be a number",
+		"BASE_TYPE_BIGINT": "This field must be a bigint",
+		"BASE_TYPE_BOOLEAN": "This field must be a boolean",
+		"BASE_TYPE_CHOICES": "This field must be one of ({{types}})",
+		"BASE_TYPE_CLASS": "This field must be an instance of {{type}}",
+		"BASE_TYPE_OBJECT": "This field must be an object",
+		"BASE_TYPE_ARRAY": "This field must be an array",
+		"UNKOWN_FIELD": "Unknown key: {{key}}",
+		"BASE_TYPE_CONSTANT": "This field must be {{value}}",
+		"EMAIL_TYPE_INVALID_EMAIL": "Not a well-formed email address",
+		"DATE_TYPE_PARSE": "Could not parse {{date}}. Should be ISO8601",
+		"BASE_TYPE_BAD_LENGTH": "Must be between {{length}} in length"
 	}
 }
diff --git a/api/locales/te/auth.json b/api/locales/te/auth.json
new file mode 100644
index 00000000..e19547a0
--- /dev/null
+++ b/api/locales/te/auth.json
@@ -0,0 +1,16 @@
+{
+	"login": {
+		"INVALID_LOGIN": "E-Mail or Phone not found",
+		"INVALID_PASSWORD": "Invalid Password",
+		"ACCOUNT_DISABLED": "This account is disabled"
+	},
+	"register": {
+		"REGISTRATION_DISABLED": "New user registration is disabled",
+		"INVITE_ONLY": "You must be invited to register",
+		"EMAIL_INVALID": "Invalid Email",
+		"EMAIL_ALREADY_REGISTERED": "Email is already registered",
+		"DATE_OF_BIRTH_UNDERAGE": "You need to be {{years}} years or older",
+		"CONSENT_REQUIRED": "You must agree to the Terms of Service and Privacy Policy.",
+		"USERNAME_TOO_MANY_USERS": "Too many users have this username, please try another"
+	}
+}
diff --git a/api/locales/te/common.json b/api/locales/te/common.json
new file mode 100644
index 00000000..8bb9c042
--- /dev/null
+++ b/api/locales/te/common.json
@@ -0,0 +1,18 @@
+{
+	"field": {
+		"BASE_TYPE_REQUIRED": "This field is required",
+		"BASE_TYPE_STRING": "This field must be a string",
+		"BASE_TYPE_NUMBER": "This field must be a number",
+		"BASE_TYPE_BIGINT": "This field must be a bigint",
+		"BASE_TYPE_BOOLEAN": "This field must be a boolean",
+		"BASE_TYPE_CHOICES": "This field must be one of ({{types}})",
+		"BASE_TYPE_CLASS": "This field must be an instance of {{type}}",
+		"BASE_TYPE_OBJECT": "This field must be an object",
+		"BASE_TYPE_ARRAY": "This field must be an array",
+		"UNKOWN_FIELD": "Unknown key: {{key}}",
+		"BASE_TYPE_CONSTANT": "This field must be {{value}}",
+		"EMAIL_TYPE_INVALID_EMAIL": "Not a well-formed email address",
+		"DATE_TYPE_PARSE": "Could not parse {{date}}. Should be ISO8601",
+		"BASE_TYPE_BAD_LENGTH": "Must be between {{length}} in length"
+	}
+}
diff --git a/api/locales/tr/common.json b/api/locales/tr/common.json
index 8d8dafe0..1f99c1d5 100644
--- a/api/locales/tr/common.json
+++ b/api/locales/tr/common.json
@@ -3,12 +3,12 @@
 		"BASE_TYPE_REQUIRED": "Bu alan gereklidir",
 		"BASE_TYPE_STRING": "Bu alan bir metin (string) olmalı",
 		"BASE_TYPE_NUMBER": "Bu alan bir sayı olmalı",
-		"BASE_TYPE_BIGINT": "Bu alan büyük integer (bkz. bigint) değeri olmalıdır",
-		"BASE_TYPE_BOOLEAN": "Bu alan mantıksal değer (boolean) olmalıdır",
-		"BASE_TYPE_CHOICES": "Bu alan ({{types}}) lardan biri olmak zorunda",
+		"BASE_TYPE_BIGINT": "Bu alan uzun tamsayı değeri olmalıdır",
+		"BASE_TYPE_BOOLEAN": "Bu alan doğru/yanlış olmalıdır",
+		"BASE_TYPE_CHOICES": "Bu alan ({{types}}) tiplerinden biri olmalı",
 		"BASE_TYPE_CLASS": "Bu alan {{type}} türünden olmalı",
-		"BASE_TYPE_OBJECT": "Bu alan bir obje olmalı",
-		"BASE_TYPE_ARRAY": "Bu alan bir dizi (array) olmalı",
+		"BASE_TYPE_OBJECT": "Bu alan bir nesne olmalı",
+		"BASE_TYPE_ARRAY": "Bu alan bir dizi olmalı",
 		"UNKOWN_FIELD": "Bilinmeyen anahtar: {{key}}",
 		"BASE_TYPE_CONSTANT": "Bu alan {{value}} olmalı",
 		"EMAIL_TYPE_INVALID_EMAIL": "Geçerli bir e-posta adresi değil",
diff --git a/api/locales/uk/auth.json b/api/locales/uk/auth.json
index 76c4e500..e19547a0 100644
--- a/api/locales/uk/auth.json
+++ b/api/locales/uk/auth.json
@@ -1,16 +1,16 @@
 {
 	"login": {
-		"INVALID_LOGIN": "E-Mail або телефон не знайдено",
-		"INVALID_PASSWORD": "Невірний пароль",
+		"INVALID_LOGIN": "E-Mail or Phone not found",
+		"INVALID_PASSWORD": "Invalid Password",
 		"ACCOUNT_DISABLED": "This account is disabled"
 	},
 	"register": {
-		"REGISTRATION_DISABLED": "Реєстрація нового користувача вимкнута",
-		"INVITE_ONLY": "Ви повинні бути запрошені до реєстрації",
+		"REGISTRATION_DISABLED": "New user registration is disabled",
+		"INVITE_ONLY": "You must be invited to register",
 		"EMAIL_INVALID": "Invalid Email",
-		"EMAIL_ALREADY_REGISTERED": "Цю адресу електронної пошти вже зареєстровано",
-		"DATE_OF_BIRTH_UNDERAGE": "Ви повинні бути {{years}} роками або старше",
-		"CONSENT_REQUIRED": "Ви повинні погодитися з Правилами користування сервісом і політикою конфіденційності.",
-		"USERNAME_TOO_MANY_USERS": "Надто багато користувачів з таким іменем користувача, будь ласка, спробуйте інше"
+		"EMAIL_ALREADY_REGISTERED": "Email is already registered",
+		"DATE_OF_BIRTH_UNDERAGE": "You need to be {{years}} years or older",
+		"CONSENT_REQUIRED": "You must agree to the Terms of Service and Privacy Policy.",
+		"USERNAME_TOO_MANY_USERS": "Too many users have this username, please try another"
 	}
 }
diff --git a/api/locales/uk/common.json b/api/locales/uk/common.json
index 5871e20b..8bb9c042 100644
--- a/api/locales/uk/common.json
+++ b/api/locales/uk/common.json
@@ -1,18 +1,18 @@
 {
 	"field": {
-		"BASE_TYPE_REQUIRED": "Це поле обов'язкове для заповнення",
-		"BASE_TYPE_STRING": "Це поле має бути рядком",
-		"BASE_TYPE_NUMBER": "Це поле має бути числом",
-		"BASE_TYPE_BIGINT": "Це поле має бути великим",
-		"BASE_TYPE_BOOLEAN": "Це поле має бути логічним",
-		"BASE_TYPE_CHOICES": "Це поле має бути одним з ({{types}})",
-		"BASE_TYPE_CLASS": "Це поле повинно бути екземпляром {{type}}",
-		"BASE_TYPE_OBJECT": "Це поле має бути об'єктом",
-		"BASE_TYPE_ARRAY": "Це поле має бути масивом",
-		"UNKOWN_FIELD": "Невідомий ключ: {{key}}",
-		"BASE_TYPE_CONSTANT": "Це поле має бути {{value}}",
-		"EMAIL_TYPE_INVALID_EMAIL": "Неправильно сформована електронна адреса",
-		"DATE_TYPE_PARSE": "Не вдається розібрати {{date}}. має бути ISO8601",
-		"BASE_TYPE_BAD_LENGTH": "Повинно бути між {{length}} в довжині"
+		"BASE_TYPE_REQUIRED": "This field is required",
+		"BASE_TYPE_STRING": "This field must be a string",
+		"BASE_TYPE_NUMBER": "This field must be a number",
+		"BASE_TYPE_BIGINT": "This field must be a bigint",
+		"BASE_TYPE_BOOLEAN": "This field must be a boolean",
+		"BASE_TYPE_CHOICES": "This field must be one of ({{types}})",
+		"BASE_TYPE_CLASS": "This field must be an instance of {{type}}",
+		"BASE_TYPE_OBJECT": "This field must be an object",
+		"BASE_TYPE_ARRAY": "This field must be an array",
+		"UNKOWN_FIELD": "Unknown key: {{key}}",
+		"BASE_TYPE_CONSTANT": "This field must be {{value}}",
+		"EMAIL_TYPE_INVALID_EMAIL": "Not a well-formed email address",
+		"DATE_TYPE_PARSE": "Could not parse {{date}}. Should be ISO8601",
+		"BASE_TYPE_BAD_LENGTH": "Must be between {{length}} in length"
 	}
 }
diff --git a/api/locales/vi/auth.json b/api/locales/vi/auth.json
index 81c2cfa9..e19547a0 100644
--- a/api/locales/vi/auth.json
+++ b/api/locales/vi/auth.json
@@ -1,16 +1,16 @@
 {
 	"login": {
-		"INVALID_LOGIN": "E-mail hoặc số điện thoại không tồn tại",
-		"INVALID_PASSWORD": "Sai mật khẩu",
-		"ACCOUNT_DISABLED": "Tài khoản đã bị vô hiệu hóa"
+		"INVALID_LOGIN": "E-Mail or Phone not found",
+		"INVALID_PASSWORD": "Invalid Password",
+		"ACCOUNT_DISABLED": "This account is disabled"
 	},
 	"register": {
-		"REGISTRATION_DISABLED": "Hệ thống hiện không cho phép tài khoản mới",
-		"INVITE_ONLY": "Bạn cần được mời để tạo tài khoản",
-		"EMAIL_INVALID": "Email không hợp lệ",
-		"EMAIL_ALREADY_REGISTERED": "Email đã tồn tại",
-		"DATE_OF_BIRTH_UNDERAGE": "Bạn phải từ {{years}} tuổi trở lên",
-		"CONSENT_REQUIRED": "Bạn phải đồng ý với Điều khoản Dịch vụ và Chính sách Bảo Mật.",
-		"USERNAME_TOO_MANY_USERS": "Quá nhiều tài khoản trùng với username bạn chọn, xin vui lòng chọn username khác"
+		"REGISTRATION_DISABLED": "New user registration is disabled",
+		"INVITE_ONLY": "You must be invited to register",
+		"EMAIL_INVALID": "Invalid Email",
+		"EMAIL_ALREADY_REGISTERED": "Email is already registered",
+		"DATE_OF_BIRTH_UNDERAGE": "You need to be {{years}} years or older",
+		"CONSENT_REQUIRED": "You must agree to the Terms of Service and Privacy Policy.",
+		"USERNAME_TOO_MANY_USERS": "Too many users have this username, please try another"
 	}
 }
diff --git a/api/locales/vi/common.json b/api/locales/vi/common.json
index d968f617..8bb9c042 100644
--- a/api/locales/vi/common.json
+++ b/api/locales/vi/common.json
@@ -1,18 +1,18 @@
 {
 	"field": {
-		"BASE_TYPE_REQUIRED": "Mục này là bắt buộc",
-		"BASE_TYPE_STRING": "Trường này phải là một chuỗi",
-		"BASE_TYPE_NUMBER": "Mục này phải là một số",
-		"BASE_TYPE_BIGINT": "Trường này phải là một chuỗi",
-		"BASE_TYPE_BOOLEAN": "Mục này phải chọn đúng hoặc sai",
-		"BASE_TYPE_CHOICES": "Mục này phải là một trong ({{types}})",
-		"BASE_TYPE_CLASS": "Mục này phải là một ví dụ của {{type}}",
-		"BASE_TYPE_OBJECT": "Mục này phải là một đối tượng",
-		"BASE_TYPE_ARRAY": "Mục này phải là một danh sách",
-		"UNKOWN_FIELD": "Khóa không xác định: {{key}}",
-		"BASE_TYPE_CONSTANT": "Mục này phải là {{value}}",
-		"EMAIL_TYPE_INVALID_EMAIL": "Không phải là một địa chỉ email hợp lệ",
-		"DATE_TYPE_PARSE": "Không thể phân tích cú pháp {{date}}. Phải là ISO8601",
-		"BASE_TYPE_BAD_LENGTH": "Phải có độ dài từ {{length}}"
+		"BASE_TYPE_REQUIRED": "This field is required",
+		"BASE_TYPE_STRING": "This field must be a string",
+		"BASE_TYPE_NUMBER": "This field must be a number",
+		"BASE_TYPE_BIGINT": "This field must be a bigint",
+		"BASE_TYPE_BOOLEAN": "This field must be a boolean",
+		"BASE_TYPE_CHOICES": "This field must be one of ({{types}})",
+		"BASE_TYPE_CLASS": "This field must be an instance of {{type}}",
+		"BASE_TYPE_OBJECT": "This field must be an object",
+		"BASE_TYPE_ARRAY": "This field must be an array",
+		"UNKOWN_FIELD": "Unknown key: {{key}}",
+		"BASE_TYPE_CONSTANT": "This field must be {{value}}",
+		"EMAIL_TYPE_INVALID_EMAIL": "Not a well-formed email address",
+		"DATE_TYPE_PARSE": "Could not parse {{date}}. Should be ISO8601",
+		"BASE_TYPE_BAD_LENGTH": "Must be between {{length}} in length"
 	}
 }
diff --git a/api/locales/zh/auth.json b/api/locales/zh/auth.json
index b802ba22..e19547a0 100644
--- a/api/locales/zh/auth.json
+++ b/api/locales/zh/auth.json
@@ -1,16 +1,16 @@
 {
 	"login": {
-		"INVALID_LOGIN": "找不到電子郵件或電話",
-		"INVALID_PASSWORD": "無效的密碼",
+		"INVALID_LOGIN": "E-Mail or Phone not found",
+		"INVALID_PASSWORD": "Invalid Password",
 		"ACCOUNT_DISABLED": "This account is disabled"
 	},
 	"register": {
-		"REGISTRATION_DISABLED": "新用戶註冊已禁用",
-		"INVITE_ONLY": "必須邀請您才能註冊",
-		"EMAIL_INVALID": "無效電子郵件",
-		"EMAIL_ALREADY_REGISTERED": "該電郵地址已註冊",
-		"DATE_OF_BIRTH_UNDERAGE": "您必須年滿 {{years}} 歲",
-		"CONSENT_REQUIRED": "您必須同意服務條款和隱私政策。",
-		"USERNAME_TOO_MANY_USERS": "此用戶名太多,請嘗試使用其他用戶名"
+		"REGISTRATION_DISABLED": "New user registration is disabled",
+		"INVITE_ONLY": "You must be invited to register",
+		"EMAIL_INVALID": "Invalid Email",
+		"EMAIL_ALREADY_REGISTERED": "Email is already registered",
+		"DATE_OF_BIRTH_UNDERAGE": "You need to be {{years}} years or older",
+		"CONSENT_REQUIRED": "You must agree to the Terms of Service and Privacy Policy.",
+		"USERNAME_TOO_MANY_USERS": "Too many users have this username, please try another"
 	}
 }
diff --git a/api/package-lock.json b/api/package-lock.json
index e8ebd5bf..a4ad6b2b 100644
--- a/api/package-lock.json
+++ b/api/package-lock.json
@@ -84,6 +84,7 @@
 				"pg": "^8.7.1",
 				"proxy-agent": "^5.0.0",
 				"reflect-metadata": "^0.1.13",
+				"sqlite3": "^5.0.2",
 				"typeorm": "^0.2.38",
 				"typescript": "^4.4.2",
 				"typescript-json-schema": "^0.50.1"
@@ -16162,6 +16163,7 @@
 				"pg": "^8.7.1",
 				"proxy-agent": "^5.0.0",
 				"reflect-metadata": "^0.1.13",
+				"sqlite3": "^5.0.2",
 				"ts-node": "^10.2.1",
 				"typeorm": "^0.2.38",
 				"typescript": "^4.4.2",
diff --git a/api/src/Server.ts b/api/src/Server.ts
index a6887fd4..c16bac5c 100644
--- a/api/src/Server.ts
+++ b/api/src/Server.ts
@@ -85,6 +85,8 @@ export class FosscordServer extends Server {
 		});
 
 		this.app = app;
+		app.use("/api/v6", api);
+		app.use("/api/v7", api);
 		app.use("/api/v8", api);
 		app.use("/api/v9", api);
 		app.use("/api", api); // allow unversioned requests
diff --git a/api/src/middlewares/Authentication.ts b/api/src/middlewares/Authentication.ts
index 59a181e6..8fbdd2b7 100644
--- a/api/src/middlewares/Authentication.ts
+++ b/api/src/middlewares/Authentication.ts
@@ -11,6 +11,9 @@ export const NO_AUTHORIZATION_ROUTES = [
 	"/experiments",
 	"/-/readyz",
 	"/-/healthz",
+	"/science",
+	"/track",
+	"/policies/instance",
 	/\/guilds\/\d+\/widget\.(json|png)/
 ];
 
diff --git a/api/src/middlewares/TestClient.ts b/api/src/middlewares/TestClient.ts
index b718bdab..b50f4e5c 100644
--- a/api/src/middlewares/TestClient.ts
+++ b/api/src/middlewares/TestClient.ts
@@ -23,9 +23,26 @@ export default function TestClient(app: Application) {
 	if (GATEWAY_ENDPOINT) {
 		html = html.replace(/GATEWAY_ENDPOINT: .+/, `GATEWAY_ENDPOINT: \`${GATEWAY_ENDPOINT}\`,`);
 	}
+	// inline plugins
+	var files = fs.readdirSync(path.join(__dirname, "..", "..", "assets", "preload-plugins"));
+	var plugins = "";
+	files.forEach(x =>{if(x.endsWith(".js")) plugins += `<script>${fs.readFileSync(path.join(__dirname, "..", "..", "assets", "preload-plugins", x))}</script>\n`; });
+	html = html.replaceAll("<!-- preload plugin marker -->", plugins);
+
+	// plugins
+	files = fs.readdirSync(path.join(__dirname, "..", "..", "assets", "plugins"));
+	plugins = "";
+	files.forEach(x =>{if(x.endsWith(".js")) plugins += `<script src='/assets/plugins/${x}'></script>\n`; });
+	html = html.replaceAll("<!-- plugin marker -->", plugins);
+	//preload plugins
+	files = fs.readdirSync(path.join(__dirname, "..", "..", "assets", "preload-plugins"));
+	plugins = "";
+	files.forEach(x =>{if(x.endsWith(".js")) plugins += `<script>${fs.readFileSync(path.join(__dirname, "..", "..", "assets", "preload-plugins", x))}</script>\n`; });
+	html = html.replaceAll("<!-- preload plugin marker -->", plugins);
 
-	app.use("/assets", express.static(path.join(__dirname, "..", "..", "assets")));
 
+	app.use("/assets", express.static(path.join(__dirname, "..", "..", "assets")));
+	
 	app.get("/assets/:file", async (req: Request, res: Response) => {
 		delete req.headers.host;
 		var response: FetchResponse;
diff --git a/api/src/routes/guilds/templates/index.ts b/api/src/routes/guilds/templates/index.ts
index dd906198..3d922e85 100644
--- a/api/src/routes/guilds/templates/index.ts
+++ b/api/src/routes/guilds/templates/index.ts
@@ -1,11 +1,9 @@
 import { Request, Response, Router } from "express";
-const router: Router = Router();
 import { Template, Guild, Role, Snowflake, Config, User, Member } from "@fosscord/util";
-const { enabled, allowTemplateCreation, allowDiscordTemplates, allowRaws } = Config.get().templates;
 import { route } from "@fosscord/api";
 import { DiscordApiErrors } from "@fosscord/util";
 import fetch from "node-fetch";
-
+const router: Router = Router();
 
 export interface GuildTemplateCreateSchema {
 	name: string;
@@ -13,10 +11,11 @@ export interface GuildTemplateCreateSchema {
 }
 
 router.get("/:code", route({}), async (req: Request, res: Response) => {
+	const { allowDiscordTemplates, allowRaws, enabled } = Config.get().templates;
 	if (!enabled) res.json({ code: 403, message: "Template creation & usage is disabled on this instance." }).sendStatus(403);
 
 	const { code } = req.params;
-
+	
 	if (code.startsWith("discord:")) {
 		if (!allowDiscordTemplates)	return res.json({ code: 403, message: "Discord templates cannot be used on this instance." }).sendStatus(403);
 		const discordTemplateID = code.split("discord:", 2)[1];
@@ -39,6 +38,7 @@ router.get("/:code", route({}), async (req: Request, res: Response) => {
 });
 
 router.post("/:code", route({ body: "GuildTemplateCreateSchema" }), async (req: Request, res: Response) => {
+	const { enabled, allowTemplateCreation, allowDiscordTemplates, allowRaws } = Config.get().templates;
 	if (!enabled) return res.json({ code: 403, message: "Template creation & usage is disabled on this instance." }).sendStatus(403);
 	if (!allowTemplateCreation) return res.json({ code: 403, message: "Template creation is disabled on this instance." }).sendStatus(403);
 
diff --git a/api/src/routes/policies/instance/domains.ts b/api/src/routes/policies/instance/domains.ts
new file mode 100644
index 00000000..20cd07ba
--- /dev/null
+++ b/api/src/routes/policies/instance/domains.ts
@@ -0,0 +1,18 @@
+import { Router, Request, Response } from "express";
+import { route } from "@fosscord/api";
+import { Config } from "@fosscord/util";
+import { config } from "dotenv"
+const router = Router();
+
+router.get("/",route({}), async (req: Request, res: Response) => {
+    const { cdn, gateway } = Config.get();
+    
+    const IdentityForm = {
+        cdn: cdn.endpointPublic || process.env.CDN || "http://localhost:3001",
+        gateway: gateway.endpointPublic || process.env.GATEWAY || "ws://localhost:3002"
+    };
+
+	res.json(IdentityForm);
+});
+
+export default router;
diff --git a/api/src/routes/policies/instance/index.ts b/api/src/routes/policies/instance/index.ts
new file mode 100644
index 00000000..e3da014f
--- /dev/null
+++ b/api/src/routes/policies/instance/index.ts
@@ -0,0 +1,12 @@
+import { Router, Request, Response } from "express";
+import { route } from "@fosscord/api";
+import { Config } from "@fosscord/util";
+const router = Router();
+
+
+router.get("/",route({}), async (req: Request, res: Response) => {
+	const { general } = Config.get();
+	res.json(general);
+});
+
+export default router;
diff --git a/api/src/routes/policies/instance/limits.ts b/api/src/routes/policies/instance/limits.ts
new file mode 100644
index 00000000..7de1476b
--- /dev/null
+++ b/api/src/routes/policies/instance/limits.ts
@@ -0,0 +1,11 @@
+import { Router, Request, Response } from "express";
+import { route } from "@fosscord/api";
+import { Config } from "@fosscord/util";
+const router = Router();
+
+router.get("/",route({}), async (req: Request, res: Response) => {
+	const { limits } = Config.get();
+	res.json(limits);
+});
+
+export default router;
diff --git a/api/src/routes/track.ts b/api/src/routes/track.ts
new file mode 100644
index 00000000..8556a3ad
--- /dev/null
+++ b/api/src/routes/track.ts
@@ -0,0 +1,11 @@
+import { Router, Response, Request } from "express";
+import { route } from "@fosscord/api";
+
+const router = Router();
+
+router.post("/", route({}), (req: Request, res: Response) => {
+	// TODO:
+	res.sendStatus(204);
+});
+
+export default router;