2015-11-17 23 views
7

言語設定がURLの一部である多言語サイトを構築しています。反応ルータの多言語サポート

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

私は、すべての言語の接頭辞を使用する場合すべてが、okです:

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

しかし、デフォルトの言語のために、私は例に示すように、URLに言語を含める必要はありません。 それがパスに正規表現を使用することによって解決することができfluxibleルータで:パスが文字列ではなく、正規表現でなければならないので、

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

しかし、それはでは動作しませんが、ルータを反応させます。 このユースケースをどのように処理するかについてのご意見はありますか?

答えて

4

あなたのルートを複製しようとしましたか?これまで私のために働いているようだ。

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

innerRoutesもどう翻訳されますか?すべてのルートを1つずつリストアップしていますか?もしそうなら、ユーザーがアプリケーションからロケールを変更したら、正しい翻訳パスを取得するにはどうしたらいいですか? – cl0udw4lk3r

2

あなたのルートは以下のように検討する必要があります:

<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> 

:lang/での最後のスラッシュは、そうでない場合とRedirectありURLはそれの後に何か(例えば/de/about)含まれている場合にのみ一致することを示しますあなたが指定したページに常にtoパラメータでリダイレクトされます。 Route Matching in the docsについて詳しく読むことができます。

+0

私はリダイレクトは必要ありませんが、私はseoの目的で例のように正確に欲しいと思います。 –

+0

URLの見た目を変えず、見た目を見たいと思っています。私は、あなたがリアクタを使って達成できる方法を示しています。ルートに一致するドキュメントを読んで、ルートとどのように一致するかを確認します。 – knowbody

+0

私は何度もドキュメントを読んでいますが、正規表現なしでこのような動作を達成する方法を理解できません。以下のコードは私が望むように動作していますが、見栄えが悪く、経路の重複が気に入らない: <! - language:lang-jsx - > <経路パス= "/"コンポーネント= {アプリケーション{ルート} = "パートナー"コンポーネント= {パートナー} /> <ルートパス= ": <ルートルート="ホーム "/> <ルートパス="連絡先 "コンポーネント= {連絡先} /> < <経路パス= ":lang/contacts"コンポーネント= {連絡先} /> <経路パス= ":lang/partners"コンポーネント= {パートナー} /> –