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

React i18n输入无效路径语言时如何设置默认EN语言并重定向?

修复路径输入非法语言标识导致页面空白的方案

核心问题是你当前的路由规则仅匹配en/es/ar三个合法语言前缀,当出现不在白名单的语言标识时无对应路由匹配,就会出现空白页,按以下步骤修改即可:

1. 路由层增加非法语言重定向逻辑

修改Route.js文件,在<Switch>标签最顶部新增路由校验规则,匹配所有两位字母开头的路径前缀,校验不通过直接重定向到英文路径:

import { Switch, Route, Redirect } from 'react-router-dom'; // 确保引入Redirect

export const baseUrl = () => {
    return (
        i18n.language === 'en' ? '' : '/' + i18n.language
    )
};

const Router = () => {
    const baseRouteUrl = "/:locale(es|en|ar)?";
    const validLangs = ["en", "es", "ar"];
    return (
        <Switch>
            {/* 新增:校验路径前缀的语言是否合法 */}
            <Route 
                path="/:locale([a-z]{2})/*" 
                render={({ match, location }) => {
                    if (!validLangs.includes(match.params.locale)) {
                        // 保留原路径后缀,仅替换非法语言为en
                        const pathSuffix = location.pathname.split('/').slice(2).join('/');
                        return <Redirect to={pathSuffix ? `/en/${pathSuffix}` : '/en'} />
                    }
                    return null;
                }}
            />
            <Route exact path="/" component={Options} />
            <Route exact path="/login" component={Login} />
            <Route exact path="/register" component={Register} />

            <PrivateRoute exact path={baseRouteUrl + "/dashboard"}
                    render={(props) => {
                        return (
                            <MainLayout>
                                <DashboardPage />
                            </MainLayout>
                        )
                    }}
                />
        </Switch>
    )
};

2. 修复i18n配置的翻译文件加载问题

你当前i18n配置中定义了backend加载参数但没有传入,同时路径变量写错会导致翻译文件加载失败,这也是你之前设置lng参数后翻译失效的原因之一,修改如下:

import i18n from 'i18next';
import { initReactI18next } from 'react-i18next';
import Backend from 'i18next-http-backend';
import LanguageDetector from 'i18next-browser-languagedetector';

const languages = ["en", "es", "ar"]
const backendOptions = {
    // 修正路径变量,{{ns}}对应默认的translation命名空间
    loadPath: "./public/locales/{{lng}}/translation.json",
}

i18n
    .use(Backend)
    .use(LanguageDetector)
    .use(initReactI18next)
    .init({
        fallbackLng: "en",
        debug: true,
        // lng: "en", 保持注释,符合你的要求
        whitelist: languages,
        keySeparator: false,
        checkWhitelist: true,
        detection: {
            order: ['path', 'cookie', 'htmlTag', 'localStorage', 'subdomain'],  
            lookupFromPathIndex: 0,
            caches: ['cookie'],
            checkWhitelist: true,
        },
        // 新增:传入backend配置
        backend: backendOptions
    });
export default i18n;

修改完成后即可实现预期效果:访问/ru/dashboard这类带非法语言标识的路径会自动重定向到/en/dashboard,翻译正常加载,无需手动设置lng参数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 10:27:05