2009-07-29 11 views
1

Ich verwende die Resource-Expression-Anweisungen in einer ASP.NET-Seite mit vier globalen Ressourcendateien, neutral, UK, US und Italienisch. Die Verwendung der Ausdruckssyntax gibt jedoch immer US zurück.ASP.NET-Ressourcenausdruck wird nicht korrekt zurückgegeben Kulturwert

Einige Code für die ASPX-Seite:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="GlobalisationResources._Default" %> 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 

<html xmlns="http://www.w3.org/1999/xhtml" > 
<head runat="server"> 
    <title></title> 
</head> 
<body> 
    <form id="form1" runat="server"> 
    <div> 
     <h2>Current culture: <%= System.Threading.Thread.CurrentThread.CurrentUICulture.Name + " - " + System.Threading.Thread.CurrentThread.CurrentCulture.Name %></h2> 
     <h2>At page load: <asp:Literal ID="PageLoadLiteral" runat="server" /></h2> 
     <h2>At initialise culture: <asp:Literal ID="InitCultureLiteral" runat="server" /></h2> 
     <asp:DropDownList AutoPostBack="true" runat="server" ID="LangDropDown" /> 
     <br />  
     Using resources processor command: <span><asp:Literal runat="server" Text="<%$ Resources: SomeResources, Banana %>" /></span> 
     <br /> 
     GetGlobalResourceObject: <span><%= GetGlobalResourceObject ("SomeResources", "Banana") %></span> 
     <br /> 
     Typed: <span><%= Resources.SomeResources.Banana %></span>  
     <br />  
     <br />  
     ORANGES! Using resources processor command: <span><asp:Literal runat="server" Text="<%$ Resources: SomeResources, Orange %>" /></span> 
     <br /> 
     ORANGES! GetGlobalResourceObject: <span><%= GetGlobalResourceObject ("SomeResources", "Orange")%></span> 
     <br /> 
     ORANGES! Typed: <span><%= Resources.SomeResources.Orange %></span>  
    </div> 
    </form> 
</body> 
</html> 

Der Code hinter:

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

namespace GlobalisationResources 
{ 
    public partial class _Default : Page 
    { 
     string mCulture; 

     protected void Page_Load (object sender, EventArgs e) 
     { 
      LangDropDown.SelectedIndexChanged += LangDropDown_SelectedIndexChanged; 

      if (!IsPostBack) 
      { 
       LangDropDown.Items.Add ("en-US"); 
       LangDropDown.Items.Add ("en-GB"); 
       LangDropDown.Items.Add ("it-IT"); 
      } 

      PageLoadLiteral.Text = Thread.CurrentThread.CurrentUICulture.Name + " - " + Thread.CurrentThread.CurrentCulture.Name; 
      InitCultureLiteral.Text = mCulture; 
     } 

     override protected void InitializeCulture() 
     { 
      mCulture = Thread.CurrentThread.CurrentUICulture.Name + " - " + Thread.CurrentThread.CurrentCulture.Name; 

      base.InitializeCulture(); 
     } 

     void LangDropDown_SelectedIndexChanged (object sender, EventArgs e) 
     { 
      Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture (LangDropDown.Text); 
      Thread.CurrentThread.CurrentUICulture = new CultureInfo (LangDropDown.Text); 
     } 
    } 
} 

Wie Sie die Sprache jederzeit und an der Spitze der sehen kann, kann der Benutzer ändern Seite ich die Kultur in den verschiedenen Stadien ausdrucken, sind die Ergebnisse:

auf den ersten Anfrage:

Aktuelle Kultur: en-US - de-DE
Auf Seite zu laden: en-US - de-DE
Bei Initialise Kultur: en-US - de-DE

Wenn GB Auswahl:

aktuelle Kultur: en-GB - de-DE
Auf Seite zu laden: en-US - de-DE
Bei Initialise Kultur: en-US - de-DE

Und für IT:

Aktuelle Kultur: it-IT - it-IT
Auf Seite zu laden: en-US - de-DE
Bei Initialise Kultur: en-US - de-DE

Ich weiß nicht, ob diese Ergebnisse Auswirkungen auf die Verwendung der Resources-Syntax haben oder nicht, aber weiß jemand, warum es immer die falschen Werte aufheben würde, wenn alles andere (GetGlobalResourceObject und typisiert) immer funktioniert?

P.S. Ich bin in Großbritannien und meine Region ist auch in Großbritannien.

Danke.

Antwort

2

Ich denke, Ihre Kultur nicht richtig Satz Satz mit wie .. und plz lass es mich wissen

protected override void InitializeCulture() 
{ 
    Thread.CurrentThread.CurrentUICulture = new CultureInfo("en-US"); 
    Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US"); 
    base.InitializeCulture(); 
} 
+0

Genau das habe ich gemacht, aber es scheint nicht zu funktionieren. Es wird nur die Standardwerte und nicht die kulturspezifischen Werte herausziehen. – Kieron

+0

Verstanden! Obwohl das Steuerelement wegen der Reihenfolge, in der die InitialiseCulture-Methode aufgerufen wird, noch nicht erstellt worden ist. Um das Problem zu beheben, benutze einfach Request.Form ["ControlName"] und alles ist gut. Danke! – Kieron

0

Es ist auch möglich, dieses Problem in einer deklarativen Weise zu beheben:

<%@ Page Language="vb" AutoEventWireup="false" Inherits="Timesheet.ProjectPoP" CodeFile="ProjectPoP.aspx.vb" Culture="auto" UICulture="auto" %>

durch Setzen der beiden Attribute

- Culture = "auto"
- UICulture = "auto"

zu "AUTO" oder "en-US" oder einer anderen Kultur.

Verwandte Themen