diff --git a/src/components/ui/sonner.tsx b/src/components/ui/sonner.tsx new file mode 100644 index 0000000..ed76aab --- /dev/null +++ b/src/components/ui/sonner.tsx @@ -0,0 +1,26 @@ +import { Toaster as Sonner } from 'sonner'; +import { useThemeMode } from '@/providers/ThemeModeProvider'; + +type ToasterProps = React.ComponentProps; + +export function Toaster(props: ToasterProps) { + const { resolvedMode } = useThemeMode(); + + return ( + + ); +} diff --git a/src/providers/AppRoot.tsx b/src/providers/AppRoot.tsx index ac52fad..d46fcaa 100644 --- a/src/providers/AppRoot.tsx +++ b/src/providers/AppRoot.tsx @@ -1,6 +1,7 @@ import React from 'react'; import { ThemeModeProvider } from './ThemeModeProvider'; import { RouterProvider } from './RouterProvider'; +import { Toaster } from '@/components/ui/sonner'; interface AppRootProps { children: React.ReactNode; @@ -11,6 +12,7 @@ export default function AppRoot({ children }: AppRootProps) { {children} + ); diff --git a/src/utils/chromeI18n.ts b/src/utils/chromeI18n.ts index f7182f3..e172fd5 100644 --- a/src/utils/chromeI18n.ts +++ b/src/utils/chromeI18n.ts @@ -26,12 +26,8 @@ export function useI18n(namespace?: string | string[]) { const namespaces = Array.isArray(namespace) ? namespace : namespace ? [namespace] : []; const t = (key: string, options?: Record): string => { - let msgId = key; - - // 处理 namespace:key 格式(兼容原 i18next 用法) - if (key.includes(':')) { - msgId = key.replace(':', '_').replace(/\./g, '_'); - } + // 统一将分隔符转换为下划线,兼容 'namespace:key.path' 和 'key.path' 两种写法 + const msgId = key.replace(':', '_').replace(/\./g, '_'); // 先尝试直接查找 key let message = getMessage(msgId);