private object GetObjectInternal(string resourceKey, string cultureName)
        {
            IDictionary resources = this.GetResourceCache(cultureName);

            object value = null;

            if (resources == null)
            {
                value = null;
            }
            else
            {
                value = resources[resourceKey];
            }

            // If we're at a specific culture (en-US) and there's no value, then fall back
            // to the generic culture (en)
            if (value == null && cultureName.Length > 3)
            {
                // Try again with the 2 letter locale
                value = GetObjectInternal(resourceKey, cultureName.Substring(0, 2));
            }

            // If the value is still null get the invariant value
            if (value == null && cultureName.Length > 0)
            {
                value = GetObjectInternal(resourceKey, CultureInfo.InvariantCulture.Name);
            }


            // If the value is still null and we're at the invariant culture
            // fallback to default resource provider
            if (value == null && string.IsNullOrEmpty(cultureName))
            {
                IResourceProvider       resxProvider;
                string                  typeName = "System.Web.Compilation.ResXResourceProviderFactory, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a";
                ResourceProviderFactory factory  = (ResourceProviderFactory)Activator.CreateInstance(Type.GetType(typeName));
                if (FactoryType == ResxFactoryType.Global)
                {
                    resxProvider = factory.CreateGlobalResourceProvider(originalClassName);
                }
                else
                {
                    resxProvider = factory.CreateLocalResourceProvider(originalClassName);
                }

                value = resxProvider.GetObject(resourceKey, new CultureInfo(cultureName));
                (_resourceCache[cultureName] as Dictionary <string, object>).Add(resourceKey, value);
            }

            Debug.WriteLine(resourceKey, "Key");
            Debug.WriteLine(value, "Value");
            Debug.WriteLine(className, "Path");
            return(value);
        }
Exemple #2
0
        internal static IResourceProvider GetResourceProvider(string virtualPath, bool isLocal)
        {
            if (!EnsureProviderFactory())
            {
                return(null);
            }

            // TODO: check if it makes sense to cache the providers and, if yes, maybe
            // we should expire the entries (or just store them in InternalCache?)
            IResourceProvider rp = null;

            if (!resource_providers.TryGetValue(virtualPath, out rp))
            {
                if (isLocal)
                {
                    HttpContext ctx = HttpContext.Current;
                    HttpRequest req = ctx != null ? ctx.Request : null;
                    rp = provider_factory.CreateLocalResourceProvider(virtualPath);
                }
                else
                {
                    rp = provider_factory.CreateGlobalResourceProvider(virtualPath);
                }

                if (rp == null)
                {
                    if (isLocal)
                    {
                        HttpContext ctx = HttpContext.Current;
                        HttpRequest req = ctx != null ? ctx.Request : null;
                        rp = DefaultProviderFactory.CreateLocalResourceProvider(virtualPath);
                    }
                    else
                    {
                        rp = DefaultProviderFactory.CreateGlobalResourceProvider(virtualPath);
                    }

                    if (rp == null)
                    {
                        return(null);
                    }
                }

                resource_providers.Add(virtualPath, rp);
            }

            return(rp);
        }