【问题标题】:Can't load correct ressource when I change the CurrentUICulture更改 CurrentUICulture 时无法加载正确的资源
【发布时间】:2015-06-03 14:05:06
【问题描述】:

我正在开发一个 WPF 应用程序。初始化主窗口时,我获取用户的系统语言并更改 CurrentCulture :

System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("fr-CA");

我在 Ressources 文件夹中有 3 个 .resx 文件(resource.fr-BE.resx、resource.nl-BE.resx、resource.resx)。

在我的 XAML 中,我指的是默认的 ressource.resx

xmlns:r="clr-namespace:Renoir.UserInterface.Resources"

并在我的资源文件中为我的控件使用密钥:

Title="{x:Static r:resource.MAINWINDOW_TITLE}"

但应用程序无法加载正确的资源文件(例如,当我将文化更改为法语 (fr-BE) 时,它不会加载 resource.fr- BE.resx 文件,它总是显示默认资源文件中的字符串(resource.resx

但是在后面的代码中,如果在我更改 CurrentCulture 之后,我尝试从 resx 中获取一个字符串,我收到了正确的字符串:

ResourceManager rm = null;
            rm = new ResourceManager("Renoir.UserInterface.Resources.resource", Assembly.GetExecutingAssembly());
            MessageBox.Show(rm.GetString("DATAGRID_AUTHOR"));

有人有想法吗?

提前致谢!

【问题讨论】:

  • 什么时候更改 CultureInfo?在 InitializeComponent() 之前还是之后?
  • 不要在标题中加上“已解决”,将答案标记为已接受已经表明您的问题已解决。
  • 好的,谢谢你的信息:)

标签: c# wpf xaml globalization resx


【解决方案1】:

您正在尝试在初始化窗口后更改区域性信息。 您需要在初始化窗口之前更改 app.xaml.cs 中的区域性信息

public partial class App
{
    public App()
    {
    }

    protected override void OnStartup(StartupEventArgs e)
    {
        Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo("en-US");

        base.OnStartup(e);
    }
}

【讨论】:

  • 嗨 Valera,我尝试了您的解决方案,但不幸的是我得到了相同的结果。
【解决方案2】:

好的,现在它可以工作了,所以我想我找到了解决方案。在后面的代码中,在初始化窗口后(感谢 Valera)我使用用户系统的语言代码更改了应用程序的文化信息。

要使用正确的资源文件,我必须像这样精确:

Renoir.UserInterface.Resources.Resources.Culture = new CultureInfo("nl-BE");

【讨论】:

    【解决方案3】:

    尝试在窗口类中执行以下操作。

    this.Language = System.Windows.Markup.XmlLanguage.GetLanguage(culture.IetfLanguageTag)
    

    【讨论】:

    • 嗨,彼得,谢谢,我也会尝试您的解决方案,但现在,我的解决方案完美运行!
    猜你喜欢
    • 1970-01-01
    • 2020-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-26
    • 2019-07-13
    • 2017-05-02
    相关资源
    最近更新 更多