gpt4 book ai didi

c# - 捆绑前在 Javascript 中搜索和替换

转载 作者:太空宇宙 更新时间:2023-11-03 21:42:46 25 4
gpt4 key购买 nike

总结

有什么方法可以使 ASP.NET MVC 应用程序中的捆绑和缩小过程在脚本文件缩小之前在脚本文件中执行“搜索和替换”?

背景

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

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

最佳答案

正如 Vladimir 所说,您可以创建自己的 Bundle 转换,只需实现 IBundleTransform。我写了一篇关于捆绑和缩小 Coffeescript 的博客文章,可以为您指明正确的方向:http://tallmaris.com/advanced-bundling-and-minification-of-coffeescripts-in-mvc4/

总而言之,创建一个像这样的自定义转换:

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 中:

var myBundle = new Bundle("~/Scripts/localised")
.Include("~/JsToLocalise/*.js"); //your JS location here, or include one by one if order is important.
myBundle.Transforms.Add(new MultiLanguageBundler());
myBundle.Transforms.Add(new JsMinify());
bundles.Add(myBundle);

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

关于c# - 捆绑前在 Javascript 中搜索和替换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18509506/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com