Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/32.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
C# 绑定前在Javascript中搜索和替换 总结_C#_Javascript_Asp.net_Asp.net Mvc_Internationalization - Fatal编程技术网

C# 绑定前在Javascript中搜索和替换 总结

C# 绑定前在Javascript中搜索和替换 总结,c#,javascript,asp.net,asp.net-mvc,internationalization,C#,Javascript,Asp.net,Asp.net Mvc,Internationalization,有没有办法让ASP.NET MVC应用程序中的捆绑和缩小过程在缩小脚本文件之前在脚本文件内执行搜索和替换 出身背景 我在Javascript文件中定义了一些小部件,其中包含需要翻译成不同语言的单词,具体取决于当前用户的语言。由于MVC将javascript文件缩小为ScriptBundle,是否可以挂接到此构建过程中?理想情况下,我们可以使用它创建本地化的脚本捆绑包,捆绑过程在缩小脚本之前在脚本内部执行搜索/替换 我希望避免为每种语言手动创建单独的javascript文件,因为这样会使维护变得困

有没有办法让ASP.NET MVC应用程序中的捆绑和缩小过程在缩小脚本文件之前在脚本文件内执行搜索和替换

出身背景 我在Javascript文件中定义了一些小部件,其中包含需要翻译成不同语言的单词,具体取决于当前用户的语言。由于MVC将javascript文件缩小为ScriptBundle,是否可以挂接到此构建过程中?理想情况下,我们可以使用它创建本地化的脚本捆绑包,捆绑过程在缩小脚本之前在脚本内部执行搜索/替换


我希望避免为每种语言手动创建单独的javascript文件,因为这样会使维护变得困难。小部件从中提取文本的客户端词典也是如此;我们已经有javascript性能问题,不想添加另一层前端计算。

实现IBundleTransform接口。可以找到示例。

实现IBundleTransform接口。可以找到示例。

正如Vladimir所说,您可以创建自己的Bundle转换,只需实现IBundleTransform。我写了一篇关于捆绑和缩小咖啡脚本的博客文章,可以为您指出正确的方向:

总之,创建如下自定义变换:

public class MultiLanguageBundler : IBundleTransform
{
    public void Process(BundleContext context, BundleResponse response)
    {
        foreach (var file in response.Files)
        {
            using (var reader = new StreamReader(file.FullName))
            {
                // "ReplaceLanguageStrings" contains the search/replace logic
                compiled += ReplaceLanguageStrings(reader.ReadToEnd());
                reader.Close();
            }
        }
        response.Content = compiled;
        response.ContentType = "text/javascript";
    }
}
然后在BundleConfig中:


您可能需要做一些调整,但如果有帮助,请告诉我。

正如Vladimir所说,您可以创建自己的捆绑包转换,只需实现IBundleTransform。我写了一篇关于捆绑和缩小咖啡脚本的博客文章,可以为您指出正确的方向:

总之,创建如下自定义变换:

public class MultiLanguageBundler : IBundleTransform
{
    public void Process(BundleContext context, BundleResponse response)
    {
        foreach (var file in response.Files)
        {
            using (var reader = new StreamReader(file.FullName))
            {
                // "ReplaceLanguageStrings" contains the search/replace logic
                compiled += ReplaceLanguageStrings(reader.ReadToEnd());
                reader.Close();
            }
        }
        response.Content = compiled;
        response.ContentType = "text/javascript";
    }
}
然后在BundleConfig中:


您可能需要调整一些事情,但如果有帮助,请告诉我。

这似乎是一个很好的起点。我想我必须创建一个IBundleImplementation,然后为区域设置创建单独的bundle,然后根据用户的语言包含正确的bundle。如果成功,我会将其标记为已接受;非常感谢。向弗拉基米尔道歉,我知道我违背了接受这个答案的承诺;我只是觉得Tallmaris的代码片段对于以后的访问者来说会更有用,因为它的细节层次很高。这似乎是一个很好的起点。我想我必须创建一个IBundleImplementation,然后为区域设置创建单独的bundle,然后根据用户的语言包含正确的bundle。如果成功,我会将其标记为已接受;非常感谢。向弗拉基米尔道歉,我知道我违背了接受这个答案的承诺;我只是觉得Tallmaris的代码片段对以后的访问者会更有用,因为它的细节层次很高。太好了!一个问题:读者不是吗;过分的您正在使用block。首先:非常感谢!节省了我很多时间。第二:我可以将参数传递给Process函数吗?它需要知道翻译成哪种语言。想想看,MultiLanguageBundler的构造函数可以接受任意数量的参数。那么:对弗拉基米尔来说,你可能是对的,我只是习惯性地这么做。对于MW来说,过程方法是一种接口方法,因此您无法更改其签名。。。但是是的,你可以在构造函数中传递语言。太好了!一个问题:读者不是吗;过分的您正在使用block。首先:非常感谢!节省了我很多时间。第二:我可以将参数传递给Process函数吗?它需要知道翻译成哪种语言。想想看,MultiLanguageBundler的构造函数可以接受任意数量的参数。那么:对弗拉基米尔来说,你可能是对的,我只是习惯性地这么做。对于MW来说,过程方法是一种接口方法,因此您无法更改其签名。。。但是,可以在构造函数中传递语言。