• Best way to expose resource strings to JavaScript files in ASP.NET MVC?


    Best way to expose resource strings to JavaScript files in ASP.NET MVC?

    回答1

    settings.

    Thus, if the browser is set to French, the French resources, and only the French Resources, will be returned.

    Steep 1. Create a resource file RLocalizedText.resx into App_GlobalResources folder. And create fill it with all the string.

    Steep 2. Create ResourcesController

    using System.Web.Mvc;
    
    namespace PortalACA.Controllers
    {
        public class ResourcesController : Controller
        {
            // GET: Resources
            public ActionResult Index()
            {
                Response.ContentType = "text/javascript";
                return View();
            }
        }
    }

    Steep 3. Create Index.cshtml view from ResourcesController

    @using System.Collections
    @using System.Globalization
    @using System.Resources
    @using Resources
    @{
        Layout = null;
        // Get a set of resources appropriate to
        // the culture defined by the browser
        ResourceSet resourceSet =
          @RLocalizedText.ResourceManager.GetResourceSet
            (CultureInfo.CurrentUICulture, true, true);
    }
    
    // Define the empty object in javascript
    var Resources = {};
    @foreach (DictionaryEntry res in resourceSet)
    {
        // Create a property on the javascript object for each text resource
        @:Resources.@res.Key = "@Html.Raw(
            HttpUtility.JavaScriptStringEncode(res.Value.ToString()))";
    }

    The choose where you want use it.

    Steep 4A (Layout). If you want use it on whole site, then need put this script reference on _Layout (Shared View) over @RenderSection

    <script src="@Url.Content("~/Resources/Index")"></script>
    @RenderSection("scripts", required: false)
    

    Steep 4B (View). If you want to see only in some views.

    @section Scripts
    {
      <script src="@Url.Content("~/Resources/Index")"></script>
    }
    

    Steep 5. Now it is the time to use it. Select a view where you need see the strings on Resources files and put this code.

    @section Scripts
    {
      <script>
        $(document).ready(function () {
          alert(Resources.General_Excepcion);
        });
      </script>
    }
    

    That's all Folks! Hope it help others!

    回答2

    The solution I have used is to use a Razor to create a json object that contains all the resource strings for a given application area eg "Customers". Like so:

    <script  type="text/jscript">
    
    @{
    
        ResourceSet resourceSet = JsCustomersRes.ResourceManager.GetResourceSet(CultureInfo.CurrentUICulture, true, true);
        var sbInitial = " var CustomersResourceObj = {"; 
        var sb = new StringBuilder(sbInitial);
        var resEnum = resourceSet.GetEnumerator(); 
        while (resEnum.MoveNext()) 
        {
            if (sb.ToString() != sbInitial)
            {
                sb.Append(",");
            }
            sb.Append(""" + resEnum.Key + "":"" + resEnum.Value.ToString().Replace("
    ", "").Replace(""", "\"") + """);
        } 
        sb.Append("}");
    } 
    
    @(Html.Raw( sb.ToString()));
    

    The resource file "JsCustomersRes" can be placed along with the particular controller views directory or in the shared view directory. It should have "Custom Tool" set to "PublicResXFileCodeGenerator" in the file advanced properties.

    You can then get the resource string from the json object in your script:

    var resString = CustomersResourceObj[key];
    

    where "key" is the key string of the resource string you want. Just add the Razor as a partial view to your layout page or individual page as you require and that's it!

  • 相关阅读:
    《需求分析与系统设计》阅读笔记(四)
    《需求分析与系统设计》阅读笔记(三)
    每周总结(补)【2020/11/22】——自主学习MyBatis与Hive配置
    每周总结【2020/11/08】——————图表联动
    每周总结【2020/11/1】——动态生成树形组件,MapReduce,C++实现文法分析
    “公文流转系统 v1.0”
    统计文本文件(字母、单词、字符)
    动手动脑 第三周(一)
    动手动脑 第三周 (二)
    回文字符串判断
  • 原文地址:https://www.cnblogs.com/chucklu/p/15305170.html
Copyright © 2020-2023  润新知