ASP.NET Resource Provider Extension

I am expanding the asp.net resource provider. The problem is that the advanced resource provider does not detect page culture. The CultureInfo method in the GetObject () method is always zero.

To change the culture of the page, I use listbox to override 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(); } 

And the GetObject () function:

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

This is the resource provider class:

 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 } 

Thanks so much for your time.

+4
source share
1 answer

The GetObject () method does not guarantee that the current culture is provided by ASP.NET. Try the following:

 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; } 
+1
source

Source: https://habr.com/ru/post/1334922/


All Articles