Avatar billede pablopablo Nybegynder
28. september 2006 - 12:16 Der er 17 kommentarer og
1 løsning

Localization asp.net 2.0

Hejsa...

Jeg er ved at lave en hjemmeside i to sprog. Dertil har jeg lagt alle div. tekster i globale resx filer.
På min Master page har jeg placeret to små flag, som brugeren skal kunne trykke på for at ændre siden sprog.
Men jeg er lige i tvivl omkring, hvordan jeg skal gøre resten.

I min Default.aspx side har jeg overriddet følgende metode:

protected override void InitializeCulture()
    {
        Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(Session["sprog"].ToString());
        Thread.CurrentThread.CurrentUICulture = new CultureInfo(Session["sprog"].ToString());
        base.InitializeCulture();
    }

og koden bag mine flag-knapper, ser således ud:

protected void ImageButtonDK_Click(object sender, ImageClickEventArgs e)
    {
        Session["sprog"] = "da";
       
    }
    protected void ImageButtonUS_Click(object sender, ImageClickEventArgs e)
    {
        Session["sprog"] = "en-us";
    }

Dette virker kun delvist...dvs. hvis teskten er på dansk og jeg klikker på det engelske flag, så skal jeg efterfølgende selv trykke F5/Refresh for at sproget på siden skifter.

Håber meget i kan hjælpe mig!

Mvh. PabloPablo
Avatar billede janus_007 Nybegynder
28. september 2006 - 12:39 #1
Det er fordi events først affyres efter page_load, lav evt. en response.redirect i ovenstående metoder som blot kalder default-page igen!
Avatar billede pablopablo Nybegynder
28. september 2006 - 12:50 #2
? hvis jeg indsætter : Response.Redirect("~/Default.aspx"); i InitializeCulture metoden som laver det jo en uendelig løkke! Det dutter ikke...
Avatar billede c-sharp Nybegynder
28. september 2006 - 13:12 #3
Avatar billede pablopablo Nybegynder
28. september 2006 - 13:32 #4
De gør det på en anden måde... men forstår det ikke rigitgt...hvordan pokker for de cultureInfo ud fra: DropDownList1.UniqueID; ??? og desuden findes der ikke nogen metode i global filen som hedder: void Application_BeginRequest(Object sender, EventArgs e)...er det en man selv skal oprette?

Hvis du er helt med, ville det være fedt hvis du kunne lave et eks. med to knapperog session var. i stedet for...
Avatar billede c-sharp Nybegynder
28. september 2006 - 13:53 #5
prøv det her:

cs:
    protected void Page_Load(object sender, EventArgs e)
    {

      if (!IsPostBack)
        {
            // Det er en måde at styrre sprogstyrringen fra MasterPage, det håndteres så i global.asax
            sprog.Text = CultureInfo.CurrentCulture.ToString();
            dansk_btn.OnClientClick = "document." + form1.UniqueID + "." + sprog.UniqueID + ".value='da'";
            engelsk_btn.OnClientClick = "document." + form1.UniqueID + "." + sprog.UniqueID + ".value='en-us'";

            HttpCookie cookie = new HttpCookie("sprog_tmp");
            cookie.Value = sprog.UniqueID;
            Response.SetCookie(cookie);

        }
        }
       
        aspx:
        <form id="form1" runat="server">   
            <asp:ImageButton ID="dansk_btn" ImageUrl="images/new/flag_dk.gif" CausesValidation="false" AlternateText="Dansk" runat="Server" />
                <asp:ImageButton ID="engelsk_btn" ImageUrl="images/new/flag_uk.gif" CausesValidation="false" AlternateText="Engelsk" runat="Server"/>

            <asp:TextBox ID="sprog" Text="da" style="visibility:hidden" runat="server" />
        </form>
       
       
        Global.asax:
        void Application_BeginRequest(Object sender, EventArgs e)
    {
        string lang = string.Empty;//default to the invariant culture
        HttpCookie cookie = Request.Cookies["sprog_tmp"];
       
         
        if (cookie != null && cookie.Value != null)
        {
            // Dette tjek er nødvendig da Application_BeginRequest bliver
            // kaldt flere gange når der er billeder på siden.
            if (Request.Form[cookie.Value] != null)
            {
                lang = Request.Form[cookie.Value];
               
                HttpCookie cookie1 = new HttpCookie("sprog", lang);
                cookie1.Expires = DateTime.Now.AddYears(100);
                Response.Cookies.Add(cookie1);
            }
            else if (Request.Cookies["sprog"] != null)
                lang = Request.Cookies["sprog"].Value;

        }
       
        Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo(lang);
        Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(lang);
    }
Avatar billede pablopablo Nybegynder
28. september 2006 - 15:11 #6
C-Sharp >> hey...jeg har afprøvet din kode...men før følgende fejl:

A page can have only one server-side Form tag.

Gør jeg noget forkert?
Avatar billede pablopablo Nybegynder
28. september 2006 - 15:44 #7
hey...sorry...det virker nu! :) det var blot pga. jeg havde et form tag i et form tag...

Et sidste spg... jeg vil gerne have at det virker sådan, at default sproget bliver sat til den sprog browseren benytter og hvis brugeren ønsker at ændre sproget så klikke brugeren blot på et af flagene.

Lige nu har jeg kun sat Dansk sprog til i IE. Men idet ressource filer i default versionen er på engelsk, ja så vises siden på engelsk når den loades første gang.

Jeg har prøvet med følgende kode i Page directive i toppen Default siden:

Culture="auto" UICulture="auto"

Det ændre teksten til det browseren benytter - Men tilgengæld gør det så at sproget IKKE skifter på Default siden når man klikker på flagene...??

Såå....hva skal jeg så gøre??
i mit Page directiv i Default siden... har jeg sat følgende kode ind:

Culture="auto" UICulture="auto"
Avatar billede pablopablo Nybegynder
28. september 2006 - 15:45 #8
hov! Noget af koden blev vist pasted ind en gang for meget...:)
Avatar billede c-sharp Nybegynder
28. september 2006 - 16:09 #9
Så kan du gøre noget ala det her i din global.asax:

void Session_Start(object sender, EventArgs e)
    {

        string sprog = null;
       
        try
        {
            // Her kontroleres om klienten har været her før, og hvis dette er
            // tilfældet sættes det sprog som de valgte sidst
            if (Request.Cookies["sprog"] != null)
            {
                sprog = Request.Cookies["sprog"].Value;

            }
            else
            {
                //Her kontrolleres sprogindstillingen for klientens browser
                sprog = Request.UserLanguages[0];

                string sprogTmp = sprog.Substring(0, 2);
                // Hvis den er forskellige for nogle af de sprog der er tilgængelig
                // På sitet, sættes sproget til engelsk
                if (sprogTmp != "da" && sprogTmp != "en")
                    sprog = "en";
            }
        }
        catch
        {
            sprog = "en";
        }
       
        Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo(sprog);
        Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(sprog);
    }
Avatar billede pablopablo Nybegynder
28. september 2006 - 16:35 #10
C-Sharp >> lækkert!! læg et svar og få dine velfortjente points...

By the way...hvordan fikser jeg localization for seperate sider...med det mener jeg...sider som ikke er content pages...og dermed ikke har noget med master pagen at gøre...?
Avatar billede c-sharp Nybegynder
28. september 2006 - 17:17 #11
evt. sådan her:

        private void skiftSprog(string sprog)
        {
            Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(sprog);
            Thread.CurrentThread.CurrentUICulture = new CultureInfo(sprog);

            HttpCookie cookie = new HttpCookie("sprog", sprog);
            cookie.Expires = DateTime.Now.AddYears(100);
            Response.Cookies.Add(cookie);

            setTekster();
        }

        private void sp_Dansk_Click(object sender, System.EventArgs e)
        {
            skiftSprog("da-DK");
        }
Avatar billede pablopablo Nybegynder
29. september 2006 - 02:02 #12
Tænkte på...jeg bruger også localization til min web.Sitemap fil...det virker delvist...dvs. at teksterne hentes på et af de to sprog når siden loades - men når jeg klikker på et af mine flag så skifter teksterne i min menu ikke...?

Nogen ide...?
Avatar billede c-sharp Nybegynder
29. september 2006 - 05:45 #13
tak for point :-)

Jeg har desværre aldrig brugt det sitemap der ligger i .net så jeg ved ikke hvordan det fungere.
Avatar billede janus_007 Nybegynder
29. september 2006 - 21:58 #14
Det var ikke i InitializeCulture,men i dine event-metoder - det stod rimeligt klart og tydeligt. Den løsning fra c-sharp er totalt overkill, men dig om det.

Læs lidt her for at få lidt større forståelse: http://msdn2.microsoft.com/en-us/library/ms178472.aspx

Anyway... jeg håber du fik løst dit problem :-)
Avatar billede c-sharp Nybegynder
29. september 2006 - 22:17 #15
Så beklager jeg at have posted så meget kode til forviring...

Jeg opretter lige et spørgsmål så janus_007 kan få pointne.
Avatar billede c-sharp Nybegynder
29. september 2006 - 22:20 #16
janus_007 der er point til dig her: http://www.eksperten.dk/spm/735552
Avatar billede pablopablo Nybegynder
02. oktober 2006 - 13:45 #17
Hej igen... ang. sitemap så har jeg fulgt dette link: http://msdn2.microsoft.com/en-us/library/ms178427.aspx

og det virker også fint....MEN ...teksten skifter bare ikke med det sammen i menu'en når jeg klikker på flagene...det er først når jeg loader siden igen...at sproget ændre sig til det jeg klikkede på inden jeg lukkede siden ned for at starte den op igen...Hvordan kan jeg ændre dette?
Avatar billede pablopablo Nybegynder
02. oktober 2006 - 14:45 #18
wwee...SÅ lykkedes det....jeg kaldte blot Databind på min menu i load metoden! very simple...
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester