如何将.resx文件存储在javascript对象中?

时间:2018-10-25 07:30:53

标签: asp.net asp.net-core

在我的应用程序中,我在此文档之后添加了多语言支持。

现在我面临一个问题:我还需要翻译一些javascript插件,所以我需要在js逻辑中使用.resx字符串。

带有我的字符串的代码段:

  

image

要访问这些字符串,我可以在特定控制器中使用IStringLocalizer,让我们假设上面的字符串是UserController的一部分,我可以在View this中访问声明:

@inject IStringLocalizer<UserController> Localizer

然后:

<h2>@Localizer["LastName"]</h2>

现在假设我需要以类似JQuery插件本地化的方式传递LastName字符串。为此,我实际上找到了一种解决方法,该方法包括在所需的View中声明一个javascript变量:

@inject IStringLocalizer<UserController> Localizer

@section UserScript{
<script>
    var Lang = {
        PasswordEqual: '@Localizer["PasswordEqual"]',
        PasswordMismatch: '@Localizer["PasswordMismatch"]',
   }
</script>
}

所以我可以在javascript代码内部访问Lang对象并本地化插件,例如:

$('#birthDate').daterangepicker({
    singleDatePicker: true,
    locale: {
        format: 'DD/MM/YYYY',
        daysOfWeek: [
           Lang.Sunday,
           Lang.Monday,

这行得通,但由于以下原因,维护起来确实是巨大的:

我需要在每个需要脚本本地化的.cshtml文件中声明Lang对象 我每次需要为IStringLocalizer中可用的特定字符串设置对象键 如果更改字符串键,则还需要手动更新所有文件。 我在寻找什么:

我正在寻找一种解决方案,该解决方案将使用当前视图中加载的.resx文件中的所有可用属性自动填充Lang对象。我想最好的处理方法是_Layout。

有人可以帮助我吗?

1 个答案:

答案 0 :(得分:0)

我将创建一个包含所有Localized项目的Class,对其进行序列化并将其发送到前端。

public class LocalizedItems
{
    public string value1 { get; set; }
    public string value2 { get; set; }
}

var localizedItems = new LocalizedItems();
localizedItems.value1 = "My Value 1";
localizedItems.value2 = "My Value 2";

string json = new System.Web.Script.Serialization.JavaScriptSerializer().Serialize(localizedItems);

然后在javascript中创建一个变量来保存这些值。然后,在加载页面时,要么从隐藏的输入中读取json字符串

<script type="text/javascript">
    var localizedItems;

    $(document).ready(function () {
        localizedItems = $.parseJSON($('#HiddenLocalizedItems').val());

        alert(localizedItems.value1);
    });
</script>

或直接将它们写到页面上。

<script type="text/javascript">
    var localizedItems = <%= json %>;

    $(document).ready(function () {
        alert(localizedItems.value1);
    });
</script>