1

ニュートラル、英国、米国、イタリア語の4つのグローバルリソースファイルがあるASP.NETページでリソース式ディレクティブを使用しています。ただし、式の構文を使用すると、常にUSが返されます。

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);
        }
    }
}

ご覧のとおり、ユーザーはいつでも言語を変更できます。ページの上部で、さまざまな段階でカルチャを印刷すると、結果は次のようになります。

最初のリクエスト:

現在のカルチャ:en-US-en-GB
ページの読み込み時:en-US-en-GB
初期化カルチャ時:en-US-en-GB

GBを選択する場合:

現在のカルチャ:en-GB-en-GB
ページの読み込み時:en-US-en-GB
初期化カルチャ時:en-US-en-GB

そしてITの場合:

現在のカルチャ:it-IT-it-IT
ページのロード時:en-US-en-GB
初期化カルチャ時:en-US-en-GB

これらの結果がResources構文の使用に影響を与えるかどうかはわかりませんが、他のすべて(GetGlobalResourceObjectおよびtyped)が常に機能するのに、なぜ常に間違った値を取得するのか誰かが知っていますか?

PS私は英国にいます、そして私の地域も英国に設定されています。

ありがとう。

4

2 に答える 2

2

あなたの文化は、like..とplzを使用して適切に設定されていないと思います

protected override void InitializeCulture()
{
    Thread.CurrentThread.CurrentUICulture = new CultureInfo("en-US");
    Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");
    base.InitializeCulture();
}
于 2009-07-29T10:59:43.737 に答える
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」またはその他の文化に。

于 2015-11-27T16:32:41.327 に答える