You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SvelteKit路由匹配器中如何获取前置路由匹配结果?

解决国际化URL路由匹配中获取前置语言参数的问题

核心思路

通过共享的国际化路由配置,结合服务端/客户端的路径解析逻辑,在子路由匹配器中获取前置语言参数,验证路由与语言的对应关系,无效组合直接返回404。

步骤1:创建全局路由映射配置

新建全局配置文件(比如i18n-routes.js),维护语言与路由的唯一对应关系:

// 语言-路由映射表,确保每种语言的路由一一对应
export const routeMap = {
  en: {
    privacy: 'privacy'
  },
  es: {
    privacy: 'privacidad'
  }
};

// 允许的语言列表
export const validLangs = Object.keys(routeMap);

步骤2:验证语言参数有效性

在[lang=lang].js匹配器中,校验语言是否在允许列表内:

import { validLangs } from '$lib/i18n-routes';

export function match(param) {
  return validLangs.includes(param);
}

步骤3:在子路由匹配器中校验语言与路由的对应关系

在[route1=route1].js匹配器中,分别处理服务端和客户端的路径解析,获取前置语言参数,再验证当前路由是否属于该语言的有效路由:

import { routeMap } from '$lib/i18n-routes';

export function match(param, context) {
  let lang;

  // 服务端环境:从请求URL解析语言参数
  if (context?.request) {
    const pathSegments = new URL(context.request.url).pathname.split('/').filter(Boolean);
    lang = pathSegments[0];
  }
  // 客户端环境:从当前页面路径解析语言参数
  else if (typeof window !== 'undefined') {
    const pathSegments = window.location.pathname.split('/').filter(Boolean);
    lang = pathSegments[0];
  }
  // 无法获取语言参数时,直接返回不匹配
  else {
    return false;
  }

  // 校验当前路由是否属于该语言的有效路由
  return routeMap[lang] ? Object.values(routeMap[lang]).includes(param) : false;
}

效果验证

  • 访问/en/privacy:语言和路由匹配,正常加载页面
  • 访问/es/privacidad:语言和路由匹配,正常加载页面
  • 访问/en/privacidad:路由不属于英语的有效路由,匹配器返回false,触发404

内容的提问来源于stack exchange,提问作者DShook

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 16:55:18