Мне нужно изменить культуры во время выполнения в соответствии с файлами ресурсов для каждой культуры. < /p>
ожидается < /em> < /p>
< Br /> Пользователь нажимает кнопку, которая переключается с текущего языка на другой язык. Тексты на странице обновляются в соответствии с файлами ресурсов для каждой культуры. Пользователь нажимает кнопку, которая переключается с текущего языка на другой язык. Тексты на странице обновляются в соответствии с файлами ресурсов для каждой культуры. Как только пользователь выполняет какое -либо действие на любом компоненте (у меня есть несколько радиопроизводительных кнопок, кнопок и флажок), тексты возвращаются к тому, что было написано в первый раз. Как будто культура не изменилась. < /p>
попытки < /em> < /p>
создал класс AppState, который вводится компонентам < / p>
public class AppState
{
public CultureInfo currentCulture { get; private set; } = CultureInfo.CurrentCulture;
public event Action OnChange;
public void ChangeCulture(CultureInfo newCulture)
{
currentCulture = newCulture;
System.Threading.Thread.CurrentThread.CurrentCulture.ClearCachedData();
System.Threading.Thread.CurrentThread.CurrentUICulture.ClearCachedData();
System.Threading.Thread.CurrentThread.CurrentCulture = newCulture;
System.Threading.Thread.CurrentThread.CurrentUICulture = newCulture;
NotifyStateChanged();
}
public CultureInfo getCurrentCulture()
{
if (currentCulture == null)
{
ChangeCulture(CultureInfo.CurrentCulture);
}
return currentCulture;
}
private void NotifyStateChanged() => OnChange?.Invoke();
}
< /code>
Добавлена локализация в проект в startup.cs < /em> и AppState Instante, а также < /p>
services.AddScoped();
services.AddMvc().AddMvcLocalization();
services.AddLocalization();
var supportedCultures = new List { new CultureInfo("en-US"), new CultureInfo("es-ES") };
services.Configure(options =>
{
options.DefaultRequestCulture = new RequestCulture("es-ES");
options.SupportedUICultures = supportedCultures;
options.SupportedCultures = supportedCultures;
});
< /code>
Компонент имеет инъекцию Appstate, а также объект Istringlocalizer, чтобы получить строки из файла ресурса. < /p>
@inject AppState state
@inject IStringLocalizer _localizer
@implements IDisposable
Holadenuevo
< /code>
, а затем имеет набор событий < /p>
protected override void OnInitialized()
{
_lematizador = new LematizadorService();
state.OnChange += OnCultureChange;
}
public void Dispose()
{
state.OnChange -= OnCultureChange;
}
private void CambiarIdioma()
{
if (state.getCurrentCulture().Equals(new CultureInfo("es-ES")))
{
state.ChangeCulture(new CultureInfo("en-US"));
}
else
{
state.ChangeCulture(new CultureInfo("es-ES"));
}
}
private void OnCultureChange()
{
CultureInfo.CurrentCulture = state.currentCulture;
CultureInfo.CurrentUICulture = state.currentCulture;
StateHasChanged();
}
< /code>
Так теперь при нажатии кнопки, которая запускает cambiaridioma () < /em> проект работает нормально. Но как только какое -либо действие будет предпринято внутри компонента (скажем, я проверяю что -то внутри компонента tableconocimientos или нажимаю на радиообучения), тексты возвращаются в их исходные строки. br />
Каждый компонент, который должен локализовать свои тексты, имеет впстат и реализацию этих функций: < /p>
@inject AppState state
@inject IStringLocalizer _localizer
@implements IDisposable
@*Component stuff*@
@functions{
protected override void OnInitialized()
{
state.OnChange += OnCultureChange;
}
public void Dispose()
{
state.OnChange -= OnCultureChange;
}
private void OnCultureChange()
{
CultureInfo.CurrentCulture = state.currentCulture;
CultureInfo.CurrentUICulture = state.currentCulture;
StateHasChanged();
}
}
< /code>
Изображение как пример того, что происходит в данный момент:
Подробнее здесь: https://stackoverflow.com/questions/611 ... at-runtime
Blazor - изменить пользовательский интерфейс CultureInfo во время выполнения ⇐ C#
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Blazor - изменить пользовательский интерфейс CultureInfo во время выполнения
Anonymous » » в форуме C# - 0 Ответы
- 4 Просмотры
-
Последнее сообщение Anonymous
-