2009-07-29 4 views
1

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.私は英国にいますし、私の地域も英国に設定されています。

ありがとうございました。

答えて

2

私はあなたの文化のような使用して適切に セットを設定していないと思う...とplzは私は宣言的な方法でこの問題を修正することも可能である

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

これはまさに私がやったことですが、うまくいかないようです。それは文化固有の値ではなく、デフォルトを引き出すだけです。 – Kieron

+0

その時それを得ました! InitialiseCultureメソッドが呼び出される順序のため、コントロールはまだ作成されていません。修正するには、単純にRequest.Form ["ControlName"]を使用してください。 ありがとう! – Kieron

0

をお知らせ:

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

2つの属性を設定して

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

を "AUTO"または "en-US"または他の任意のカルチャに変換する。

関連する問題