0

MVC アプリケーションでリソース (.resx) メッセージのローカリゼーションを実装する必要がありますが、実装に失敗しています。

私が従っている手順を確認します。

1.ローカリゼーション プロジェクトを作成し、サポートする必要がある言語と同じ数のリソース (.resx) ファイルを追加します。選択したすべての言語で、表示するメッセージを追加します。Visual Studio の「アクセス修飾子」オプションで「パブリック」を選択します。必要な規則に従ってリソース ファイルに名前を付けることを確認してください。つまり、既定の言語の場合は MyResource.resx、フランス語のローカライズの場合は MyResource-fr.resx、ルーマニア語のローカライズの場合は MyResource.ro などです。

2. http 要求から Accept-Language http ヘッダーを検出して解析します。存在する場合は常に、「q」係数が最も高いものを選択します。何も存在しないか、すべての q 値が同じである場合は、受け入れられる最初の言語を選択します。

更新: web.configに追加してもまったく同じことが行われるため、手作業は必要ないことを知りました(@ Zealousコメントを参照)。<globalization enableClientBasedCulture="true" culture="auto" uiCulture="auto"/>

3.アプリケーションコントローラーがベースコントローラーから継承するようにします(フィルターを介して行うこともできます)。これにより、Thread.CurrentThread.CurrentCultureおよびThread.CurrentThread.CurrentUICultureの参照が、最も優先度の高いものに従って、その場で作成された新しいインスタンスに変更されます。前のステップから抽出された、受け入れられた言語。

4.上記の手順で作成したローカリゼーション プロジェクトへの参照を、メッセージを参照する必要があるプロジェクトに追加します。メッセージを参照する場合は、表示したいメッセージをリソースのデフォルト ファイル名「ドット」で参照するだけです。この例では、MyResource.Welcome になります。

期待される結果: Accept-Language を 'fr' に設定して http リクエストを送信すると、"Bienvenue" を含む応答を受け取りますが、Accept-Language を 'en' に設定する (またはいくつかの言語を追加して q ファクターをいじる) と、 「いらっしゃいませ」と返事。

どういうわけか、私の回答は常にデフォルトのリソース ファイル (この場合は英語) を使用しています。

私は何が欠けているか、間違っていますか?

4

1 に答える 1

0

問題は解決し、他の人のためにここに答えを残します:

私の accept-language ヘッダーは "he, he-IL" に設定されており、CLR は常に既定の言語リソースを選択していました。デフォルト言語用のリソースと he-IL 用のリソースがありました。

私は、CLR が適切なリソース ファイルを決定するために、he と he-IL の両方が同じであると考えていました。本当じゃない。「彼」だけがレガシーであり、最近はもう表示されないことを知りましたが、解決策は、「彼」ヘッダーをマップする 3 番目のリソース (MyResource.he.resx という名前) を追加するか、ヘッダーから「彼」を削除することでした。すでにマッピングされている「he-IL」のみを残すaccept-languageヘッダー。

于 2015-05-06T11:05:34.147 に答える