私の見解では、そのファイルの特定のローカルリソースからリソース文字列にアクセスしたいと思います。Webフォームからわかるように:
(string)GetLocalResource("Title");
痛みがなくスムーズ。フレームワークは、カルチャ情報コード拡張子(.en-EN.resx)から取得する.resxファイルを処理します。
RazoreビューのMVC4でそれは可能ですか?そしてどうやって?
.resxファイルのCustom Tool
プロパティをPublicResXFileCodeGenerator
に設定できることに気づきました。そうすれば、ビューからアクセスできます。例:私はindex.cshtmlに対して2つのリソースファイルをデンマーク語と英語で作成しました。私がウェブフォームでするように。これが私が書きたいものです(Custom Tool Name
プロパティを 'ViewResource'に設定):
@ViewResource.Title
バム。現在の文化がデンマーク語の場合、タイトルは「Forside」、英語の場合は「Home」になります。しかし、代わりに私が与えられる唯一のオプションは、特定のファイルを選択することです。そして、そこから目的の文字列を選択します。
@ViewResource.Index_cshtml_en-EN_resx.Title
それは動的ではありません。それで、en-EN/da-DKをどうにかして置き換える拡張クラスを作成できると思いました。しかし、それは本当に「単純な」何かのための比較的多くの作業のようであり、すでに十分に簡単にWebフォームに統合されているようです。別の方法が必要です。確かに、MVCチームは他のすべてのように私たちのためにいくつかのスマートなメカニズムを持っています:)
特別な.NETフォルダーApp_LocalResources
を使用しました。
手順は次のとおりです
そのフォルダーに.resx
ファイルを追加します(例:Resource.resx
、Resource.es-ES.resx
)
各.resx
ファイルを右クリックしてproperties
を選択し、以下が選択されていることを確認します
Build Action: Embedded Resource
Custom Tool: PublicResXFileCodeGenerator
Custom Tool Namespace: Resources
次に、ビューでResources
名前空間を使用して.resx
ファイルのテキストにアクセスできます
<h2>@Resources.Resource.Global_Title<h2>
@Resources
は、Custom Tool Namespace
および.Resource
で指定した名前であるため、.resx
ファイルの名前です。
また、リソースがPublic
に設定されていることを確認してください
任意のモデルからリソースにアクセスするには、1行追加するだけです
using Resources; //<<-- This line
namespace Concordia_CRM.Models
{
public class SolicitudDemo
{
[Required]
[Display(Name = "SD_NombreEmpresa", ResourceType = typeof(Resource))]
public string NombreEmpresa { get; set; }
...
}
詳細については、この post を参照してください。
上部のVisual Studioのリソースデザイナーには、ラベル:アクセス修飾子のコンボボックスがあります。
F.exというフォルダを作成した場合。 「リソース」と2つのファイルIndex.resxとIndex.da-DK.resxを追加します。カミソリビューでこのようにアクセスできるはずです。
@Resources.Index.Title
次に、現在のスレッドカルチャに応じて、正しいファイルからテキストを選択します
terjetylは私を正しい道に導きましたが、それを機能させるためにいくつかの "コーディング"(まあ)を行う必要がありました。私のセットアップはVisual Studio 2013、MVC 5、Razorです。
ビューを含むフォルダーを右クリックし、[追加]> [ASP.NETフォルダーの追加]> [App_LocalResources]を選択します。
ここに2つのリソースファイルを追加します。Index.cshtml.resxとIndex.cshtml .fr-FR。resx(ビューの名前が「Index」で、フランス語の翻訳が必要であると想定しています)。ファイルのプロパティを確認し、それらが_Build Action=Content
_およびCustom Tool=(blank)
に設定されていることを確認します
Resxファイルをダブルクリックし、キー/値を入力します
HtmlHelper拡張メソッドを作成します。
_public static class HtmlExtensions
{
public static MvcHtmlString Translate(this HtmlHelper htmlHelper, string key)
{
var viewPath = ((System.Web.Mvc.RazorView)htmlHelper.ViewContext.View).ViewPath;
var culture = System.Threading.Thread.CurrentThread.CurrentCulture;
var httpContext = htmlHelper.ViewContext.HttpContext;
var val = (string)httpContext.GetLocalResourceObject(viewPath, key, culture);
return MvcHtmlString.Create(val);
}
}
_
ビューで拡張機能を使用します。
<p>@Html.Translate("MyKey")</p>
説明のために、ヘルパーはビューの仮想パスを取得し、それをHttpContext.GetLocalResourceObject()に渡します。HttpContext.GetLocalResourceObject()は、どのリソースファイルを使用するかを決定します(そして、正常に低下します)。
最後に、これがweb.configにあることを確認してください:
_<system.web>
<globalization culture="auto" uiCulture="auto" enableClientBasedCulture="true" />
...
_
私はこれをできるだけ簡単にしようと努めました。ただし、この例を使用すると、fr-FR以外のフランスの文化(たとえば、fr-CA)はデフォルトでベースresxになることに注意してください。これより賢くしたい場合は、より多くのコードが必要です-リクエストに応じて含めることができます。
うまくいきませんでした。 .netフォルダ「App_LocalResources」を使用してしまいました。
@MyApp.Resources.Resources.Title
を使用して機能させました。