亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > .NET > 正文

建立自定義的數據驅動的本地化資源provider

2024-07-10 13:25:41
字體:
來源:轉載
供稿:網友
原文很長,為了便于閱讀和理解,特將該文章改寫成通俗易懂而且內容精煉的中文.

預備知識:系統默認的處理資源和本地化的方法是使用resx文件存儲資源.

要使用自定義的resource provider,需要2個步驟:
a) 修改web.config 文件,以便系統使用自定義的資源提供者
b) 建立自定義資源提供者類,最少包括3個:
1.ResourceProviderFactory,工廠類,用來建立ResourceProvider對象.
2.ResourceProvider,實現IResourceProvider,IImplicitResourceProvider,IwwResourceProvider 接口.
3.ResourceReader 實現IResourceReader.


修改web.config 文件,以使用自定義的資源提供者。

復制代碼 代碼如下:


<configuration>
<system.web>
<globalization resourceProviderFactoryType="Westwind.Globalization.DbSimpleResourceProviderFactory,Westwind.Globalization" />
</system.web>
</configuration>



建立自定義資源提供者類:
1.工廠類

復制代碼 代碼如下:


[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());
}
}


2.提供者類

復制代碼 代碼如下:


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;
}


3.Reader類

復制代碼 代碼如下:


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()
{
}
}


完畢。
本人沒有測試過,待測試通過,獻上最精煉的源代碼.敬請稍候.
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲男人天堂手机在线| 国产精品美女网站| 久久久国产一区| 亚洲精品久久7777777| 日韩免费精品视频| 欧美老女人bb| 精品久久久久久久久久| 亚洲一区999| 精品国产91久久久久久老师| 欧美高清在线播放| 欧美另类高清videos| 久久久久久91| 亚洲图片制服诱惑| 亚洲精品欧美极品| 亚洲人成电影在线观看天堂色| 尤物yw午夜国产精品视频| 日韩电影大片中文字幕| 亚洲香蕉成视频在线观看| 91九色视频在线| 日韩福利在线播放| 亚洲91av视频| 国产69精品久久久久9| 欧美激情一区二区三级高清视频| 日本久久久久亚洲中字幕| 亚洲欧洲在线免费| 成人av在线网址| 国产一区二区激情| 亚洲人精品午夜在线观看| 国产精品久久久久久久久久小说| 国产一区二区三区三区在线观看| 日韩av在线播放资源| 国产精品高潮视频| 亚洲国产精品大全| 国产激情视频一区| 亚洲aⅴ日韩av电影在线观看| 国产日韩欧美夫妻视频在线观看| 91性高湖久久久久久久久_久久99| 色综合久久悠悠| 亚洲风情亚aⅴ在线发布| 亚洲激情久久久| 91精品久久久久久久久久久| 国产欧美精品日韩精品| 亚洲国产精品人人爽夜夜爽| 亚洲欧洲午夜一线一品| 成人在线免费观看视视频| 中文字幕久热精品在线视频| 欧美日韩xxxxx| 亚洲香蕉成人av网站在线观看| 日本不卡视频在线播放| 97激碰免费视频| 国产精品成av人在线视午夜片| 日韩视频免费观看| 中文在线不卡视频| 成人做爽爽免费视频| 永久免费精品影视网站| 色综合久久悠悠| 在线观看久久久久久| 国产精品视频网站| 热99精品里视频精品| 精品久久久久久久久久久久| 欧美国产视频一区二区| 91精品国产777在线观看| 亚洲女人被黑人巨大进入al| 中文字幕一区二区三区电影| 最新的欧美黄色| 国产免费一区视频观看免费| 亚洲欧美日韩天堂一区二区| 亚洲欧美日本精品| 91在线播放国产| 欧美日韩国产成人在线| 国产精品久久久久久久午夜| 亚洲欧美激情另类校园| 亚洲国产精品电影| 成人精品一区二区三区电影免费| 欧美视频裸体精品| 久热精品在线视频| 亚洲欧美制服第一页| 国产日韩av在线| 亚洲激情在线视频| 欧美麻豆久久久久久中文| 欧美中文在线观看国产| 亚洲精品日韩av| 成人性生交大片免费观看嘿嘿视频| 日韩免费中文字幕| 久久综合亚洲社区| 欧洲美女免费图片一区| 国产精品91一区| 欧美丰满少妇xxxxx| 91精品视频免费| 欧美成人午夜激情视频| 8090成年在线看片午夜| 欧美与黑人午夜性猛交久久久| 亚洲福利精品在线| 亚洲综合大片69999| 亚洲 日韩 国产第一| 精品视频在线播放色网色视频| 久久久中精品2020中文| 日韩电影第一页| 日本欧美国产在线| 欧美在线精品免播放器视频| 国产欧美久久久久久| 91网站在线免费观看| 91精品国产乱码久久久久久蜜臀| 亚洲黄色有码视频| 日韩专区在线播放| 欧美在线视频导航| 成人精品视频99在线观看免费| 亚洲欧美激情精品一区二区| 日韩av大片免费看| 亚洲国产一区二区三区四区| 久久视频在线播放| 亚洲一区二区三区视频播放| 国产成人精品av在线| 久久久综合免费视频| 精品久久久久久久久久久久久| 日韩精品视频在线播放| 高清日韩电视剧大全免费播放在线观看| 国产精品99蜜臀久久不卡二区| 国产精品久久久久秋霞鲁丝| 中文字幕少妇一区二区三区| 日本久久91av| 精品福利视频导航| 精品人伦一区二区三区蜜桃网站| 国产一区二区激情| 国产97色在线|日韩| 欧美理论在线观看| 国产女精品视频网站免费| 中文字幕日韩在线播放| 亚洲精品中文字幕有码专区| 欧美日韩成人在线视频| 亚洲精品成人久久久| 亚洲电影天堂av| 韩国国内大量揄拍精品视频| 国产91成人在在线播放| 国产成人精品在线| 久久久精品网站| 国产午夜精品一区二区三区| 国产亚洲欧美日韩一区二区| 欧美成人一区二区三区电影| 亚洲女在线观看| 亚洲第五色综合网| 色综合亚洲精品激情狠狠| 国产日韩在线视频| 国产91在线播放九色快色| 欧美一区二区三区艳史| 国产精品6699| 久久夜精品香蕉| 亚洲午夜色婷婷在线| 日韩在线视频免费观看高清中文| 欧美精品在线免费播放| 国产精品中文久久久久久久| 中日韩美女免费视频网址在线观看| 91精品久久久久久久久久入口| 亚洲欧美一区二区三区在线| 欧美黑人国产人伦爽爽爽| 国产精品久久久久久久app| 日韩69视频在线观看| 日韩电影免费观看在线观看| 日韩av中文字幕在线免费观看| 日本精品视频网站| 懂色aⅴ精品一区二区三区蜜月| 日韩成人av网| 亚洲天堂成人在线| 亚洲人成在线观|