c#-本地化-在wpf应用程序中更改语言
我正在制作一些wpf应用程序,我需要更改语言的选项。我的解决方案中有一个名为Resorces的文件夹,在那里我存储了所有的resx文件-实际上是language.resx和language.en-en.resx。我的XAML看起来像:c#-本地化-在wpf应用程序中更改语言,c#,.net,wpf,C#,.net,Wpf,我正在制作一些wpf应用程序,我需要更改语言的选项。我的解决方案中有一个名为Resorces的文件夹,在那里我存储了所有的resx文件-实际上是language.resx和language.en-en.resx。我的XAML看起来像: <Window x:Class="CoinCatalogue.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="htt
<Window x:Class="CoinCatalogue.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:CoinCatalogue"
xmlns:resx="clr-namespace:CoinCatalogue.Resources"
mc:Ignorable="d"
Title="{x:Static resx:language.WindowName}" Height="480" Width="640">
<Grid>
<Menu x:Name="menu" HorizontalAlignment="Left" Height="auto" VerticalAlignment="Top" Width="517">
<MenuItem x:Name="File" Header="{x:Static resx:language.File}">
<MenuItem x:Name="Open" Header="{x:Static resx:language.Open}"/>
</MenuItem>
</Menu>
</Grid>
但我的应用程序什么也没发生。此行位于InitializeComponent()之前
我做错了什么?我正在使用Visual Studio 2015/以这种方式更改应用程序语言是一个好主意吗?我认为您是如何更改文化的 我只是将一个快速示例放在一起,其中包含以下resx文件: Resources.en-US.resx Resources.fr-fr.resx Resources.resx 如果我在不尝试更改区域性的情况下运行应用程序,我会从
Resources.en US.resx
文件中获取字符串,因为这是我的默认值。如果我在InitializeComponent
之前添加此代码,则我的字符串来自Resources.fr-fr.resx
文件:
CultureInfo.DefaultThreadCurrentCulture = new CultureInfo("fr-FR");
CultureInfo.DefaultThreadCurrentUICulture = new CultureInfo("fr-FR");
您的程序如何知道语言正在变化?无论何时更改WPF应用程序中显示的内容,都需要通过调用OnPropertyChanged()让演示文稿知道。您可以通过文本和控件来让应用程序知道需要更新某些内容。如果要更改保存信息以显示给用户的资源,则最有可能需要调用OnPropertyChange以获取所有应更新的文本。我是基于这样的教程:。需要通过OnPropertChanged更改所有控件(它们的标签)?现在,它通过新的编译进行了更改,但总的来说,它在菜单中有可检查选项。是的。该教程还在应用程序启动时设置语言。因此,如果您将其设置在那里,您将在每次应用程序更改时重新构建应用程序。您可能需要花一些时间熟悉MVVM范例。看看这个:这样我可以在运行时更改语言吗?例如,我点击按钮,在it应用程序刷新并使用所选语言后?不,如果您想在运行时执行此操作,我建议使用类似这样的实现。Ok。我试试看。我也试着用你的方式改变文化——什么也没发生。但我发现问题在于文化的名称。它不是与前“fr fr”一起工作,而是与“fr”(名称中没有破折号的任何东西)一起工作。奇怪。。。
CultureInfo.DefaultThreadCurrentCulture = new CultureInfo("fr-FR");
CultureInfo.DefaultThreadCurrentUICulture = new CultureInfo("fr-FR");