SharePointCommunity
Die deutschsprachige Community für SharePoint, Microsoft 365, Teams, Yammer und mit Azure

Sponsored by

Willkommen im Forum Archiv.
Einträge sind hier nicht mehr möglich, aber der Bestand von 12 Jahren SharePoint-Wissen ist hier recherchierbar.




Development: UICulture in ApplicationPage ist falsch

Unbeantwortet Dieser Beitrag hat 4 Antworten

Ohne Rang
508 Beiträge
Tom Scheuermann erstellt 6 Juni 2012 17:02
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Hi Devs,

schon wieder eine Frage zu einem Problem.

Ausgangslage:
- SP2010 Solution, erstellt mit VS 2010
- Application Pages nach Vorlage (im _Layouts Ordner)
- EventReceiver, der zur Laufzeit durch Code gebunden wird (also nur eine Klasse, ohne XML)
- Resource-Files für Standard und Englisch (en-US)

In den ApplicationPages verwende ich $Resources:FileName, StringName.

Ich habe ein Modul integriert, das die ListSetings-Seite erweitert (über CustomAction in der Elements.xml).
Klicke ich den daraus resultierenden Befehl zur Laufzeit an, erscheint meine ApplicationPage in Deutsch oder Englisch - je nach Auswahl des Benutzers.

Im EventReceiver setze ich  teilweise "properties.Status" auf "SPEventReceiverStatus.CancelWithRedirectUrl" und gebe dann unter "properties.RedirectUrl" den Pfad zur ApplicationPage an (die gleiche wie oben).

Die Page wird auch angezeigt, jedoch IMMER in deutscher Sprache - auch wenn der User "Englisch" eingestellt hat.

Ich habe schon einige Zeit an debugging reingesteckt und folgendes herausgefunden:

Wird die ApplicationPage aus den ListSettings aufgerufen, ist die Eigenschaft UICulture der Page auf Deutsch oder Englisch eingestellt - je nach Auswahl des Benutzers.

Wird die ApplicationPage aus dem EventReceiver heraus aufgerufen, ist die UICulture IMMER Deutsch.
In diesem Fall liefer leider auch "SPContext.Current.Web.Language" immer Deutsch - selbst wenn der User Englisch eingestellt hat.

Scheint so, als ob beim Aufruf über den EventReceiver die vom User ausgewählte Sprache nicht sauber übergeben wird ? Weiss da jemand was drüber ?


Alle Antworten

Ohne Rang
929 Beiträge
Thomas Östreich Als Antwort am 6 Juni 2012 21:13
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Die Ausgewählte Sprache vom Benutzer wird nur im Cookie gespeichert und nicht im SP. Web.Language ist immer die Sprache die bei der Bereitstellung der Website gesetzt wurde.

Ohne Rang
508 Beiträge
Tom Scheuermann Als Antwort am 7 Juni 2012 08:25
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

OK.

Aber dennoch sollte doch bei Angabe von <%Resources:File,String%> die richtige Sprache automatisch gewählt werden ?

Fakt ist:
- Rufe ich die ApplicationPage aus den ListSettings.aspx auf, ist die Eigenschaft UICulture der Page auf "Englisch" eingestellt (wenn der Benutzer Englisch ausgewählt hat)

- wird die Application Page vom EventHandler aufgerufen, ist die Eigenschaft UICulture der Page auf "Deutsch" eingestellt (auch wenn der Benutzer Englisch eingestgellt hat)

Entweder habe ich also irgend etwas vergessen oder es handelt sich um einen Bug ....

Greets

Tom

ts (-at-) computer-kreativ.de

Microsoft Certified IT Professional: SharePoint 2010 Administration
Microsoft Certified Technoligie Specialist: SharePoint 2010 Configuring

Ohne Rang
929 Beiträge
Thomas Östreich Als Antwort am 7 Juni 2012 09:27
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Ich vermute das ein Server.Transfer (Serverseitig) statt ein Response.Redirect (Clientseitig) durchgeführt wird, kann man sich aber z.B. mit Fiddler oder Chrome anschauen. Dort kann man sich auch die Cookies anzeigen lasen die übermittelt wurden / werden. Prüfe mal ob du EventReceiver die UICulture korrekt ist wenn ja kannst du diese auch einfach an deine Redirect url setzen "?lcid=1033" und diese dann in der Page wiederrum festlegen in OnInit

Thread.CurrentThread.CurrentUICulture = System.Globalization.CultureInfo.GetCultureInfo(int.Parse(this.Request.QueryString["lcid"]));
Ohne Rang
508 Beiträge
Tom Scheuermann Als Antwort am 7 Juni 2012 10:50
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Hier meine Lösung, die gut funktioniert:

Ich habe den Event InitializeCulture in der ApplicationPage überschrieben:

 

 

 

protected override void InitializeCulture()
{
  int lcid = SPContext.Current.Web.UICulture.LCID;
  if (Request.Cookies["LCID"] != null)
  {
    int.TryParse(Request.Cookies["LCID"].Value, out lcid);
  }
  CultureInfo ci = new CultureInfo(lcid);
  System.Threading.
Thread.CurrentThread.CurrentCulture = ci;
  System.Threading.
Thread.CurrentThread.CurrentUICulture = ci;
  base.InitializeCulture();
}

Denke, das sieht ganz gut aus - ist aber halt nur ein Workaround.

Greets

Tom

ts (-at-) computer-kreativ.de

Microsoft Certified IT Professional: SharePoint 2010 Administration
Microsoft Certified Technoligie Specialist: SharePoint 2010 Configuring