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
This commit is contained in:
icarus 2025-10-23 22:19:40 +08:00
parent b181902183
commit 262b0aeeb6

View File

@ -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<string, any> => {
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 }