Files
esengine/packages/editor-app/src/hooks/useLocale.ts

31 lines
860 B
TypeScript
Raw Normal View History

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
};
}