en-UShe-IL
You are here:   Blog
Register   |  Login

Blog Archive:

Maximize
* Can be used in order to search for older blogs Entries

Search in blogs


Blog Categories:

Maximize
* Can be used in order to search for blogs Entries by Categories

Blog Tags:

Maximize
* Can be used in order to search for blogs by keywords

TNWikiSummit


Awared MVP 


 


Microsoft® Community Contributor 


Microsoft® Community Contributor


 Read first, before you you use the blog! Maximize
פבר22

Written by: ronen ariely
22/02/2012 23:21 RssIcon

כיצד נוכל להעברית מהמשתמש את Culture בו הוא רוצה לגלוש אל השרת שלנו ולהציג לו את התוכן המתאים?

* שימוש בעוגיה לשמירת ה Culture

* שימוש ב Session לשמירת ה Culture

* שימוש ב URL הכולל את ה Culture

במדריך קצר זה נראה את האופציה השלישית המומלצת על פי אריטקטורת הפיתוח של REST (representational state transfer) כאשר כל העבודה תעשה בקובץ האפליקציה global.aspx

שלב ראשון יהיה הגדרת הראוטר לכתובת מצורה זו תוך התאמה למצב שהמשתמש נכנס לכתובת ללא הגדרת התרבות (Culture) ז"א במקרה זה נקבע את התרבות לברירת המחדל שאנו רוצים:

routes.MapRoute(
                "DefaultLocalized",
                "{language}-{culture}/{controller}/{action}/{id}",
            new
            {
                controller = "Home",
                action = "Index",
                id = UrlParameter.Optional,
                language = "he",
                culture = "IL"
            });
 
            routes.MapRoute(
                "Default", // Route name
                "{controller}/{action}/{id}", // URL with parameters
                new { controller = "Home"
                    , action = "Index"
                    , id = UrlParameter.Optional
                    ,language = "he"
                    ,culture = "IL"
                } // Parameter defaults
            );

שלב שני יהיה הגדרת ה Culture על פי הכתובת שלנו. יש לשים לב שלא ניתןם להגדיר את ה culture  באירוע מאוחר יותר מזה של האירוע בו אני נעזר בהדגמה זו אבל ניתן להצמיד את הפעולה גם לאירועים מוקדמים יותר בחיי האפליקציה

protected void Application_AcquireRequestState(object sender, EventArgs e)
{
    SetCultureByUrl();
}
 
private void SetCultureByUrl()
{
    var handler = Context.Handler as MvcHandler;
    if (handler == null) return;
    var routeData = handler.RequestContext.RouteData;
 
    string language = (string)routeData.Values["language"] ?? "he";
    string culture = (string)routeData.Values["culture"] ?? "IL";
 
    Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo(string.Format("{0}-{1}", language, culture));
    Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo(string.Format("{0}-{1}", language, culture));
 
}

וכמו שאומרים זה כל העניין