2025-10-15 17:15:05 +08:00
|
|
|
import { useState, useEffect, useCallback, useMemo } from 'react';
|
2025-10-14 23:56:54 +08:00
|
|
|
import { Core } from '@esengine/ecs-framework';
|
|
|
|
|
import { LocaleService, type Locale } from '@esengine/editor-core';
|
|
|
|
|
|
|
|
|
|
export function useLocale() {
|
2025-10-15 17:15:05 +08:00
|
|
|
const localeService = useMemo(() => Core.services.resolve(LocaleService), []);
|
|
|
|
|
const [locale, setLocale] = useState<Locale>(() => localeService.getCurrentLocale());
|
2025-10-14 23:56:54 +08:00
|
|
|
|
|
|
|
|
useEffect(() => {
|
|
|
|
|
const unsubscribe = localeService.onChange((newLocale) => {
|
|
|
|
|
setLocale(newLocale);
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
return unsubscribe;
|
|
|
|
|
}, [localeService]);
|
|
|
|
|
|
2025-10-15 17:15:05 +08:00
|
|
|
const t = useCallback((key: string, fallback?: string) => {
|
2025-10-14 23:56:54 +08:00
|
|
|
return localeService.t(key, fallback);
|
2025-10-15 17:15:05 +08:00
|
|
|
}, [localeService]);
|
2025-10-14 23:56:54 +08:00
|
|
|
|
2025-10-15 17:15:05 +08:00
|
|
|
const changeLocale = useCallback((newLocale: Locale) => {
|
2025-10-14 23:56:54 +08:00
|
|
|
localeService.setLocale(newLocale);
|
2025-10-15 17:15:05 +08:00
|
|
|
}, [localeService]);
|
2025-10-14 23:56:54 +08:00
|
|
|
|
|
|
|
|
return {
|
|
|
|
|
locale,
|
|
|
|
|
t,
|
|
|
|
|
changeLocale
|
|
|
|
|
};
|
|
|
|
|
}
|