clash-verge-rev/src/hooks/use-i18n.ts
Slinetrac c672a6fef3
refactor: lint (#6511)
* refactor: lint

* chore: remove eslint-plugin/config-prettier
2026-03-15 07:40:11 +00:00

54 lines
1.2 KiB
TypeScript

import { useState, useCallback } from 'react'
import { useTranslation } from 'react-i18next'
import {
changeLanguage,
resolveLanguage,
supportedLanguages,
} from '@/services/i18n'
import { useVerge } from './use-verge'
export const useI18n = () => {
const { i18n, t } = useTranslation()
const { patchVerge } = useVerge()
const [isLoading, setIsLoading] = useState(false)
const switchLanguage = useCallback(
async (language: string) => {
const targetLanguage = resolveLanguage(language)
if (!supportedLanguages.includes(targetLanguage)) {
console.warn(`Unsupported language: ${language}`)
return
}
if (i18n.language === targetLanguage) {
return
}
setIsLoading(true)
try {
await changeLanguage(targetLanguage)
if (patchVerge) {
await patchVerge({ language: targetLanguage })
}
} catch (error) {
console.error('Failed to change language:', error)
} finally {
setIsLoading(false)
}
},
[i18n.language, patchVerge],
)
return {
currentLanguage: i18n.language,
supportedLanguages,
switchLanguage,
isLoading,
t,
}
}