【发布时间】:2020-08-25 13:23:08
【问题描述】:
根据this tutorial,我尝试在我的 WPF .NET Core 3.1 应用程序中实现多语言系统。如果我直接更改Window 元素的属性Title,一切正常,应用程序从正确的资源文件中读取,该文件是通过更改CurrentUICulture 定义的。
这里是这样一个改变的代码:
private void BtnChangeLanguageToCsCz_Click(object sender, RoutedEventArgs e)
{
System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("cs-CZ");
}
private void BtnChangeLanguageToEnUs_Click(object sender, RoutedEventArgs e)
{
System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("en-US");
}
但是,当我点击这些按钮中的任何一个后,它们的内容仍未更新。我觉得我需要调用一些 UI 更新函数或类似的东西,但到目前为止找不到任何相关内容。
这里是我如何绑定Button的Content属性:
<Button x:Name="BtnInstall" Content="{x:Static p:Resource.ButtonInstall}" HorizontalAlignment="Center" Margin="0,324,0,0" VerticalAlignment="Top" Height="50" Width="200" Click="BtnInstall_Click"/>
资源文件的修饰符设置为公共,名称如下:
我应该怎么做才能让它自己更新?
【问题讨论】:
-
有后缀的文件没有*.Designer.cs文件,因为一个Resources类就足够了:它根据应用程序当前的文化从相应的.resx文件中加载资源。您的 .resx 文件应包含 xml 格式的翻译,例如
<data name="LongWheelName" xml:space="preserve"><value>Long Wheel Name Translation</value></data> -
@ASh 谢谢你的教程,它真的很有帮助。我已经重写了问题。
-
确保其他资源文件的Build Action是“Embedded Resource”
-
@ReeceRussell 所有资源文件都是
Embedded Resource,Copy to Output Directory的值是Do not copy,我应该改一下吗?
标签: wpf .net-core multilingual resx .net-core-3.1