mirror of
https://github.com/clash-verge-rev/clash-verge-rev.git
synced 2026-04-13 13:30:31 +08:00
54 lines
1.2 KiB
TypeScript
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,
|
|
}
|
|
}
|