如何使用多语言/多个 index.html 文件正确设置 React Router?

IT技术 javascript reactjs react-router-v4 react-router-dom
2021-04-27 14:21:39

我正在构建一个 Web 应用程序,使用最新的 React 和 React Router 版本,在我的情况下,我的应用程序支持多种语言,并且由于索引,我们为每种语言都有单独的入口 html 文件。所以对于像 myapp.com 这样的网址,我们会有

myapp.com/en/ - 英语

myapp.com/de/ - 适用于德语等...

在服务器端,这些/en/文件夹中的每一个当然都有自己的index.html文件,其中包含用给定语言编写的标题和其他元数据,并且它们都可以访问我们的 React 应用程序 ( bundle.js )

我之前已经用路由器哈希历史构建了类似的东西,所以我的应用程序看起来像 myapp.com/en/#/home,而我在routes.js 中主路由当然看起来像这样

<Route path="/" component={MainComponent}

现在我想使用 BrowserRouter,如果 url 是myapp.com/en/,我希望我的路由看起来像这样 ,链接是:

<Link to="/home" />

一旦点击它就会把你带到myapp.com/en/home并且它会正确地呈现在 Route 中链接到它的 Compnent

 <Route path="/home" exact component={HomeContainer} />

基本上目前这只会在我做这样的事情时才有效

<Link to=`/${getCurrentLanguage()}/home` /

路线是这样的

<Route path=`/${getCurrentLanguage()}/home` exact component={HomeContainer} />

这当然是疯狂的,

我如何才能实现所需的行为,或者您有什么不同的想法?谢谢

编辑我没有问任何关于 React 翻译的问题,我将使用 i18next 来翻译 React 端,我问的是使用不同的 index.html 文件进行路由的问题

1个回答

有两种方法可以解决这个问题

  1. 将 BrowserRouter basename 属性设置为给定的语言

<BrowserRouter basename=`/${getLanguage()}`>
    <Switch>
        <Route path="/" exact component={Home} />
    </Switch>
< /BrowserRouter>

所以你可以自由导航 <Link to="/about" />

  1. 或在任何其他路线之前使用 /:lng

<Switch>
    <Route path="/:lng/" exact component={Home} />
</Switch>