可本地化的WPF应用程序 - UICulture设置导致资源问题

时间:2011-05-21 05:15:55

标签: c# wpf visual-studio localization currentuiculture

我想创建一个可本地化的WPF应用程序。我按照AssemblyInfo.cs文件的注释中的说明进行了操作:

//In order to begin building localizable applications, set 
//<UICulture>CultureYouAreCodingWith</UICulture> in your .csproj file
//inside a <PropertyGroup>.  For example, if you are using US english
//in your source files, set the <UICulture> to en-US.  Then uncomment
//the NeutralResourceLanguage attribute below.  Update the "en-US" in
//the line below to match the UICulture setting in the project file.

完成此操作后,我的应用程序不再启动了。我正在使用自定义App类:

namespace Namespace
{
    public partial class App : Application
    {
        [STAThread()]
        [SecurityPermission(SecurityAction.LinkDemand)]
        public static void Main()
        {
            var app = new App();

            app.InitializeComponent();
            app.Run();
        }


        [DebuggerNonUserCode()]
        public void InitializeComponent()
        {
            this.StartupUri = new Uri("MainWindow.xaml", UriKind.Relative);
        }
    }
}

<ns:App
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:ns="clr-namespace:Namespace">

</ns:App>

以前一切都运转良好。我假设配置的UICulture设置与为MainWindow.xaml指定的设置之间存在某种不匹配,但我不知道如何修复它。

2 个答案:

答案 0 :(得分:10)

我有类似的效果;在AssemblyInfo.cs中,NeutralResourcesLanguage属性需要UltimateResourceFallbackLocation.Satellite参数:

// Uncommenting the following line --> OK
[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)]
// Uncommenting the following line --> IOException: Cannot locate resource 'app.xaml'.
// [assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.MainAssembly)]
// Uncommenting the following line --> IOException: Cannot locate resource 'app.xaml'.
// [assembly: NeutralResourcesLanguage("en-US")]

答案 1 :(得分:0)

来自https://docs.microsoft.com/en-us/dotnet/framework/wpf/advanced/wpf-globalization-and-localization-overview

的一些背景信息

WPF本地化最佳做法

  • 将AssemblyInfo。*中的UltimateResourceFallback位置设置为 指定适当的备用语言(例如, [assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)]
  • 如果您决定通过以下方式在主程序集中包含源语言 在项目文件中省略<UICulture>标签,将 UltimateResourceFallback位置作为主程序集,而不是 卫星(例如[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.MainAssembly)]