Как сохранить файл .resx в объекте javascript? - PullRequest
0 голосов
/ 25 октября 2018

В своем приложении я добавил поддержку мультиязычности, следуя этой документации.

Теперь я столкнулся с проблемой: мне нужно перевести также некоторые плагины javascript, поэтому мне нужно использовать строку .resx внутри jsлогика.

Фрагмент с моими строками:

image

Для доступа к этим строкам я могу использовать IStringLocalizer в конкретном контроллере,давайте предположим, что приведенная выше строка является частью UserController, я могу получить доступ к объявлению в View:

@inject IStringLocalizer<UserController> Localizer

, а затем:

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

Предположим, теперь мне нужно передать строку LastNameв чем-то вроде локализации плагина JQuery.Для этого я фактически нашел обходной путь, который заключается в объявлении переменной 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. Если я изменяю ключ строки, мне также необходимо обновить все файлы вручную.Что я ищу:

Я ищу решение, которое автоматически заполняет объект Lang всеми свойствами, доступными в файле .resx, загруженном в текущем представлении.Я думаю, что лучшее место для обработки это _Layout.

Кто-то может мне помочь?

1 Ответ

0 голосов
/ 25 октября 2018

Я хотел бы создать класс со всеми локализованными элементами, сериализовать его и отправить его во внешний интерфейс.

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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...