2008-09-17 20 views
7

में एक बहुभाषी साइट में यूआरएल को संभालने के लिए मैं की तरहसबसे अच्छा तरीका है ASP.net

www.domain.com/en/home.aspx for english 
www.domain.com/es/home.aspx for spanish 

अतीत में यूआरएल के साथ, एक बहुभाषी वेबसाइट क्या करने की जरूरत है, मैं आईआईएस में दो वर्चुअल निर्देशिका सेट अप करना होगा, और उसके बाद global.aspx में यूआरएल का पता लगाएं और यूआरएल

Sub Application_BeginRequest(ByVal sender As Object, ByVal e As EventArgs) 
    Dim lang As String 
    If HttpContext.Current.Request.Path.Contains("/en/") Then 
     lang = "en" 
    Else 
     lang = "es" 
    End If 
    Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo(lang) 
    Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(lang) 


End Sub 

के अनुसार भाषा को बदलें एक समाधान हैक की तरह है। मैं एक नई वेबसाइट के लिए रूटिंग का उपयोग करने के बारे में सोच रहा हूं।

क्या आप इसे करने के लिए एक बेहतर या अधिक सुरुचिपूर्ण तरीका जानते हैं?

संपादित करें: प्रश्न यूआरएल से निपटने के बारे में, आदि

उत्तर

7

मैं नए ASP.net रूटिंग के साथ जाने का फैसला किया।
urlRrriting क्यों नहीं? क्योंकि मैं आपको सुरक्षित यूआरएल नहीं बदलना चाहता हूं जो रूटिंग आपको देता है।

यहाँ कोड है:

Sub Application_Start(ByVal sender As Object, ByVal e As EventArgs) 
    ' Code that runs on application startup 
    RegisterRoutes(RouteTable.Routes) 
End Sub 


Public Sub RegisterRoutes(ByVal routes As RouteCollection) 
    Dim reportRoute As Route 
    Dim DefaultLang As String = "es" 

    reportRoute = New Route("{lang}/{page}", New LangRouteHandler) 
    '* if you want, you can contrain the values 
    'reportRoute.Constraints = New RouteValueDictionary(New With {.lang = "[a-z]{2}"}) 
    reportRoute.Defaults = New RouteValueDictionary(New With {.lang = DefaultLang, .page = "home"}) 

    routes.Add(reportRoute) 
End Sub 

फिर LangRouteHandler.vb वर्ग:

Public Class LangRouteHandler 
    Implements IRouteHandler 

    Public Function GetHttpHandler(ByVal requestContext As System.Web.Routing.RequestContext) As System.Web.IHttpHandler _ 
     Implements System.Web.Routing.IRouteHandler.GetHttpHandler 

    'Fill the context with the route data, just in case some page needs it 
    For Each value In requestContext.RouteData.Values 
     HttpContext.Current.Items(value.Key) = value.Value 
    Next 

    Dim VirtualPath As String 
    VirtualPath = "~/" + requestContext.RouteData.Values("page") + ".aspx" 

    Dim redirectPage As IHttpHandler 
    redirectPage = BuildManager.CreateInstanceFromVirtualPath(VirtualPath, GetType(Page)) 
    Return redirectPage 

    End Function 
End Class 

अंत में मैं जड़ में default.aspx का उपयोग डिफ़ॉल्ट लैंग ब्राउज़र सूची में इस्तेमाल करने के लिए पुनर्निर्देशित करने के लिए ।
शायद यह मार्ग के साथ किया जा सकता है।चूक, लेकिन दृश्य स्टूडियो के अंदर काम नहीं करते (शायद यह सर्वर में काम करता है)

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) 
    Dim DefaultLang As String = "es" 
    Dim SupportedLangs As String() = {"en", "es"} 
    Dim BrowserLang As String = Mid(Request.UserLanguages(0).ToString(), 1, 2).ToLower 
    If SupportedLangs.Contains(BrowserLang) Then DefaultLang = BrowserLang 

    Response.Redirect(DefaultLang + "/") 
End Sub 

कुछ सूत्रों:
* Mike Ormond's blog
* Chris Cavanagh’s Blog
* MSDN

0

मैं personnaly the resources files का उपयोग है, संसाधनों के बारे में नहीं।

बहुत कुशल, बहुत सरल।

+0

उह? हम यूआरएल को संभालने और एक विशिष्ट भाषा में मैपिंग के बारे में बात कर रहे हैं। –

+0

हां, लेकिन संसाधन फ़ाइलों के साथ, आपको भाषाओं में यूआरएल मानचित्रण करने की आवश्यकता नहीं है, इस प्रकार, समस्या हल हो गई है। – thomasb

1
  1. एएसपीनेट वेबफॉर्म के लिए urlrewriteing.net का उपयोग करें, या एमवीसी के साथ रूटिंग का उपयोग करें। Www.site.com/en/something.aspx को url पर लिखें: page.aspx? Lang = en।
    urlRewriteing.net को web.config में regex के माध्यम से आसानी से कॉन्फ़िगर किया जा सकता है। आप वेबफॉर्म के साथ रूटिंग का भी उपयोग कर सकते हैं, यह शायद समान है ...
  2. वेबफॉर्म के साथ, प्रत्येक एएसपीएक्स पेज बेसपेज क्लास से विरासत में मिलता है, जो तब पृष्ठ वर्ग से प्राप्त होता है।
    बेसपेज क्लास में "InitializeCulture()" ओवरराइड करें और थ्रेड में संस्कृति की जानकारी सेट करें, जैसा कि आपने प्रश्न में वर्णित किया है।
    यह आदेश करना अच्छा है: 1. लैंग परम के लिए यूआरएल जांचें, 2. कुकी जांचें, 3. डिफ़ॉल्ट लैंग सेट करें
  3. पृष्ठों पर स्थैतिक सामग्री (टेक्स्ट, चित्र यूआरएल) के लिए स्थानीय स्रोतों का उपयोग करें, या ग्लोबल सामग्री साइट पर दोहराना है। आप वैश्विक/स्थानीय res का उपयोग करने पर वीडियोकास्ट देख सकते हैं। www.asp.net
  4. पर कई भाषाओं के लिए डीबी तैयार करें। लेकिन यह एक और कहानी है।
0

UrlRewriting जाने का तरीका है।

एमएसडीएन पर ऐसा करने के सर्वोत्तम तरीकों पर एक अच्छा लेख है।

http://msdn.microsoft.com/en-us/library/ms972974.aspx

+0

मुझे UrlRrriting पसंद नहीं है क्योंकि यह यूआरएल –

0

एक स्पर्श की तरह है, लेकिन मैं वास्तव में अलग-अलग पथों से ऐसा करने से बचना चाहता हूं जब तक कि अलग-अलग भाषा पूरी तरह से एक दूसरे से अलग सामग्री न हो।

Google रैंक के लिए, या यूआरएल साझा करने वाले उपयोगकर्ताओं के लिए ('क्लीन' यूआरएल के बड़े फायदों में से एक), आप चाहते हैं कि पता जितना संभव हो सके स्थिर रहें।

आप अपने ब्राउज़र सेटिंग्स से उपयोगकर्ताओं की भाषा प्राथमिकताओं पा सकते हैं:

CultureInfo.CurrentUICulture 

तो अंग्रेजी या स्पेनिश के लिए आपका यूआरएल:

www.domain.com/products/newproduct

किसी भी भाषा के लिए समान पता, लेकिन उपयोगकर्ता को अपनी चुनी भाषा में पृष्ठ मिलता है।

हम कनाडा में इसका उपयोग अंग्रेजी और फ्रेंच में एक ही समय में सिस्टम प्रदान करने के लिए करते हैं।

+0

बदलता है मैं सहमत नहीं हूं। 1. आपकी सामग्री दोनों भाषाओं में कभी नहीं लिखी जाएगी। 2. आप एक निर्दिष्ट भाषा में यूआरएल साझा नहीं कर सकते हैं। –

+0

तो आपके प्रारंभिक उदाहरण में यह स्पेनिश के लिए www.domain.com/es/casa.aspx होना चाहिए? – Keith

+0

नहीं, यूआरएल का नाम वही होगा (वास्तव में, एक ही फाइल है) लेकिन सामग्री और मेटा टैग स्पेनिश में होंगे ताकि लोग स्पेनिश सामग्री या अंग्रेजी सामग्री की खोज कर सकें। बीटीडब्ल्यू, घर कासा की तुलना में इनिसियो की तरह होगा :) –

0

इसके अलावा, देखना नए IIS 7.0 - URL पुनर्लेखन। यहां उत्कृष्ट लेख http://learn.iis.net/page.aspx/496/iis-url-rewriting-and-aspnet-routing/

मुझे यह हिस्सा पसंद आया आपको किस विकल्प का उपयोग करना चाहिए?

  1. आप या तो ASP.NET MVC या ASP.NET गतिशील डेटा तकनीकों का उपयोग करता है कि एक नया ASP.NET वेब एप्लिकेशन बना रहे हैं, ASP.NET मार्ग का उपयोग करें। आपके वेब पृष्ठों में लिंक के लिए स्वच्छ यूआरएल बनाने सहित स्वच्छ यूआरएल के लिए मूल आवेदन से आपका आवेदन लाभान्वित होगा। ध्यान दें कि एएसपी.नेट रूटिंग मानक वेब फॉर्म अनुप्रयोगों का समर्थन नहीं करती है, हालांकि भविष्य में इसका समर्थन करने की योजना है।

  2. यदि आपके पास पहले से ही एक विरासत एएसपी.नेट वेब एप्लिकेशन है और इसे बदलना नहीं चाहते हैं, तो URL-rewrite मॉड्यूल का उपयोग करें। यूआरएल-रीराइटिट मॉड्यूल आपको सर्च इंजन-अनुकूल यूआरएल को उस प्रारूप में अनुवाद करने की अनुमति देता है जो आपका एप्लिकेशन वर्तमान में उपयोग करता है। साथ ही, यह आपको रीडायरेक्ट नियम बनाने की अनुमति देता है जिसका उपयोग यूआरएल को साफ करने के लिए खोज इंजन क्रॉलर को रीडायरेक्ट करने के लिए किया जा सकता है। http://learn.iis.net/page.aspx/496/iis-url-rewriting-and-aspnet-routing/

धन्यवाद, मौलिक।

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