复制代码 代码如下:
 
<configuration> 
<system.web> 
<globalization resourceProviderFactoryType="Westwind.Globalization.DbSimpleResourceProviderFactory,Westwind.Globalization" /> 
</system.web> 
</configuration> 
复制代码 代码如下:
 
[DesignTimeResourceProviderFactoryAttribute(typeof(DbDesignTimeResourceProviderFactory))] 
public class DbSimpleResourceProviderFactory : ResourceProviderFactory 
{ 
public override IResourceProvider CreateGlobalResourceProvider(string classname) 
{ 
return new DbSimpleResourceProvider(null, classname); 
} 
public override IResourceProvider CreateLocalResourceProvider(string virtualPath) 
{ 
string ResourceSetName = DbResourceConfiguration.Current.StripVirtualPath(virtualPath); 
return new DbSimpleResourceProvider(null,ResourceSetName.ToLower()); 
} 
} 
复制代码 代码如下:
 
public class DbSimpleResourceProvider : IResourceProvider, IImplicitResourceProvider 
{ 
private string _ResourceSetName; 
private IDictionary _resourceCache; 
private DbSimpleResourceProvider() 
{ } 
public DbSimpleResourceProvider(string virtualPath, string className) 
{ 
_ResourceSetName = className; 
} 
private IDictionary GetResourceCache(string cultureName) 
{ 
if (cultureName == null) 
cultureName = ""; 
if (this._resourceCache == null) 
this._resourceCache = new ListDictionary(); 
IDictionary Resources = this._resourceCache[cultureName] as IDictionary; 
if (Resources == null) 
{ 
// *** DEPENDENCY HERE (#1): Using DbResourceDataManager to retrieve resources 
// *** Use datamanager to retrieve the resource keys from the database 
DbResourceDataManager Data = new DbResourceDataManager(); 
Resources = Data.GetResourceSet(cultureName as string, this._ResourceSetName); 
this._resourceCache[cultureName] = Resources; 
} 
return Resources; 
} 
public void ClearResourceCache() 
{ 
this._resourceCache.Clear(); 
} 
object IResourceProvider.GetObject(string ResourceKey, CultureInfo Culture) 
{ 
string CultureName = null; 
if (Culture != null) 
CultureName = Culture.Name; 
else 
CultureName = CultureInfo.CurrentUICulture.Name; 
return this.GetObjectInternal(ResourceKey, CultureName); 
} 
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 fall back 
// *** to the generic culture (en) 
if (value == null && CultureName.Length > 3) 
{ 
// *** try again with the 2 letter locale 
return GetObjectInternal(ResourceKey,CultureName.Substring(0,2) ); 
} 
// *** If the value is still null get the invariant value 
if (value == null) 
{ 
Resources = this.GetResourceCache(""); 
if (Resources == null) 
value = null; 
else 
value = Resources[ResourceKey]; 
} 
// *** If the value is still null and we're at the invariant culture 
// *** let's add a marker that the value is missing 
// *** this also allows the pre-compiler to work and never return null 
if (value == null && string.IsNullOrEmpty(CultureName)) 
{ 
// *** No entry there 
value = ""; 
// *** DEPENDENCY HERE (#2): using DbResourceConfiguration and DbResourceDataManager to optionally 
// add missing resource keys 
// *** Add a key in the repository at least for the Invariant culture 
// *** Something's referencing but nothing's there 
if (DbResourceConfiguration.Current.AddMissingResources) 
new DbResourceDataManager().AddResource(ResourceKey, value.ToString(), "", this._ResourceSetName); 
} 
return value; 
} 
复制代码 代码如下:
 
public class DbSimpleResourceReader : IResourceReader 
{ 
private IDictionary _resources; 
public DbSimpleResourceReader(IDictionary resources) 
{ 
_resources = resources; 
} 
IDictionaryEnumerator IResourceReader.GetEnumerator() 
{ 
return _resources.GetEnumerator(); 
} 
void IResourceReader.Close() 
{ 
} 
IEnumerator IEnumerable.GetEnumerator() 
{ 
return _resources.GetEnumerator(); 
} 
void IDisposable.Dispose() 
{ 
} 
} 
新闻热点
疑难解答
图片精选