我正在扩展asp.net资源提供程序。 问题是扩展资源提供程序未检测到页面文化。 GetObject()方法中的CultureInfo始终为null。
要更改页面文化我正在使用列表框重写InitializeCulture():
protected override void InitializeCulture()
{
if (Request.Form["ListBox1"] != null)
{
String selectedLanguage = Request.Form["ListBox1"];
UICulture = selectedLanguage;
Culture = selectedLanguage;
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(selectedLanguage);
Thread.CurrentThread.CurrentUICulture = new CultureInfo(selectedLanguage);
}
base.InitializeCulture();
}
GetObject()函数:
public object GetObject(string resourceKey, CultureInfo culture)
{
//Call of the data access layer function to retreave the resource value from the database
string resourceValue = m_dalc.GetResourceByCultureAndKey(culture, resourceKey);
return resourceValue;
}
这是资源提供者类:
public class DBResourceProvider : IResourceProvider
{
#region local variables
//We save the classKey (resourceType) in this variable
private string m_classKey;
//New instance of the data access layer
private StringResourcesDALC m_dalc;
#endregion
#region Constructors
/// <summary>
/// Constructor that creates a new instance of a resource provider using the resource type
/// </summary>
/// <param name="classKey">Resource type</param>
public DBResourceProvider(string classKey)
{
this.m_classKey = classKey;
m_dalc = new StringResourcesDALC(classKey);
}
#endregion
#region IResourceProvider Members
/// <summary>
/// Function that is called when we have explicit declarations of local and global resources
/// </summary>
/// <param name="resourceKey">Key of the resource</param>
/// <param name="culture">Culture code</param>
/// <returns>Resource value</returns>
public object GetObject(string resourceKey, CultureInfo culture)
{
//Call of the data access layer function to retreave the resource value from the database
string resourceValue = m_dalc.GetResourceByCultureAndKey(culture, resourceKey);
return resourceValue;
}
//Property that returns a new resource reader used to get local resources wich have been declared implicitly
public System.Resources.IResourceReader ResourceReader
{
get
{
//Call of the data access layer function that returns all resource keys and values for a single culture
ListDictionary resourceDictionary = this.m_dalc.GetResourcesByCulture(CultureInfo.InvariantCulture);
return new DBResourceReader(resourceDictionary);
}
}
#endregion
}
非常感谢你的时间。
答案 0 :(得分:1)
对于GetObject()方法,不保证ASP.NET提供当前区域性。请尝试以下方法:
public object GetObject(string resourceKey, CultureInfo culture) {
if (culture == null)
{
culture = CultureInfo.CurrentUICulture;
}
//Call of the data access layer function to retreave the resource value from the database
string resourceValue = m_dalc.GetResourceByCultureAndKey(culture, resourceKey);
return resourceValue;
}