1

重複の可能性:
CurrentThread.CurrentUICulture は正しく設定されていますが、asp.net では無視されているようです

私は多くのフォーラムで尋ねましたが、誰も私を助けることができないようです!

default.aspx:

<asp:Literal ID="Literal1" Text="<%$Resources:lookingfor %>" runat="server"/>

default.aspx.vb:

Shared rm As ResourceManager = HttpContext.Current.Application("RM")

  Protected Overrides Sub InitializeCulture()
        Dim cultureInfo As Globalization.CultureInfo = Globalization.CultureInfo.CreateSpecificCulture("en")
        Threading.Thread.CurrentThread.CurrentCulture = cultureInfo
        Threading.Thread.CurrentThread.CurrentUICulture = cultureInfo

        'Here I log the value of currentculture
        ReportError("default.aspx:InitializeCulture.CurrentCulture", System.Threading.Thread.CurrentThread.CurrentCulture.ToString)
        ReportError("default.aspx:InitializeCulture.CurrentUICulture", System.Threading.Thread.CurrentThread.CurrentUICulture.ToString)

        'log file shows that:
        'CurrentCulture =   "en-US"
        'CurrentUICulture=  "en-US"
    End Sub

   Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        If Not Page.IsPostBack Then
            'again logging the currentculture:
            ReportError("default.aspx:page_load.CurrentCulture", System.Threading.Thread.CurrentThread.CurrentCulture.ToString)
            ReportError("default.aspx:page_load.CurrentUICulture", System.Threading.Thread.CurrentThread.CurrentUICulture.ToString)

            'log file shows that:
            'CurrentCulture =   "en-US"
            'CurrentUICulture=  "en-US"

            Me.Page.Title = rm.GetString("homewelcome") 
        End If
    End Sub

グローバル.asax:

Sub Application_Start(ByVal sender As Object, ByVal e As EventArgs)
    Application("RM") = New ResourceManager("strings", Assembly.Load("strings"))
End Sub 

\bin フォルダー: bin フォルダーには次のものがあります。

bin\strings.txt
ビン\nl\strings.nl.txt
bin\en\strings.en.txt

私は次のようにdllを生成します:

resgen 文字列.txt 文字列.リソース
al /embed:strings.resources,strings.resources /out:strings.dll
resgen nl\strings.nl.resources
al /embed:nl\strings.nl.resources,strings.nl.resources /out:nl\strings.resources.dll /c:nl
resgen en\strings.en.resources
al /embed:en\strings.en.resources,strings.en.resources /out:en\strings.resources.dll /c:en  

今、default.aspxをロードすると

Literal1 コントロールには、「何をお探しですか?」と表示されます。これは App_LocalResources\default.aspx.en.resx の値なので、正しいです。

しかし、ページ タイトル (Me.Page.Title = rm.GetString("homewelcome")) には、bin\strings.txt の値が表示されます。bin\en\strings.txt の値を表示したいので、それはもちろん正しくありません

つまり、リソース マネージャーはカルチャを無視していますが、リテラルは正しいカルチャを使用しています!

ここで何が欠けていますか?

4

1 に答える 1

0

文字列ファイルをすべて同じフォルダーに入れてみませんか。あなたの設定が何であるかはわかりませんが、デフォルトでは、ResourceManager は同じフォルダー内のリソースを検索しようとすると思います。適切なリソースが見つからない場合は、デフォルトのものに戻ります。あなたの場合は strings.txt です。

ここに画像の説明を入力

于 2011-05-02T19:28:32.890 に答える