Я расширяю поставщика ресурсов asp.net. Проблема заключается в том, что расширенный поставщик ресурсов не обнаруживает культуру страницы. CultureInfo в методе GetObject() всегда имеет значение null.Расширение поставщика ресурсов ASP.NET
Чтобы изменить культуру страницы Я использую ListBox первостепенная 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
}
Большое спасибо за ваше время.
Почему не гарантируется, что текущая культура предоставляется ASP.NET? Почему он может читать ключ ресурса, а не культуру? –
Документы находятся по адресу http://msdn.microsoft.com/en-us/library/system.web.compilation.iresourceprovider.getobject.aspx state «Класс реализации может извлекать свойство CurrentUICulture, если значение для параметра культуры не прошел ». Также проверьте образец там, они также проведут эту проверку. – maartenba
Теперь я понимаю. Спасибо. –