質問

何が最高使用の以下の資源ファイルです。

  1. 物件→資源フィル この資源の局在にDataAnnotation)
  2. App_GlobalResourcesフォルダ
  3. App_LocalResourcesフォルダ

もう何が違(1)(2)asp.net mvcます。

役に立ちましたか?

解決

あなたはApp_GlobalResourcesApp_LocalResourcesを避ける必要があります。 クレイグが述べたようにあなたは、ASP.NETランタイムの外でそれらにアクセスすることはできませんので、App_GlobalResources / App_LocalResourcesに問題があります。アプリをテストするユニットだとき、これが問題となるかの良い例があります。

K。スコット・アレンは、しばらく前にこのブログについて。彼は、ASP.NET MVC <のhref = "http://odetocode.com/Blogs/scott/archive/2009/07/16/resource-files-and-asp-netにApp_GlobalResourcesに問題があることを説明するのは良い仕事をしていませんここを-mvc-projects.aspx」のrel = "nofollowをnoreferrer">。

他のヒント

あなたが推奨される解決策(1)(すなわち、K.スコット・アレンのブログのように)で行く場合:

例えば、明示的なローカリゼーション式(式を結合別名宣言型リソース)を使用しようとしているあなたのそれらのために<%$ Resources, MyResource:SomeString %>

public class AppResourceProvider : IResourceProvider
{
    private readonly string _ResourceClassName;
    ResourceManager _ResourceManager = null;

    public AppResourceProvider(string className)
    {
        _ResourceClassName = className;
    }

    public object GetObject(string resourceKey, System.Globalization.CultureInfo culture)
    {
        EnsureResourceManager();
        if (culture == null)
        {
            culture = CultureInfo.CurrentUICulture;
        }
        return _ResourceManager.GetObject(resourceKey, culture);
    }

    public System.Resources.IResourceReader ResourceReader
    {
        get
        {
            // Not needed for global resources
            throw new NotSupportedException();
        }
    }

    private void EnsureResourceManager()
    {
        var assembly = typeof(Resources.ResourceInAppToGetAssembly).Assembly;
        String resourceFullName = String.Format("{0}.Resources.{1}", assembly.GetName().Name, _ResourceClassName);
        _ResourceManager = new global::System.Resources.ResourceManager(resourceFullName, assembly);
        _ResourceManager.IgnoreCase = true;
    }
}

public class AppResourceProviderFactory : ResourceProviderFactory
{
    // Thank you, .NET, for providing no way to override global resource providing w/o also overriding local resource providing
    private static Type ResXProviderType = typeof(ResourceProviderFactory).Assembly.GetType("System.Web.Compilation.ResXResourceProviderFactory");
    ResourceProviderFactory _DefaultFactory;

    public AppResourceProviderFactory()
    {
        _DefaultFactory = (ResourceProviderFactory)Activator.CreateInstance(ResXProviderType);
    }

    public override IResourceProvider CreateGlobalResourceProvider(string classKey)
    {
        return new AppResourceProvider(classKey);
    }

    public override IResourceProvider CreateLocalResourceProvider(string virtualPath)
    {
        return _DefaultFactory.CreateLocalResourceProvider(virtualPath);
    }
}

次に、あなたのweb.configファイルに以下を追加します:

    <globalization requestEncoding="utf-8" responseEncoding="utf-8" fileEncoding="utf-8" culture="en-US" uiCulture="en"
                   resourceProviderFactoryType="Vendalism.ResourceProvider.AppResourceProviderFactory" />

プロパティ→リソースは、あなたの意見の外で見ることができ、アプリケーションをコンパイルする際に強いタイプが生成されます。

がapp_ *あなたの意見がコンパイルされているASP.NETによってコンパイルされます。彼らは、ビューでのみ使用可能です。ローカル対グローバルのためのこのページを参照してください。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top