(MVC) MVC (2019)

Processing resources in ASP.NET

1. What a resource at all. Binary and source presentation of Resources. Resource manager.

Usually multilanguages Web sites store literals for different languages in special Resource file. This is example of one resource file.


   1:  <?xml version="1.0" encoding="utf-8"?>
   2:  <root>
   3:    <!-- 
   4:      Microsoft ResX Schema 
   5:      
   6:      Version 2.0
   7:      
   8:      The primary goals of this format is to allow a simple XML format 
   9:      that is mostly human readable. The generation and parsing of the 
  10:      various data types are done through the TypeConverter classes 
  11:      associated with the data types.
  12:      
  13:      Example:
  14:      
  15:      ... ado.net/XML headers & schema ...
  16:      <resheader name="resmimetype">text/microsoft-resx</resheader>
  17:      <resheader name="version">2.0</resheader>
  18:      <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
  19:      <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
  20:      <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
  21:      <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
  22:      <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
  23:          <value>[base64 mime encoded serialized .NET Framework object]</value>
  24:      </data>
  25:      <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
  26:          <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
  27:          <comment>This is a comment</comment>
  28:      </data>
  29:                  
  30:      There are any number of "resheader" rows that contain simple 
  31:      name/value pairs.
  32:      
  33:      Each data row contains a name, and value. The row also contains a 
  34:      type or mimetype. Type corresponds to a .NET class that support 
  35:      text/value conversion through the TypeConverter architecture. 
  36:      Classes that don't support this are serialized and stored with the 
  37:      mimetype set.
  38:      
  39:      The mimetype is used for serialized objects, and tells the 
  40:      ResXResourceReader how to depersist the object. This is currently not 
  41:      extensible. For a given mimetype the value must be set accordingly:
  42:      
  43:      Note - application/x-microsoft.net.object.binary.base64 is the format 
  44:      that the ResXResourceWriter will generate, however the reader can 
  45:      read any of the formats listed below.
  46:      
  47:      mimetype: application/x-microsoft.net.object.binary.base64
  48:      value   : The object must be serialized with 
  49:              : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
  50:              : and then encoded with base64 encoding.
  51:      
  52:      mimetype: application/x-microsoft.net.object.soap.base64
  53:      value   : The object must be serialized with 
  54:              : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
  55:              : and then encoded with base64 encoding.
  56:  
  57:      mimetype: application/x-microsoft.net.object.bytearray.base64
  58:      value   : The object must be serialized into a byte array 
  59:              : using a System.ComponentModel.TypeConverter
  60:              : and then encoded with base64 encoding.
  61:      -->
  62:    <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
  63:      <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
  64:      <xsd:element name="root" msdata:IsDataSet="true">
  65:        <xsd:complexType>
  66:          <xsd:choice maxOccurs="unbounded">
  67:            <xsd:element name="metadata">
  68:              <xsd:complexType>
  69:                <xsd:sequence>
  70:                  <xsd:element name="value" type="xsd:string" minOccurs="0" />
  71:                </xsd:sequence>
  72:                <xsd:attribute name="name" use="required" type="xsd:string" />
  73:                <xsd:attribute name="type" type="xsd:string" />
  74:                <xsd:attribute name="mimetype" type="xsd:string" />
  75:                <xsd:attribute ref="xml:space" />
  76:              </xsd:complexType>
  77:            </xsd:element>
  78:            <xsd:element name="assembly">
  79:              <xsd:complexType>
  80:                <xsd:attribute name="alias" type="xsd:string" />
  81:                <xsd:attribute name="name" type="xsd:string" />
  82:              </xsd:complexType>
  83:            </xsd:element>
  84:            <xsd:element name="data">
  85:              <xsd:complexType>
  86:                <xsd:sequence>
  87:                  <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
  88:                  <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
  89:                </xsd:sequence>
  90:                <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
  91:                <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
  92:                <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
  93:                <xsd:attribute ref="xml:space" />
  94:              </xsd:complexType>
  95:            </xsd:element>
  96:            <xsd:element name="resheader">
  97:              <xsd:complexType>
  98:                <xsd:sequence>
  99:                  <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
 100:                </xsd:sequence>
 101:                <xsd:attribute name="name" type="xsd:string" use="required" />
 102:              </xsd:complexType>
 103:            </xsd:element>
 104:          </xsd:choice>
 105:        </xsd:complexType>
 106:      </xsd:element>
 107:    </xsd:schema>
 108:    <resheader name="resmimetype">
 109:      <value>text/microsoft-resx</value>
 110:    </resheader>
 111:    <resheader name="version">
 112:      <value>2.0</value>
 113:    </resheader>
 114:    <resheader name="reader">
 115:      <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
 116:    </resheader>
 117:    <resheader name="writer">
 118:      <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
 119:    </resheader>
 120:    <data name="Registration" xml:space="preserve">
 121:      <value>Registration</value>
 122:    </data>
 123:    <data name="UserName" xml:space="preserve">
 124:      <value>UserName</value>
 125:    </data>
 126:    <data name="Pass" xml:space="preserve">
 127:      <value>Password</value>
 128:    </data>
 129:    <data name="Enter" xml:space="preserve">
 130:      <value>Enter</value>
 131:    </data>
 132:  </root>

Visual Studio show all resources file in special node and allow to you way to use resource during compilation and perform program. Usual way is embed resources inside execution DLL.



Best benefits of this way to wrap literals as resource is the ASP.NET environment (as any other) allow to automatically switch languages for languages supported by browser. Of course, you can avoid automatically switch languages and avoid use resources at all, please use this my page Перемикач мови для сайту. - in this solution I have only analyze what languages support browser and if languages more than one I allow user to select languages. But simplest and spread way is more simple solution, and use System.Globalization to switch culture of site.


This is resource manager, embedded in ASP.NET, it switch culture and replace string stored in standard resources files stores as source file in XML above.


   1:  Imports Microsoft.VisualBasic
   2:  Imports Microsoft.VisualBasic.CompilerServices
   3:  Imports System
   4:  Imports System.CodeDom.Compiler
   5:  Imports System.ComponentModel
   6:  Imports System.Diagnostics
   7:  Imports System.Globalization
   8:  Imports System.Resources
   9:  Imports System.Runtime.CompilerServices
  10:   
  11:  Namespace Web.My.Resources
  12:      ''' <summary>
  13:      '''   A strongly-typed resource class, for looking up localized strings, etc.
  14:      ''' </summary>
  15:      <CompilerGenerated>
  16:      <DebuggerNonUserCode>
  17:      <GeneratedCode("System.Resources.Tools.StronglyTypedResourceBuilder", "15.0.0.0")>
  18:      <HideModuleName>
  19:      Friend Module Resources
  20:          Private resourceMan As ResourceManager
  21:   
  22:          Private resourceCulture As CultureInfo
  23:   
  24:          ''' <summary>
  25:          '''   Overrides the current thread's CurrentUICulture property for all
  26:          '''   resource lookups using this strongly typed resource class.
  27:          ''' </summary>
  28:          <EditorBrowsable(EditorBrowsableState.Advanced)>
  29:          Friend Property Culture As CultureInfo
  30:              Get
  31:                  Return Resources.resourceCulture
  32:              End Get
  33:              Set(ByVal value As CultureInfo)
  34:                  Resources.resourceCulture = value
  35:              End Set
  36:          End Property
  37:   
  38:          ''' <summary>
  39:          '''   Returns the cached ResourceManager instance used by this class.
  40:          ''' </summary>
  41:          <EditorBrowsable(EditorBrowsableState.Advanced)>
  42:          Friend ReadOnly Property ResourceManager As ResourceManager
  43:              Get
  44:                  If (Object.ReferenceEquals(Resources.resourceMan, Nothing)) Then
  45:                      Resources.resourceMan = New System.Resources.ResourceManager("Web.Resources", GetType(Resources).Assembly)
  46:                  End If
  47:                  Return Resources.resourceMan
  48:              End Get
  49:          End Property
  50:      End Module
  51:  End Namespace


And this is string, stored as special section embedded inside binary DLL files.



2. Way to show resource as source in Visual Studio.

3. How to use resource in Classic ASP.NET, ASP.NET MVC and in code behind.

4. Javascript resources in ASP.NET

Unfortunately directly Javascript resources in style resource://gre/modules/Services.jsm is not supported in ASP.NET. There are a lot of different solution to support Javascript resources, for example

5. Difficulties to working with resources.

Additionally to Javascript personally I'm faced with a couple huge difficulties with resources.

Comments ( )
<00>  <01>  <02>  <03>  <04>  <05>  <06>  <07>  <08>  <09>  <10>  <11>  <12>  <13>  <14>  <15>  <16>  <17>  <18>  <19
Link to this page: http://www.vb-net.com/Resourses/Index.htm
<SITEMAP>  <MVC>  <ASP>  <NET>  <DATA>  <KIOSK>  <FLEX>  <SQL>  <NOTES>  <LINUX>  <MONO>  <FREEWARE>  <DOCS>  <ENG>  <MAIL ME>  <ABOUT ME>  < THANKS ME>