我有这样的程序设置:
逻辑/交互项目具有用于各种不同语言的资源文件(例如'Resources.de.resx','Resources.ja.resx'等...),而示例项目仅具有单个资源文件(' Resources.resx')。
示例项目无需修改即可正常运行和启动,但是当我将以下行添加到示例项目中时:
Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo("fr");
我一直收到以下错误:
System.IO.IOException: 'Cannot locate resource '<resource-name>.xaml'
根据我将行放入项目的位置,更改位置。
我不太确定更改UI文化的后果,尤其是不确定资源文件和本地化的工作方式-因此,有关本地化更改可能导致资源错误的任何指示都将非常有帮助。
答案 0 :(得分:1)
您可能丢失或错误配置了文件NeutralResourcesLanguage
中的AssemblyInfo.cs
设置。打开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)]
因此,您必须取消注释定义NeutralResourcesLanguage的最新行,并确保该行中的语言代码与您的中性语言完全匹配。因此,例如,如果您在应用程序中选择"fr"
作为中立语言,则无法在其中设置"fr-FR"
,反之亦然。
第二个参数告诉应用程序在哪里可以找到本地化资源DLL中未包含的资源。可用的两个选项是:
就我而言,我已经包含了该设置,但是我犯了两个错误:我将中性语言定义为es-ES
,但仅在其中设置了es
,并且未指定后备模式设置为Satellite
,因此我想未定义时默认的默认值为MainAssembly
。