문제

다음 리소스 파일의 최상의 사용법은 무엇입니까?

  1. 속성 → 자원 ( 이 리소스를 데이터 분석에서 현지화에 사용했습니다)
  2. app_globalresources 폴더
  3. app_localresources 폴더

또한 ASP.NET MVC 응용 프로그램에서 (1)과 (2)의 차이점이 무엇인지 알고 싶습니다.

도움이 되었습니까?

해결책

당신은 피해야합니다 App_GlobalResources 그리고 App_LocalResources. Craig가 언급했듯이 문제가 있습니다 App_GlobalResources/App_LocalResources ASP.NET 런타임 외부에서 액세스 할 수 없기 때문입니다. 이것이 어떻게 문제가되는지에 대한 좋은 예는 앱을 테스트 할 때입니다.

K. Scott Allen은 얼마 전에 이것에 대해 블로그를 작성했습니다. 그는 문제를 설명하는 좋은 일을합니다. App_GlobalResources ASP.NET MVC에서 여기.

다른 팁

권장 솔루션 (1) (예 : K. Scott Allen의 블로그에서와 같이)와 함께 가면 :

명시 적 현지화 표현식 (일명 선언 자원 바인딩 표현)을 사용하려는 사람들을 위해 <%$ 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