Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在asp.net中使用javascript文件中的本地化消息_Javascript_Asp.net_Localization - Fatal编程技术网

如何在asp.net中使用javascript文件中的本地化消息

如何在asp.net中使用javascript文件中的本地化消息,javascript,asp.net,localization,Javascript,Asp.net,Localization,如何在asp.net中使用javascript文件中的本地化消息 我有一个Javascript文件(global Scripts.js),其中包含我的所有脚本。我使用另一个文件(messages.js),其中包含所有静态错误消息(例如:“您确定要删除吗?”),因此可以对其进行本地化 是否可以在没有其他文件(messages.js)的情况下本地化此主脚本文件,以便我可以删除一个脚本引用?ASP.NET ScriptManager控件可以通过多种方式为脚本提供支持 如果脚本嵌入到程序集中,请让Scr

如何在asp.net中使用javascript文件中的本地化消息

我有一个Javascript文件(global Scripts.js),其中包含我的所有脚本。我使用另一个文件(messages.js),其中包含所有静态错误消息(例如:“您确定要删除吗?”),因此可以对其进行本地化


是否可以在没有其他文件(messages.js)的情况下本地化此主脚本文件,以便我可以删除一个脚本引用?

ASP.NET ScriptManager控件可以通过多种方式为脚本提供支持

如果脚本嵌入到程序集中,请让ScriptManager知道您在.resx文件中的某个位置存储了一些本地化字符串,您希望在脚本提供时随时提供这些字符串。这些字符串作为JSON对象注入页面,然后在主脚本中输出对JSON对象的引用,而不是文字字符串

例如,您可以像这样嵌入脚本:

[assembly: System.Web.UI.WebResource("ProjectNamespace.MyScript.js", "application/x-javascript")]
[assembly: System.Web.UI.ScriptResource("ProjectNamespace.MyScript.js", "ProjectNamespace.MyScriptResources", "Messages")]
“ProjectNamespace.MyScript.js”是指向作为脚本的嵌入式资源的完整路径。在ScriptResourceAttribute中,第二个参数是包含所有本地化消息的嵌入式.resx文件的完整路径(减去.resx扩展名)。您可以像对待任何其他.resx一样对待它,因此默认区域性使用MyScriptResources.resx,然后墨西哥西班牙语覆盖使用MyScriptResources.es-MX.resx,等等。ScriptResourceAttribute中的最后一个参数是将生成的JSON对象的名称

在脚本中,引用JSON对象:

function DoSomething()
{
  alert(Messages.ErrorMessage);
}
在上面的代码段中,“ErrorMessage”是.resx文件中一个字符串资源的名称

如果嵌入脚本,请使用指定程序集和名称的标记从ScriptManager引用它

或者,您可以保留脚本的完全本地化副本,如“MyScript.js”、“MyScript.es MX.js”、“MyScript.en UK.js”等,其中本地化逻辑和消息被硬编码到脚本中

如果执行此本地化方法,请使用指定路径的从ScriptManager引用它


请注意,如果您使用的是ASP.NET MVC,ScriptManager控件实际上无法与之配合使用。在这种情况下,您可能需要考虑一个不同的解决方案,如or。我有一个解决方案,我已经用它来解决这个问题。它允许您在js文件中使用asp.net web应用程序中保存的全局资源。本质上,它使用一个页面GetLocalisedScript.aspx来为您的js文件提供服务

网页如下:

protected void Page_Load(object sender, EventArgs e)
    {
        string retval = "";

        string file = Request["js"].ToString();

        using(StreamReader sr = new StreamReader(Server.MapPath(string.Format("~\\scripts\\{0}.js",file))))
        {
            retval = sr.ReadToEnd();
            sr.Close();
        }

        Regex rx = new Regex("##LOCALISE(.+?)##",RegexOptions.Singleline);
        MatchCollection mc =  rx.Matches(retval,0);
        foreach (Match m in mc)
        {
            string strResxKey = m.Value.Replace("##LOCALISE(", "").Replace(")##", "");
            string val = GetGlobalResourceObject("myResource", strResxKey).ToString();
            retval = retval.Replace(m.Value, val); 
        }
        //Just write out the XML data
        Response.ContentType = "text/xml";
        //NOTE THAT THIS PAGE DOESN'T CONTAIN ANY HTML TAG, WHATSOEVER
        Response.Output.Write(retval);
    }
加价

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="GetLocalisedScript.aspx.cs" Inherits="TestMulti.GetLocalisedScript" %>
GetLocalisedScript.aspx页面将用资源查找替换所有标记


希望这对其他人有所帮助。

我也遇到过同样的问题。但在我的例子中,我将js文件作为嵌入式资源生成,并使用ClientScriptManager。事件资源项目和包含jscript的项目是不同的。因此,我无法从js文件中获取正确的“Messages”对象。有什么想法吗?
<script src="GetLocalisedScript.aspx?js=myJS" type="text/jscript" ></script>
function alert2(val) {
alert("##LOCALISE(Yes)##");
}