如何将本地化资源文件嵌入到 .NET 7 WPF 应用程序的主程序集中?

问题描述 投票:0回答:1

this example之后,我在我的WPF应用程序的

.csproj
文件中包含了一些本地化资源文件:

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>WinExe</OutputType>
    <TargetFramework>net7.0-windows</TargetFramework>
    <Nullable>enable</Nullable>
    <UseWPF>true</UseWPF>
    <UICulture>en</UICulture>
  </PropertyGroup>

  <ItemGroup>
    <EmbeddedResource Include="locale.en.restext" />
    <EmbeddedResource Include="locale.es.restext" />
    <EmbeddedResource Include="locale.fr.restext" />
  </ItemGroup>

</Project>

然后我可以创建一个

ResourceManager
实例并使用
.GetString( String, CultureInfo )
.

回退机制或多或少像宣传的那样除了...默认 UICulture 的最终回退似乎不起作用 - 即使我在我的类中包含以下属性:

[assembly:NeutralResourcesLanguage( "en" ) ]

而且我相当确定那是因为我的

.en.restext
文件是作为附属程序集构建的,而不是包含在主程序集中。

PS > Get-ChildItem .\bin\Debug\net7.0-windows

    Directory: C:\Users\user\path\to\proj\bin\Debug\net7.0-windows

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d----          2023-05-18    23:56                en
d----          2023-05-18    23:56                es
d----          2023-05-18    23:56                fr
-a---          2023-05-18    23:56            679 Proj.deps.json
-a---          2023-05-18    23:56           6144 Proj.dll
-a---          2023-05-18    23:56         154624 Proj.exe
-a---          2023-05-18    23:56          12888 Proj.pdb
-a---          2023-05-18    23:56            266 Proj.runtimeconfig.json

特别是因为如果我在我的课程中包含以下内容,那么回退机制将完美运行:

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

那么我如何在我的

.csproj
文件中指定本地化资源应该包含在主程序集中,而不是在附属程序集中?

c# wpf localization
1个回答
0
投票

好吧,经过更多的思考并试图弄清楚这个恐怖......我想我已经破解了它。

很简单,当我在我的

.csproj
文件中指定以下内容时:

<!-- ... -->
    <UICulture>en</UICulture>
<!-- ... -->

那么这意味着我应该命名“Neutral Culture”资源文件而没有其识别

en
后缀。因此,我应该在
.csproj
文件中将其简单地称为:

<!-- ... -->
    <EmbeddedResource Include="locale.restext" />
<!-- ... -->

当我这样做时,它会被编译到主程序集中。

.GetString( String, CultureInfo )
的最终回退无需指定即可完美运行:

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

支持 Microsoft 开源其大量 .NET 代码。 (即使它是神秘的东西,比如 MSBuild 定义。)

我很感激我不再需要用

.restext
手动预编译
resgen
文件,因为很多文档仍然说。

一般来说,他们的文档是最重要的。

但我确实认为他们应该更新描述 SDK 样式项目的资源和本地化的页面。

© www.soinside.com 2019 - 2024. All rights reserved.