2010-09-06 4 views
2

Je souhaite utiliser la ressource globale dans mon code javascript. Normalement, lorsque le code est dans le code ASP, j'utilise <%=GetGlobalResourceObject("Resource", "MONTHS_SHORT1") %> et cela fonctionne. Mais, lorsque le code javascript n'est pas dans le code ASP, par exemple dans un dossier comme calendar.js, cela ne fonctionne pas. Comment puis-je utiliser la ressource globale dans ce cas? Remarque: Le fichier de ressources se trouve dans mon dossier App_GlobalResources.Utilisation de la ressource globale dans JavaScript

Répondre

2

Regardez le post suivant, je créé qui décrit comment vous pouvez serialise ressources mondiales et locales et les récupérer à partir de JavaScript en utilisant jQuery et JSON.

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

Tout d'abord, créez un nouveau fichier de gestionnaire (de .ashx). Celui-ci a été écrit il y a quelque temps, donc utilise sérialisation JSON vb.net et personnalisé:

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 

Quand cela fonctionne, utilisez le code jQuery suivant pour effectuer un appel ajax au gestionnaire http et retourner le contenu le fichier de ressources en tant que littéral d'objet.

// -- 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}); 
1

Vous devez générer du code JavaScript qui imite les ressources dont vous avez besoin, car ASP.NET s'exécute côté serveur et JavaScript s'exécute côté client.

<script language="javascript" type="text/javascript"> 
var MONTHS_SHORT1 = <%=GetGlobalResourceObject("Resource", "MONTHS_SHORT1") %>; 
</script> 
1

J'utilise souvent un littéral caché pour contenir le texte des ressources puis saisissez le texte localisé en utilisant javascript et jquery:

<asp:Literal runat="server" ID="Literal1" visible="false" Text="<%$ Resources:String, MyResourceText%>" /> 
    <input type="button" id="Button1" value="" /> 
    <script type="text/javascript"> 
      $(document).ready(function() { 
       // Update the buton text with the correct localised lookup 
       var ButtonText = '<%=Literal1.Text%>'; 
       $("#Button1").attr('value', ButtonText); 
      }); 
    </script> 
0

Cela enregistrera la clé des ressources.

ClientScriptManager cs = Page.ClientScript; 

String scriptRegVariables = string.Format("var resourcetext = '{0}'", Resources.Resource.keyText); 
if (!cs.IsClientScriptBlockRegistered("RegVariablesScript")) 
{ 
    cs.RegisterClientScriptBlock(typeof(_Default), "RegVariablesScript", scriptRegVariables, true); 
} 

Maintenant dans le fichier .js, vous pouvez l'utiliser directement. par exemple. Alerte (resourcetext);

Ajoutez le code ci-dessus sur Page_Load of control ou aspx page

Questions connexes