Как изменить культуру? - PullRequest
1 голос
/ 05 июля 2019

Я пытаюсь изменить язык нажатием кнопки с кодом:

private void Spache_Click(object sender, RoutedEventArgs e)
{
    System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("fr-FR");

    System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("fr-FR");          
}

В моем приложении есть несколько файлов ресурсов: Resources.ar-TN.resx, Resources.fr-FR.resx и т. Д. Мне нужно переключать языки кнопкой. Это работает в основном, но в кнопке это не работает.

Ответы [ 2 ]

0 голосов
/ 05 июля 2019

Фактический вопрос должен быть следующим:

Как я могу перезагрузить пользовательский интерфейс после изменения культуры пользовательского интерфейса?

Свойство, которое влияет на пользовательский интерфейс, Thread.CurrentThread.CurrentUICulture, не Thread.CurrentThread.CurrentCulture.Вторая культура влияет на то, как строки анализируются или форматируются.CurrentUICulture - это культура, используемая для загрузки локализованных ресурсов.

Изменение CurrentUICulture не перезагрузка этих ресурсов.Вам придется явно перезагрузить или перезагрузить главное окно приложения.

Проверка Изменение культуры в WPF , написанное автором курса Pluralsight Введение в локализацию и глобализацию в .NET .Этот курс использует приложение WPF в качестве примера, поэтому обязательно ознакомьтесь с ним.Вы можете получить 3 месяца бесплатного доступа к курсам Pluralsight через бесплатное предложение Microsoft Visual Studio Dev Essentials .

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

App.xaml модифицируется так, чтобы главное окно не открывалось автоматически.StartupUri удален из App.xaml and the Событие OnStartup` обрабатывается для явного открытия главного окна.Это:

<Application x:Class="WpfLocalized.App"
             ...
             StartupUri="MainWindow.xaml">
...
</Application>

Меняется на:

<Application x:Class="WpfLocalized.App"
             ...
             >
...
</Application>

И следующий код добавляется в App.xaml.cs:

public partial class App : Application
{
    protected override void OnStartup(StartupEventArgs e)
    {
        base.OnStartup(e);
        Application.Current.MainWindow = new MainWindow();
        Application.Current.MainWindow.Show();
    }

    public static void ChangeCulture(CultureInfo newCulture)
    {
        Thread.CurrentThread.CurrentCulture = newCulture;
        Thread.CurrentThread.CurrentUICulture = newCulture;

        var oldWindow = Application.Current.MainWindow;            


        Application.Current.MainWindow = new MainWindow();
        Application.Current.MainWindow.Show();

        oldWindow.Close();
    }
}

Метод OnStartup загружаетГлавное окно в первый раз.ChangeCulture изменяет культуру, закрывает текущее окно и загружает его снова, перезагружая все ресурсы.

Чтобы изменить культуру и перезагрузить все, что нужно сделать, это вызвать App.ChangeCulture, например:от нажатия кнопки:

    private void AUButton_Click(object sender, RoutedEventArgs e)
    {
        App.ChangeCulture(new CultureInfo("en-AU"));

    }

В примере статьи есть одно текстовое поле, значение которого загружается из ресурсов, и некоторые кнопки, которые изменяют культуру:

    <TextBlock
            Text="{x:Static resx:Resources.Greeting}"
            HorizontalAlignment="Center" Padding="10,5"
            Margin="5"/>

Каждый раз, когда окнозагружен, ресурс будет загружен из правильного файла на основе CurrentUICulture

0 голосов
/ 05 июля 2019

В другой теме есть похожий вопрос, проверьте, может быть, он правильный

Посмотрите, поможет ли это вам

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...