C# 使用资源文件的本地化不起作用

C# 使用资源文件的本地化不起作用,c#,localization,resource-files,C#,Localization,Resource Files,我添加了新的Rosource文件UserNotification.resx。然后我添加了两个本地化文件,并将其命名为UserNotification.hr-hr.resx和UserNotification.sl-SI.resx。(后面的线程:) 然后我把Windows语言改为“si”。如果我使用System.Globalization.CultureInfo.CurrentCulture.ToString()打印当前区域性,则输出si 但是,我总是从UserNotification.resx获取

我添加了新的Rosource文件UserNotification.resx。然后我添加了两个本地化文件,并将其命名为UserNotification.hr-hr.resx和UserNotification.sl-SI.resx。(后面的线程:)


然后我把Windows语言改为“si”。如果我使用
System.Globalization.CultureInfo.CurrentCulture.ToString()打印当前区域性,则输出si


但是,我总是从UserNotification.resx获取字符串。它无法识别本地化资源文件。

如果使用多线程,.NET本地化中的问题是,您需要为生成的每个线程手动设置区域性(如果它与windows区域性不同,如果用户可以选择所需的语言)。它不是从主线程继承的

创建新线程后,在启动之前,应将其区域性设置为主线程的区域性(通常使用windows的默认区域性)


因此,系统显示出良好的文化。但现在的帖子怎么说呢?也许由于某种原因,应用程序以不同的区域性启动,所以这就是它加载默认资源文件的原因?无论如何,没有理由不手动设置当前区域性。当您想让用户选择更改应用程序的语言时,通常需要这样做。

尝试在代码中更改CurrentUICulture,看看会发生什么?如果我将其添加到App.xaml.cs构造函数中,它会起作用:Thread.CurrentThread.CurrentUICulture=CultureInfo.GetCultureInfo(System.Globalization.CultureInfo.CurrentCulture.ToString());但这是正确的方法吗?如果我使用多线程呢?System.Globalization.CultureInfo.CurrentUICulture.ToString()和Thread.CurrentThread.CurrentUICulture.ToString()返回相同的输出:en US,但System.Globalization.CultureInfo.CurrentCulture.ToString()返回hr(==Windows->控制面板->区域和语言格式属性)所以我必须设置CurrentThread.CurrentUICulture,因为没有System.Globalization.CultureInfo.CurrentUICulture的setter?是的,您必须将CurrentThread.CurrentUICulture和CurrentThread.CurrentCulture设置为所需的值。您的System.Globalization.CultureInfo(英文版)设置错误,这就是您的应用程序使用默认资源文件的原因。如MSDN对Thread.CurrentUICulture所说:“获取或设置资源管理器在运行时用于查找区域性特定资源的当前区域性。”。