Toon posts:

[.net]Current Culture en UI

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb problemen met

Thread.CurrentThread.CurrentCulture.currentUICulture
en
thread.CurrentThread.CurrentCulture
klassen

ik heb drie knoppen gemaakt die mijn taal moeten veranderen (nederlands, frans en engels)
bij het opstarten van de pagina hebben de currentCulture en currentUICulture (wat is het verschil eigenlijk :? ) de volgende waarden:

respectievelijk nl-NL en nl-BE. (raar, ik heb nochthans niets hard-coded gedefinieerd in mijn web.config)

Als ik dan op de knop frans klikt, komt de franse tekst er weliswaar op:
code:
1
2
Threading.Thread.CurrentThread.CurrentCulture = New Globalization.CultureInfo("fr-FR")
        Threading.Thread.CurrentThread.CurrentUICulture = Threading.Thread.CurrentThread.CurrentCulture


Maar wanneer hij gewoon bij een andere knop postback wordt automatisch de taal "gereset" precies naar nl-NL en nlBE

Hoe kan ik dat verhinderen?

ps: [rml][ .NET] Language resources[/rml] dit topic bracht geen oplossing voor mijn probleem.
pss: in global.asax staan er nergens dat ik mijn taal moet resetten ofzo

  • whoami
  • Registratie: December 2000
  • Laatst online: 00:40
Verwijderd schreef op 16 februari 2004 @ 18:59:
Ik heb problemen met

Thread.CurrentThread.CurrentCulture.currentUICulture
en
thread.CurrentThread.CurrentCulture
klassen
Dat zijn geen klassen, maar properties.
bij het opstarten van de pagina hebben de currentCulture en currentUICulture (wat is het verschil eigenlijk :? ) de volgende waarden:
De settings van CurrentUICulture worden gebruikt door de resource-manager om de juiste resource-file te bepalen en te gebruiken bij het ophalen van 'vertaalbare' items.
De CurrentCulture settings bepalen het gebruikte valuta-teken, decimal en thousand seperator, datum format, etc.....

Waar staat je code waar je de culture gaat gaan setten? In de Page_Load, in een then tak van een if statement dat niet wordt uitgevoerd bij een postback? Zoja, dan zit daar je probleem denk ik.

[ Voor 20% gewijzigd door whoami op 16-02-2004 19:13 ]

https://fgheysels.github.io/


Verwijderd

Topicstarter
Visual Basic .NET:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        'leeg
    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Threading.Thread.CurrentThread.CurrentCulture = New Globalization.CultureInfo("nl-NL")
        Threading.Thread.CurrentThread.CurrentUICulture = Threading.Thread.CurrentThread.CurrentCulture


    End Sub

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        Threading.Thread.CurrentThread.CurrentCulture = New Globalization.CultureInfo("fr-FR")
        Threading.Thread.CurrentThread.CurrentUICulture = Threading.Thread.CurrentThread.CurrentCulture

       
    End Sub


    Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
        Threading.Thread.CurrentThread.CurrentCulture = New Globalization.CultureInfo("en-US")
        Threading.Thread.CurrentThread.CurrentUICulture = Threading.Thread.CurrentThread.CurrentCulture

    End Sub

    
    Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click
    'hierop klikken zorgt ervoor dat hij terug naar standaard gaat
    End Sub


simpele vraag eigenlijk: moet je bij elke load van de pagina OPNIEUW culture zetten? currentthread duidt toch op het lopende thread (dacht ik) >> per bezoeker

  • whoami
  • Registratie: December 2000
  • Laatst online: 00:40
Wanneer denk je dat die thread afgelopen is? Van zodra de pagina in de browser getoond wordt, is die thread afgelopen.
Maar, als je die code in je button_click zet, dan wordt je pagina opnieuw geladen, en wordt die culture gezet. Als je dan opnieuw een postback doet, zonder de culture te zetten, dan ben je volgens mij je culture-setting kwijt.
Ik test es ff wat uit.

https://fgheysels.github.io/


Verwijderd

Topicstarter
maw: bij de taalkeuze in het begin van de site kan je niet gewoon zetten:

code:
1
2
 Threading.Thread.CurrentThread.CurrentCulture = New Globalization.CultureInfo(de keuze)
        Threading.Thread.CurrentThread.CurrentUICulture = Threading.Thread.CurrentThread.CurrentCulture


maar moet deze worden bijgehouden in een querystring of session?

Dan moet ik op elke pagina plaatsen
Threading.Thread.CurrentThread.CurrentCulture = New Globalization.CultureInfo(keuze) in de load.

Ik heb wel één algemene pagina klasse waarvan elke pagina van overerft >> ik ga het daar in de load plaatsen!

  • whoami
  • Registratie: December 2000
  • Laatst online: 00:40
Ik had gelijk.

Als je in je button-click deze code opneemt, dan krijg je de juiste text te zien:

code:
1
2
System.Threading.CurrentThread.CurrentUiCulture = new CultureInfo ("nl-BE");
Response.Write (rm.GetString ("xtest"));


Als je die Response.Write echter in een andere button-handler zet, en je klikt eerst op de button om je taal te zetten, en dan op de button die je text ophaalt, dan heb je de verkeerde text vast.

Je kan het oplossen door de AutoPostBAck property van je button die de CurrentUiCulture zet af te zetten, of je kan het ook zo oplossen:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
protected void Page_Load(object Sender, EventArgs e)
{
    if( Session["culture"] != null )
    {
         System.Threading.CurrentThread.CurrentUICulture = new CultureInfo (Session["culture"].ToString());
    }
}

private void Button1_Click(object sender, System.EventArgs e)
{
     Session["culture"] = "nl-BE";
}

private void Button2_Click(object sender, System.EventArgs e)
{
   Response.Write (rm.GetString("xtest"));
}

Disclaimer: code is uit de losse hand

https://fgheysels.github.io/


  • whoami
  • Registratie: December 2000
  • Laatst online: 00:40
Verwijderd schreef op 16 februari 2004 @ 19:35:

Ik heb wel één algemene pagina klasse waarvan elke pagina van overerft >> ik ga het daar in de load plaatsen!
Je kan het waarschijnlijk ook in de global.asax kwijt, in de Application_BeginRequest.

https://fgheysels.github.io/


Verwijderd

whoami schreef op 16 februari 2004 @ 19:40:
[...]


Je kan het waarschijnlijk ook in de global.asax kwijt, in de Application_BeginRequest.
Dit is juist. Op deze manier heb ik het uiteindelijk perfect aan het draaien.
kZou dus geen session of iets dergelijks gebruiken.

Verwijderd

Topicstarter
ik hebbet zo opgelosd:
Visual Basic .NET:
1
2
3
4
5
6
 Sub aap(ByVal sender As Object, ByVal e As EventArgs) Handles MyBase.PreRequestHandlerExecute
        If Not HttpContext.Current.Session("culture") Is Nothing Then
            Threading.Thread.CurrentThread.CurrentCulture = New Globalization.CultureInfo(CType(HttpContext.Current.Session("culture"), String))
            Threading.Thread.CurrentThread.CurrentUICulture = Threading.Thread.CurrentThread.CurrentCulture
        End If
    End Sub

Je moet niet op methode naam letten, ik flip soms wanneer het niet van de eerste keer wilt werken
Pagina: 1