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 { preferenceService } from '@data/PreferenceService'
import { loggerService } from '@logger'
import { defaultLanguage } from '@shared/config/constant' import { defaultLanguage } from '@shared/config/constant'
import type { LanguageVarious } from '@shared/data/preference/preferenceTypes' import type { LanguageVarious } from '@shared/data/preference/preferenceTypes'
import { app } from 'electron' import { app } from 'electron'
import i18next from 'i18next'
import deDE from '../../renderer/src/i18n/locales/de-de.json' // import deDE from '../../renderer/src/i18n/locales/de-de.json'
import elGR from '../../renderer/src/i18n/locales/el-gr.json' // import elGR from '../../renderer/src/i18n/locales/el-gr.json'
import EnUs from '../../renderer/src/i18n/locales/en-us.json' import EnUs from '../../renderer/src/i18n/locales/en-us.json'
import esES from '../../renderer/src/i18n/locales/es-es.json' // import esES from '../../renderer/src/i18n/locales/es-es.json'
import frFR from '../../renderer/src/i18n/locales/fr-fr.json' // import frFR from '../../renderer/src/i18n/locales/fr-fr.json'
import JaJP from '../../renderer/src/i18n/locales/ja-jp.json' // import JaJP from '../../renderer/src/i18n/locales/ja-jp.json'
import ptPT from '../../renderer/src/i18n/locales/pt-pt.json' // import ptPT from '../../renderer/src/i18n/locales/pt-pt.json'
import RuRu from '../../renderer/src/i18n/locales/ru-ru.json' // import RuRu from '../../renderer/src/i18n/locales/ru-ru.json'
import ZhCn from '../../renderer/src/i18n/locales/zh-cn.json' import ZhCn from '../../renderer/src/i18n/locales/zh-cn.json'
import ZhTw from '../../renderer/src/i18n/locales/zh-tw.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], ['en-US', EnUs],
['zh-CN', ZhCn], ['zh-CN', ZhCn],
['zh-TW', ZhTw], ['zh-TW', ZhTw]
['ja-JP', JaJP], // ['ja-JP', JaJP],
['ru-RU', RuRu], // ['ru-RU', RuRu],
['de-DE', deDE], // ['de-DE', deDE],
['el-GR', elGR], // ['el-GR', elGR],
['es-ES', esES], // ['es-ES', esES],
['fr-FR', frFR], // ['fr-FR', frFR],
['pt-PT', ptPT] // ['pt-PT', ptPT]
]) ] as const)
export const getAppLanguage = (): LanguageVarious => { export const getAppLanguage = (): LanguageVarious => {
const language = preferenceService.get('app.language') const language = preferenceService.get('app.language')
@ -35,10 +39,25 @@ export const getAppLanguage = (): LanguageVarious => {
return language 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> => { export const getI18n = (): Record<string, any> => {
const language = getAppLanguage() 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 }