我试图通过单击代码来更改语言:
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
等...我需要用一个按钮切换语言。它可以在main中使用,但在按钮中不起作用。
答案 0 :(得分:0)
实际问题应该是:
更改UI文化后如何重新加载UI?
影响UI的属性为Thread.CurrentThread.CurrentUICulture
,不是 Thread.CurrentThread.CurrentCulture
。第二种文化影响字符串的解析或格式化方式。 CurrentUICulture
是用于加载本地化资源的区域。
更改CurrentUICulture
不会重新加载这些资源。您必须显式强制重新加载或重新加载应用程序的主窗口。
检查Changing Culture in WPF,由Pluralsight课程Introduction to Localization and Globalization in .NET的作者撰写。该课程以WPF应用程序为例,因此请务必仔细阅读。通过Microsoft的Visual Studio Dev Essentials(免费)优惠,您可以获得3个月的免费访问Pluralsight的课程。
本文显示的是如何显式处理主窗口并在区域性更改时重新加载它。
App.xaml
被修改以防止主窗口自动打开。已从App.xaml and the
OnStartup`事件中删除StartupUri,以显式打开主窗口。这:
<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从正确的文件中加载资源
答案 1 :(得分:-1)
另一个主题中有一个类似的问题,请检查它是否正确