Tuesday, May 21, 2024
 Popular · Latest · Hot · Upcoming
35
rated 0 times [  37] [ 2]  / answers: 1 / hits: 21144  / 14 Years ago, mon, september 6, 2010, 12:00:00

I want to use global resource in my javascript code. Normally, when the code is inside the ASP code, I use
<%=GetGlobalResourceObject(Resource, MONTHS_SHORT1) %>
and it works. But, when the javascript code is not inside the ASP code, for example in a folder as calendar.js, it does not work. How can I use the global resource in this case? Note: The resource file is inside my App_GlobalResources folder.


More From » asp.net

 Answers
99

Look at the following post I created describing how you can serialise global and local resources and retrieve them from javascript using jQuery and JSON.



http://bloggingdotnet.blogspot.com/2010_02_01_archive.html



Firstly, create a new handler (.ashx) file. This one was written quite some time ago, so uses vb.net and custom JSON serialisation:



Imports System.Web
Imports System.Web.Services
Imports System.Xml
Imports System.Resources
Imports System.Reflection

Public Class Localisation
Implements System.Web.IHttpHandler

Public Sub ProcessRequest(ByVal context As HttpContext) Implements IHttpHandler.ProcessRequest
Dim files As String = context.Request.QueryString(files)
Dim local As String = context.Request.QueryString(local)
Dim isLocal As Boolean
Dim folder As String = App_GlobalResources

context.Response.ContentType = text/javascript

'Write out file as object
context.Response.Write({)

'Determine if local resource file
If local IsNot Nothing Then
isLocal = CBool(local)
If isLocal Then folder = App_LocalResources
End If
If files Is Nothing OrElse files.Length = 0 Then Throw New ArgumentException(Parameter 'files' was not provided in querystring.)

Dim flag As Boolean = False
For Each file As String In files.Split(,)
If flag Then context.Response.Write(,)

Dim className As String = file.Split(.)(0)

'Write the class (name of the without any extensions) as the object
context.Response.Write(className)
context.Response.Write(:{)

'Open the resx xml file
Dim filePath As String = context.Server.MapPath(~ & folder & & file)
Dim document As New XmlDocument()
Dim flag2 As Boolean = False
document.Load(filePath)

Dim nodes As XmlNodeList = document.SelectNodes(//data)

For Each node As XmlNode In nodes

'Write out the comma seperator
If flag2 Then context.Response.Write(,)

Dim attr As XmlAttribute = node.Attributes(name)
Dim resourceKey As String = attr.Value
context.Response.Write(resourceKey)
context.Response.Write(:)

'Write either the local or global value
If isLocal Then
context.Response.Write(HttpContext.GetLocalResourceObject(String.Format(~/{0}, file.Replace(.resx, )), resourceKey)) 'Has to be full path to the .aspx page
Else
context.Response.Write(HttpContext.GetGlobalResourceObject(className, resourceKey))
End If
context.Response.Write()

'Flag that we need a comma seperator
flag2 = True
Next

context.Response.Write(})
flag = True
Next

'End file
context.Response.Write(})
End Sub

Public ReadOnly Property IsReusable() As Boolean Implements IHttpHandler.IsReusable
Get
Return True
End Get
End Property
End Class


When that is working, use the following jQuery code to make an ajax call to the http handler and return the contents of the resource file as an object literal.



// -- Localisation --
var localResources;
var globalResources;

//Sample JSON for javascript resource values eg {TrackDetail:{HideHelp:Hide Help, ShowHelp:Show Help}}
//Usage e.g: alert(localResources.TrackDetail.HideHelp);

//Load Localisation values into variables so that they can be available on the client
//Note that these values are loaded asynchronously, the code in the function will not run until the call has completed.
$.getJSON('Localisation.ashx?files=TrackDetail.aspx.resx&local=true', function(data) { localResources = data});
$.getJSON('Localisation.ashx?files=Errors.resx,Strings.resx', function(data) { globalResources = data});

[#95694] Thursday, September 2, 2010, 14 Years  [reply] [flag answer]
Only authorized users can answer the question. Please sign in first, or register a free account.
havenbilliec

Total Points: 324
Total Questions: 106
Total Answers: 94

Location: Pitcairn Islands
Member since Fri, Oct 15, 2021
3 Years ago
;