В своем приложении я добавил поддержку мультиязычности, следуя этой документации.
Теперь я столкнулся с проблемой: мне нужно перевести также некоторые плагины javascript, поэтому мне нужно использовать.resx
строка внутри логики js
:
Для доступа к этим строкам я могу использовать IStringLocalizer
в конкретном контроллере, давайтеПредположим, что приведенная выше строка является частью UserController
, я могу получить доступ к объявлению в View
this:
@inject IStringLocalizer<UserController> Localizer
, а затем:
<h2>@Localizer["LastName"]</h2>
Предположим, теперь мне нужнопередать LastName
строку в нечто вроде JQuery
локализации плагина.Для этого я действительно нашел обходной путь, который заключается в объявлении переменной javascript
в необходимом View
:
@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
, для которого требуется script
локализация, Lang
объект - Мне нужно каждый раз устанавливать ключ объекта для конкретной строки, доступной в
IStringLocalizer
- ЕслиЯ изменяю строковый ключ, мне также нужно обновить все файлы вручную.
Что я ищу:
Я ищу решение, которое автоматически заполняет Lang
объект со всеми свойствами, доступными в файле .resx
, загруженном в текущий View
.Я думаю, что лучшее место для ручки это _Layout
.
Кто-то может мне помочь?