2015-11-17 16 views
7

Ich bin mehrsprachige Website, wo die Sprache Präferenz ist Teil der URL, z.Multilanguage-Unterstützung in reagieren Router

http://example.com/<somepage>  (Russian, default) 
http://example.com/en/<somepage> (English) 
http://example.com/jp/<somepage> (Japanese) 
http://example.com/../    (etc) 

Alles ist in Ordnung, wenn ich Präfix für alle Sprachen verwendet werden:

<Route path="/:lang"> 
    <Route path="somepage" component={Somepage}/> 
</Route> 

Aber für Standardsprache, muss ich die Sprache nicht in URL enthalten, wie im Beispiel gezeigt. In fluxible Router kann es durch die Verwendung regexp in Weg gelöst werden:

path: '/:lang([a-z]{2})?/<somepage>' 

Aber es funktioniert nicht in Router reagieren, weil Pfad muss ein String sein, nicht ein regulärer Ausdruck. Irgendwelche Ideen, wie man diesen Anwendungsfall behandelt?

Antwort

4

Haben Sie versucht, Ihre Routen zu duplizieren? Scheint, für mich bis jetzt zu arbeiten.

var innerRoutes = (
    <Route> 
    <Route path="somepage" component={Somepage}/> 
    <Route path="otherpage" component={Otherpage}/> 
    </Route> 
); 

var routes = (
    <Route path="/" component={App}> 
    {innerRoutes} 
    <Route path=":lang"> 
     {innerRoutes} 
    </Route> 
    </Route> 
); 
+0

Was ist mit den innerRoutes auch übersetzt? Ich muss alle Routen einzeln auflisten? Und wenn ja, wenn der Benutzer das Gebietsschema aus meiner Anwendung ändert, wie kann ich den richtigen übersetzten Pfad abrufen? – cl0udw4lk3r

2

Ihre Routen würde aussehen müssen:

<Router history={createBrowserHistory()}> 
    <Route component={App}> 
    <IndexRoute component={Home} /> 
    <Route path=':lang/'> 
     <Route path='about' component={About} /> 
    </Route> 
    <Redirect from='*' to='ru/about' /> 
    </Route> 
</Router> 

Der Schrägstrich im :lang/ zeigt an, dass es nur dann, wenn das, nachdem es (zB /de/about) URL enthält etwas angepasst werden, sonst besteht Redirect mit a gieriger Abgleich, der immer auf die Seite umleitet, die Sie im Parameter to angeben. Sie können mehr über Route Matching in the docs lesen.

+0

Ich brauche keine Umleitung, ich will Urls genau wie im Beispiel für seo Zwecke sein. –

+0

Ich habe das Aussehen Ihrer URLs nicht geändert. Sie sehen genau so aus, wie Sie sie aussehen lassen möchten. Ich zeige Ihnen nur, wie Sie es mit dem React Router erreichen können. Lesen Sie die Dokumente, die mit der Route übereinstimmen, um zu sehen, wie wir mit Routen übereinstimmen. – knowbody

+0

Ich lese die Dokumente oft, aber ich kann nicht verstehen, wie man ein solches Verhalten ohne Regexp erreichen kann. Der Code unten funktioniert wie ich will, aber es sieht hässlich aus, ich mag solche Duplizierung in Routen nicht: