2015-11-17 6 views
7

मैं बहुभाषी साइट का निर्माण कर रहा हूं जहां भाषा वरीयता यूआरएल का हिस्सा है, उदा।प्रतिक्रिया राउटर में बहुभाषी समर्थन

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

सब कुछ ठीक है, जब मैं सभी भाषाओं के लिए उपसर्ग का उपयोग करें:

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

लेकिन डिफ़ॉल्ट भाषा के लिए, मैं यूआरएल में भाषा, के रूप में उदाहरण में दिखाया गया शामिल करने की ज़रूरत नहीं है। fluxible रूटर में यह राह में regexp का उपयोग करके हल किया जा सकता है:

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

लेकिन यह काम नहीं करता रूटर प्रतिक्रिया है, क्योंकि पथ एक स्ट्रिंग, नहीं एक regexp होना चाहिए। कोई भी विचार इस उपयोग के मामले को कैसे संभालना है?

उत्तर

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

में किसी भी रेगेक्स का उपयोग नहीं करते हैं आंतरिक रूट्स के बारे में भी क्या अनुवाद किया जाता है? मुझे सभी मार्गों को एक-एक करके सूचीबद्ध करना है? और यदि ऐसा है, तो जब उपयोगकर्ता मेरे आवेदन से लोकेल बदलता है, तो मैं सही अनुवादित पथ कैसे प्राप्त कर सकता हूं? – 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/ में स्लैश इंगित करता है कि यह केवल मिलान किया जाएगा यदि URL यह बाद कुछ (जैसे /de/about) शामिल हैं अन्यथा वहाँ है एक के साथ एक Redirect लालची मिलान जो to पैरामीटर में निर्दिष्ट पृष्ठ पर हमेशा रीडायरेक्ट करेगा। आप Route Matching in the docs के बारे में अधिक पढ़ सकते हैं।

+0

मुझे रीडायरेक्ट की आवश्यकता नहीं है, मैं चाहता हूं कि यूआरएल एसईओ उद्देश्यों के लिए बिल्कुल उदाहरण जैसा हो। –

+0

मैंने आपके यूआरएल के रूप में बदलाव नहीं किया है, वे ठीक दिखते हैं कि आप उन्हें कैसे देखना चाहते हैं। मैं सिर्फ आपको राउटर राउटर के साथ प्राप्त करने का तरीका दिखाता हूं। मार्ग मिलान करने वाले दस्तावेज़ों को पढ़ें कि हम मार्गों से कैसे मेल खाते हैं। – knowbody

+0

मैंने दस्तावेज़ों को कई बार पढ़ा है, लेकिन मैं समझ नहीं पा रहा हूं कि regexp के बिना इस तरह के व्यवहार को कैसे प्राप्त किया जाए। नीचे दिया गया कोड काम कर रहा है जैसा कि मैं चाहता हूं, लेकिन यह बदसूरत दिखता है, मुझे मार्गों में इस तरह की नकल पसंद नहीं है: <मार्ग पथ = "/" घटक = {आवेदन }> <इंडेक्स रूट घटक = {होम} /> <मार्ग पथ = "संपर्क" घटक = {संपर्क} /> <मार्ग पथ = "भागीदारों" घटक = {पार्टनर} /> <मार्ग पथ = ": लैंग "घटक = {होम} /> <मार्ग पथ =": लैंग/संपर्क "घटक = {संपर्क} /> <मार्ग पथ =": लैंग/साझेदार "घटक = {पार्टनर} /> –

संबंधित मुद्दे