Avatar billede flashit Nybegynder
06. juli 2009 - 13:55 Der er 7 kommentarer og
1 løsning

"language skifter" web user control

Hej e.

Er her en som har løst problemet med at bygge en "language skifter"  web user control.

Jeg vil gerne bygge en kontrol som har 2 knapper. Når man klikker på den ene så skifter det til Engelse sprog og den anden til dansk.

For ikke at have kode på alle mine sider, vil jeg gerne bygge en web user control til dette.
Problemet er bare at jeg ikke kan kalde InitializeCulture da den kommer fra System.Web.UI.Page. som min Web User Kontrol ikke bruger.

Jeg har prøvet at lave min egen basepage som arver fra page. Dette virker fint fra en "normal" aspx side, men ikke en Web User Kontrol.

Men ander ord. Hvordan kan jeg lave en Web User Kontrol som kan skifte sprog?

Her der den kode jeg har testet med:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Threading;
using System.Globalization;


/// <summary>
/// Summary description for BaseClass
/// </summary>
public class BaseClass : System.Web.UI.Page
{
    public BaseClass()

    {
        //
        // TODO: Add constructor logic here
        //
    }

    protected override void InitializeCulture()
    {
        if (Session["Language"] != null)
        {
            string currentLanguage = Session["Language"].ToString();
           
            System.Globalization.CultureInfo ci = new System.Globalization.CultureInfo(currentLanguage);
            System.Threading.Thread.CurrentThread.CurrentCulture = ci;
            System.Threading.Thread.CurrentThread.CurrentUICulture = ci;

            base.InitializeCulture();
        }
    }
}




using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Globalization;

public partial class Default3 : BaseClass
{
    protected void Page_Load(object sender, EventArgs e)
    {
        Session["Language"] = CultureInfo.CurrentUICulture.ToString();

        Label1.Text = Session["Language"].ToString();
    }


    protected void Page_prerender(object sender, EventArgs e)
    {
       
        Label1.Text = Session["Language"].ToString();
    }
    protected void Button1_Click(object sender, EventArgs e)
    {
        Session["Language"] = "en-GB";
        InitializeCulture();
    }
}
Avatar billede Syska Mester
06. juli 2009 - 15:38 #1
Du kan jo fra din UserControl hente Page ud ... og så kalde InitializeCulture på det Page object du får tilbage ...

På Load eventen på din UserControl burde Page objecten være oprettet så du har adgang til det ...

Har aldrig selv bruge Culture ting, men lavet mit eget system da jeg har 10 sprog på min side ... men mon ikke overstående kan gøre det ....

// ouT
Avatar billede flashit Nybegynder
07. juli 2009 - 10:54 #2
hej buzzzz

Kan du komme med et eks på hvordan jeg kan få fat i page objektet fra page_Load?


:-)
Avatar billede Syska Mester
07. juli 2009 - 12:48 #3
protected override void OnPreRender(EventArgs e)
    {
        base.OnPreRender(e);

        Page.[Property/Method du nu vil bruge]

    }
Avatar billede flashit Nybegynder
07. juli 2009 - 15:19 #4
Hej Igen

Tak for svaret. Jeg forstår bare ikke hvordan det vil give mig adgang til InitializeCulture?

Her er min .cs fil.
Er det som du mener?

public partial class LanguagePicker : System.Web.UI.UserControl
{
    protected override void OnPreRender(EventArgs e)
    {
        base.OnPreRender(e);
        Page.UICulture = Session["Language"].ToString();
    }   
   
   
    protected void Page_Prerender(object sender, EventArgs e)
    {
        Session["Language"] = CultureInfo.CurrentUICulture.ToString();
        Label1.Text = Session["Language"].ToString();
    }

    protected void Page_Load(object sender, EventArgs e)
    {
     
    }
    protected void btnDanish_Click(object sender, EventArgs e)
    {
        Session["Language"] = "da-DK";
    }
    protected void btnEnglish_Click(object sender, EventArgs e)
    {
        Session["Language"] = "en-GB";
    }

    protected override void InitializeCulture()
    {
        if (Session["Language"] != null)
        {
            string currentLanguage = Session["Language"].ToString();
            Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(currentLanguage);
            Thread.CurrentThread.CurrentUICulture = new CultureInfo(currentLanguage);
            base.InitializeCulture();
        }
    }
}
Avatar billede Syska Mester
07. juli 2009 - 17:56 #5
ja ...

Dog vil jeg nok sikre mig at din Session ikke er null.

Page.UICulture = (Session["Language"] ?? "da-DK").ToString();
Eventuelt andet default sprog.

Du skal stadig have en Init method i din Page class som så arver fra din Custom Page class.

Alle dine sider skal så arve fra din custom page class

Men virker det da ik' ?

Jeg ville måske google "asp.net event order"

Jeg har ingen ide om hvornår en Page kalder dens InitializeCultur
Avatar billede flashit Nybegynder
11. juli 2009 - 15:21 #6
hej buzzzz

Tak for hjælpen.
Lægger du ikke et svar?
Avatar billede flashit Nybegynder
11. september 2009 - 13:41 #7
er du der....:-)
Avatar billede flashit Nybegynder
08. marts 2011 - 16:29 #8
lukker
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