From 262b0aeeb647193f470dbb52a86e268e68735f65 Mon Sep 17 00:00:00 2001 From: icarus Date: Thu, 23 Oct 2025 22:19:40 +0800 Subject: [PATCH] refactor(i18n): simplify language resources and integrate i18next Remove unused language resources and rename locales to resources for clarity Add i18next initialization with missing key logging --- src/main/utils/language.ts | 57 +++++++++++++++++++++++++------------- 1 file changed, 38 insertions(+), 19 deletions(-) diff --git a/src/main/utils/language.ts b/src/main/utils/language.ts index 6d77a8be99..850a532dbc 100644 --- a/src/main/utils/language.ts +++ b/src/main/utils/language.ts @@ -1,31 +1,35 @@ import { preferenceService } from '@data/PreferenceService' +import { loggerService } from '@logger' import { defaultLanguage } from '@shared/config/constant' import type { LanguageVarious } from '@shared/data/preference/preferenceTypes' import { app } from 'electron' +import i18next from 'i18next' -import deDE from '../../renderer/src/i18n/locales/de-de.json' -import elGR from '../../renderer/src/i18n/locales/el-gr.json' +// import deDE from '../../renderer/src/i18n/locales/de-de.json' +// import elGR from '../../renderer/src/i18n/locales/el-gr.json' import EnUs from '../../renderer/src/i18n/locales/en-us.json' -import esES from '../../renderer/src/i18n/locales/es-es.json' -import frFR from '../../renderer/src/i18n/locales/fr-fr.json' -import JaJP from '../../renderer/src/i18n/locales/ja-jp.json' -import ptPT from '../../renderer/src/i18n/locales/pt-pt.json' -import RuRu from '../../renderer/src/i18n/locales/ru-ru.json' +// import esES from '../../renderer/src/i18n/locales/es-es.json' +// import frFR from '../../renderer/src/i18n/locales/fr-fr.json' +// import JaJP from '../../renderer/src/i18n/locales/ja-jp.json' +// import ptPT from '../../renderer/src/i18n/locales/pt-pt.json' +// import RuRu from '../../renderer/src/i18n/locales/ru-ru.json' import ZhCn from '../../renderer/src/i18n/locales/zh-cn.json' import ZhTw from '../../renderer/src/i18n/locales/zh-tw.json' -const locales = Object.fromEntries([ +const logger = loggerService.withContext('i18n') + +const resources = Object.fromEntries([ ['en-US', EnUs], ['zh-CN', ZhCn], - ['zh-TW', ZhTw], - ['ja-JP', JaJP], - ['ru-RU', RuRu], - ['de-DE', deDE], - ['el-GR', elGR], - ['es-ES', esES], - ['fr-FR', frFR], - ['pt-PT', ptPT] -]) + ['zh-TW', ZhTw] + // ['ja-JP', JaJP], + // ['ru-RU', RuRu], + // ['de-DE', deDE], + // ['el-GR', elGR], + // ['es-ES', esES], + // ['fr-FR', frFR], + // ['pt-PT', ptPT] +] as const) export const getAppLanguage = (): LanguageVarious => { const language = preferenceService.get('app.language') @@ -35,10 +39,25 @@ export const getAppLanguage = (): LanguageVarious => { return language } - return (Object.keys(locales).includes(appLocale) ? appLocale : defaultLanguage) as LanguageVarious + return (Object.keys(resources).includes(appLocale) ? appLocale : defaultLanguage) as LanguageVarious } export const getI18n = (): Record => { const language = getAppLanguage() - return locales[language] + return resources[language] } + +const i18n = i18next.init({ + resources, + lng: getAppLanguage(), + fallbackLng: defaultLanguage, + interpolation: { + escapeValue: false + }, + saveMissing: true, + missingKeyHandler: (_1, _2, key) => { + logger.error(`Missing key: ${key}`) + } +}) + +export { i18n }