Best practice for ASP.NET MVC resource files

后端 未结 3 1609
时光说笑
时光说笑 2020-11-30 01:31

What are the best usage of the following resource files.

  1. Properties → Resources (Phil used this resource for localization in DataAnnotation)
  2. App_Glo
3条回答
  •  失恋的感觉
    2020-11-30 01:43

    If you go with the recommended solution (1) (i.e. as in K. Scott Allen's blog):

    For those of you trying to use explicit localization expressions (aka declarative resource binding expressions), e.g. <%$ 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);
        }
    }
    

    Then, add this to your web.config:

        
    

提交回复
热议问题