Files
PicList/src/renderer/i18n/index.ts
2023-01-07 17:43:35 +08:00

68 lines
1.7 KiB
TypeScript

import { ipcRenderer } from 'electron'
import { ObjectAdapter, I18n } from '@picgo/i18n'
import { GET_CURRENT_LANGUAGE, SET_CURRENT_LANGUAGE, FORCE_UPDATE, GET_LANGUAGE_LIST } from '#/events/constants'
import bus from '@/utils/bus'
import { builtinI18nList } from '#/i18n'
export class I18nManager {
private i18n: I18n | null = null
private i18nFileList: II18nItem[] = builtinI18nList
private getLanguageList () {
ipcRenderer.send(GET_LANGUAGE_LIST)
ipcRenderer.once(GET_LANGUAGE_LIST, (event, list: II18nItem[]) => {
this.i18nFileList = list
})
}
private getCurrentLanguage () {
ipcRenderer.send(GET_CURRENT_LANGUAGE)
ipcRenderer.once(GET_CURRENT_LANGUAGE, (event, lang: string, locales: ILocales) => {
this.setLocales(lang, locales)
bus.emit(FORCE_UPDATE)
})
}
private setLocales (lang: string, locales: ILocales) {
const objectAdapter = new ObjectAdapter({
[lang]: locales
})
this.i18n = new I18n({
adapter: objectAdapter,
defaultLanguage: lang
})
}
constructor () {
this.getCurrentLanguage()
this.getLanguageList()
ipcRenderer.on(SET_CURRENT_LANGUAGE, (event, lang: string, locales: ILocales) => {
this.setLocales(lang, locales)
bus.emit(FORCE_UPDATE)
})
}
T (key: ILocalesKey, args: IStringKeyMap = {}): string {
return this.i18n?.translate(key, args) || key
}
setCurrentLanguage (lang: string) {
ipcRenderer.send(SET_CURRENT_LANGUAGE, lang)
}
get languageList () {
return this.i18nFileList
}
}
const i18nManager = new I18nManager()
const T = (key: ILocalesKey, args: IStringKeyMap = {}): string => {
return i18nManager.T(key, args)
}
export {
i18nManager,
T
}