mirror of
https://github.com/labring/FastGPT.git
synced 2026-05-08 01:08:43 +08:00
46 lines
1.2 KiB
TypeScript
46 lines
1.2 KiB
TypeScript
'use client';
|
|
|
|
import { useEffect } from 'react';
|
|
import { usePathname, useRouter } from 'next/navigation';
|
|
import { getLocalizedPath, i18n } from '@/lib/i18n';
|
|
import { useCurrentLang } from '@/lib/localized-navigation';
|
|
|
|
interface RedirectProps {
|
|
to: string;
|
|
}
|
|
|
|
function removeLocalePrefix(pathname: string): string {
|
|
const segments = pathname.split('/').filter(Boolean);
|
|
|
|
if (segments[0] && i18n.languages.includes(segments[0])) {
|
|
return `/${segments.slice(1).join('/')}`;
|
|
}
|
|
|
|
return pathname;
|
|
}
|
|
|
|
function normalizeDocPath(to: string, pathname: string): string {
|
|
const target = to.replace(/(?:\.[a-z]{2}(?:-[A-Z]{2})?)?\.mdx$/, '');
|
|
|
|
if (target.startsWith('/')) {
|
|
return removeLocalePrefix(target);
|
|
}
|
|
|
|
const currentPath = removeLocalePrefix(pathname);
|
|
const basePath = currentPath.endsWith('/') ? currentPath : `${currentPath}/`;
|
|
|
|
return new URL(target, `http://localhost${basePath}`).pathname;
|
|
}
|
|
|
|
export function Redirect({ to }: RedirectProps) {
|
|
const router = useRouter();
|
|
const pathname = usePathname();
|
|
const lang = useCurrentLang();
|
|
|
|
useEffect(() => {
|
|
router.push(getLocalizedPath(normalizeDocPath(to, pathname), lang));
|
|
}, [to, pathname, lang, router]);
|
|
|
|
return null;
|
|
}
|