在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 )
。
回退机制的工作原理或多或少与宣传的一样。***Except...***默认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
文件中指定本地化资源应包含在主程序集中,而不是附属程序集中?
1条答案
按热度按时间hzbexzde1#
好吧,经过一些更futzing周围,并试图使意义this horror ...我想我已经破解了。
很简单,当我在
.csproj
文件中指定以下内容时:那么这意味着我应该将资源文件命名为“Neutral Culture”,而不使用其标识后缀
en
。这意味着它将出现在.csproj
***中,而不是像这样:但是***像这样:***
当我这样做时,它会被编译到主程序集。
.GetString( String, CultureInfo )
的最终回退可以完美地工作,而无需指定:支持微软开放他们的.NET代码。(即使是神秘的东西,比如MSBuild定义。
我很感激我不再需要像很多文档中说的那样,用
resgen
手动预编译.restext
文件。一般来说,他们的文档都是顶级的。
但我认为他们应该更新描述SDK风格项目的资源和本地化的页面。