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.
Genau das habe ich gemacht, aber es scheint nicht zu funktionieren. Es wird nur die Standardwerte und nicht die kulturspezifischen Werte herausziehen. – Kieron
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