4つのグローバルリソースファイル(ニュートラル、英国、米国、イタリア語)を持つASP.NETページで、リソース式ディレクティブを使用しています。ただし、式構文を使用すると常にUSが返されます。ASP.NETリソース式が正しく返されないCulture値
ASPXページのためのいくつかのコード:
<%@ 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>
背後にあるコード:
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);
}
}
}
あなたが見ることができるように、ユーザーはいつでも言語を変更し、の一番上にすることができますページ私はさまざまな段階での文化をプリントアウトし、結果は以下のとおりです。
最初の要求で:
現在の文化:USエン - エンGB
ページのロード時:EN-US - エンGB
初期化の文化で:EN-US - エンGB
GBを選択:
現在のカルチャ:アン・GB - エンGB
ページのロード時: - EN-US初期化の文化で
GB-EN:EN-US - エンGB
とITのための:
現在の文化:それ-ITを - ページロードでそれ-IT
:それらの結果ならば、私は知らない
エンGB
- : - EN-US EN-US初期化の文化でGB-ENリソースの構文を使用するかどうかには何の影響もありますが、それ以外のもの(GetGlobalResourceObjectと型指定されたもの)が常に機能するときは、間違った値を常に拾う理由は誰にも分かりますか?
P.S.私は英国にいますし、私の地域も英国に設定されています。
ありがとうございました。
これはまさに私がやったことですが、うまくいかないようです。それは文化固有の値ではなく、デフォルトを引き出すだけです。 – Kieron
その時それを得ました! InitialiseCultureメソッドが呼び出される順序のため、コントロールはまだ作成されていません。修正するには、単純にRequest.Form ["ControlName"]を使用してください。 ありがとう! – Kieron