【问题标题】:c# - localization - changing language in wpf appc# - 本地化 - 在 wpf 应用程序中更改语言
【发布时间】:2016-10-14 02:52:43
【问题描述】:

我正在制作一些 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="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>

一切正常 - 我可以访问应用程序中的字符串。在我的主要课程中,我试图通过以下方式改变文化:

language.Culture = new System.Globalization.CultureInfo("en-EN");

但我的应用没有任何反应。此行在 InitializeComponent(); 之前。

我做错了什么?我正在使用 Visual Studio 2015。/以这种方式更改应用语言是个好主意吗?

【问题讨论】:

  • 您的程序如何知道语言正在发生变化?每当您更改 WPF 应用程序中显示的内容时,您需要通过调用 OnPropertyChanged() 让您的演示文稿知道。您使用文本和控件执行此操作,以让您的应用程序知道需要更新某些内容。如果您要更改包含要向用户显示的信息的资源,您很可能需要调用 OnPropertyChange 以获取所有应更新的文本。 msdn.microsoft.com/en-us/library/…
  • 我基于这样的教程:robertoschiabel.wordpress.com/2010/01/31/…。所有控件(它们的标签)都需要通过 OnPropertChanged 进行更改吗?现在它通过新编译进行了更改,但总而言之,它会在菜单中有可检查的选项。
  • 是的。该教程还设置了应用程序启动时的语言。因此,如果您将其设置在那里,您将在每次更改时重新构建您的应用程序。您可能需要花一些时间来熟悉 MVVM 范例。看看这个:stackoverflow.com/questions/2480366/…

标签: c# .net wpf


【解决方案1】:

我认为问题在于你如何改变文化。

我只是将一个快速示例放在一起,其中包含以下 resx 文件:

Resources.en-US.resx

Resources.fr-FR.resx

资源.resx

如果我在不尝试更改区域性的情况下运行应用程序,我会从 Resources.en-US.resx 文件中获取字符串,因为这是我的默认设置。如果我在InitializeComponent 之前添加此代码,我的字符串来自Resources.fr-FR.resx 文件:

CultureInfo.DefaultThreadCurrentCulture = new CultureInfo("fr-FR");
CultureInfo.DefaultThreadCurrentUICulture = new CultureInfo("fr-FR");

【讨论】:

  • 这样我可以在运行时更改语言吗?例如。我单击按钮,然后应用程序刷新并使用选定的语言?
  • 不,如果您想在运行时执行此操作,我建议您使用类似 codeproject.com/Articles/22967/WPF-Runtime-Localization 的实现
  • 好的。我会试试看。我也试图以你的方式改变文化——什么也没发生。但我发现问题在于文化的名称。它不适用于前任。 “fr-FR”,但它与“FR”一起使用(名称中没有破折号的任何东西)。奇怪...
猜你喜欢
  • 1970-01-01
  • 2011-10-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多