diff --git a/packages/backend/src/server/web/HtmlTemplateService.ts b/packages/backend/src/server/web/HtmlTemplateService.ts
index 80c767d886..8ff985530d 100644
--- a/packages/backend/src/server/web/HtmlTemplateService.ts
+++ b/packages/backend/src/server/web/HtmlTemplateService.ts
@@ -6,7 +6,7 @@
import { dirname } from 'node:path';
import { fileURLToPath } from 'node:url';
import { promises as fsp } from 'node:fs';
-import { languages } from 'i18n';
+import { languages } from 'i18n/const';
import { Injectable, Inject } from '@nestjs/common';
import { DI } from '@/di-symbols.js';
import { bindThis } from '@/decorators.js';
diff --git a/packages/i18n/package.json b/packages/i18n/package.json
index d06e485da0..6ba41632e8 100644
--- a/packages/i18n/package.json
+++ b/packages/i18n/package.json
@@ -8,6 +8,10 @@
".": {
"types": "./built/index.d.ts",
"import": "./built/index.js"
+ },
+ "./const": {
+ "types": "./built/const.d.ts",
+ "import": "./built/const.js"
}
},
"scripts": {
diff --git a/packages/i18n/src/const.ts b/packages/i18n/src/const.ts
new file mode 100644
index 0000000000..bb690e7542
--- /dev/null
+++ b/packages/i18n/src/const.ts
@@ -0,0 +1,41 @@
+/*
+ * SPDX-FileCopyrightText: syuilo and misskey-project
+ * SPDX-License-Identifier: AGPL-3.0-only
+ */
+
+export const languages = [
+ 'ar-SA',
+ 'ca-ES',
+ 'cs-CZ',
+ 'da-DK',
+ 'de-DE',
+ 'en-US',
+ 'es-ES',
+ 'fr-FR',
+ 'id-ID',
+ 'it-IT',
+ 'ja-JP',
+ 'ja-KS',
+ 'kab-KAB',
+ 'kn-IN',
+ 'ko-KR',
+ 'nl-NL',
+ 'no-NO',
+ 'pl-PL',
+ 'pt-PT',
+ 'ru-RU',
+ 'sk-SK',
+ 'th-TH',
+ 'tr-TR',
+ 'ug-CN',
+ 'uk-UA',
+ 'vi-VN',
+ 'zh-CN',
+ 'zh-TW',
+] as const;
+
+export const primaries = {
+ 'en': 'US',
+ 'ja': 'JP',
+ 'zh': 'CN',
+} as const satisfies Record;
diff --git a/packages/i18n/src/index.ts b/packages/i18n/src/index.ts
index 77a4f42012..21d215159f 100644
--- a/packages/i18n/src/index.ts
+++ b/packages/i18n/src/index.ts
@@ -9,48 +9,12 @@
import * as fs from 'node:fs';
import * as yaml from 'js-yaml';
+import { languages, primaries } from './const.js';
import type { Locale } from './autogen/locale.js';
import type { ILocale, ParameterizedString } from './types.js';
-const languages = [
- 'ar-SA',
- 'ca-ES',
- 'cs-CZ',
- 'da-DK',
- 'de-DE',
- 'en-US',
- 'es-ES',
- 'fr-FR',
- 'id-ID',
- 'it-IT',
- 'ja-JP',
- 'ja-KS',
- 'kab-KAB',
- 'kn-IN',
- 'ko-KR',
- 'nl-NL',
- 'no-NO',
- 'pl-PL',
- 'pt-PT',
- 'ru-RU',
- 'sk-SK',
- 'th-TH',
- 'tr-TR',
- 'ug-CN',
- 'uk-UA',
- 'vi-VN',
- 'zh-CN',
- 'zh-TW',
-] as const;
-
type Language = typeof languages[number];
-const primaries = {
- 'en': 'US',
- 'ja': 'JP',
- 'zh': 'CN',
-} as const satisfies Record;
-
type PrimaryLang = keyof typeof primaries;
type Locales = Record;