本地化WPF应用程序不起作用?

时间:2017-07-27 13:49:46

标签: c# .net wpf xaml globalization

我必须在这里遗漏一些东西。

我在VS2015中创建了一个全新的WPF应用程序。我创建了一个资源'String1'并将值设置为'fksdlfdskfs'。

我更新了默认的MainWindow.xaml.cs,以便构造函数具有:

    public MainWindow()
    {
        InitializeComponent();
        this.Title = Properties.Resources.String1;
    }

运行应用程序,它运行正常,我的窗口标题是fksdlfdskfs。

在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.

//[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)]

所以我将以下内容添加到我的WpfApplication5.csproj文件中并在VS中重新加载项目:

<UICulture>en-US</UICulture>

然后取消注释AssemblyInfo.cs中的以下行:

[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)]

如果我现在去运行应用程序,应用程序不再运行,我在读取资源的行上得到以下异常:

  

System.Resources.MissingManifestResourceException:找不到任何内容   适合特定文化或中立的资源   文化。确保   “WpfApplication5.Properties.Resources.en-US.resources”是正确的   在编译时嵌入或链接到程序集“WpfApplication5”,或   所需的所有卫星组件都是可装载和完全的   签名。

如果我在AssemblyInfo.cs文件中将UltimateResourceFallbackLocation.Satellite更改为UltimateResourceFallbackLocation.MainAssembly,我会收到以下异常:

  

System.IO.IOException:找不到资源'mainwindow.xaml'

我做错了什么或我错过了什么?

1 个答案:

答案 0 :(得分:4)

您没有被迫使用代码进行本地化,您只需使用<?php $form = ActiveForm::begin([ 'id' => 'update-form', 'action' => Url::to(['site/update', 'id' => $id]), ]); ?> 标记扩展来绑定到静态字段:

x:Static

只需确保您的资源文件访问修饰符设置为公共

Screen resource file

您收到的错误消息通常意味着您没有<Window xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:properties="clr-namespace:SandBox.Properties" Title="{x:Static properties:Resources.TitleSandbox}"> </Window> 文件,因为此处Resource.en-US.resx告诉您的应用使用en en-US资源文件作为默认来源。 如果您想快速摆脱错误

,请添加名为[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)]的文件

我个人为WPF应用本地化做的是:

  • 我原样Resources.en-US.resx,这意味着AssemblyInfo.cs(没有语言ID)文件将是默认文件(通常是en-US)
  • 我在默认旁边创建了另外的Resource.resx文件,如下所示: sample

    它通常与Resource.{id}.resx相同,但在匹配语言

  • 中翻译
  • 我使用用户可设置的语言ID强制启动文化(通常在Resource.resx中),以便用户可以更改应用程序语言:
App.xaml.cs