我正在尝试在我的 C# WPF 应用程序中实现多语言国际化支持。我已遵循安装指南,但在尝试生成相应的资源 DLL 文件时遇到问题。
以下是我尝试过的步骤:
public static string GetLocalizedString(string key, string resourceFileName = "Languages", bool addSpaceAfter = false)
{
var localizedString = String.Empty;
// Build up the fully-qualified name of the key
var assemblyName = System.Reflection.Assembly.GetExecutingAssembly().GetName().Name;
var fullKey = assemblyName + ":" + resourceFileName + ":" + key;
var locExtension = new LocExtension(fullKey);
locExtension.ResolveLocalizedValue(out localizedString);
// Add a space to the end, if requested
if (addSpaceAfter)
{
localizedString += " ";
}
return localizedString;
}
返回一个字符串。它有三个参数:
key
:用于指定要获取的本地化字符串的关键字或标识符。resourceFileName
:用于指定资源文件的名称,默认值为“Languages”。addSpaceAfter
:一个布尔值,如果为 true,则会在本地化字符串的末尾添加一个空格。该方法用于根据给定的键从指定的资源文件(默认为“Languages”)获取本地化字符串。
lex:LocalizeDictionary.DesignCulture="en-US"
lex:ResxLocalizationProvider.DefaultAssembly="AppSample"
lex:ResxLocalizationProvider.DefaultDictionary="Langs"
配置WPF的Xaml文件支持多种语言,并在不同的语言环境中显示相应的本地化资源。
public void ChangeLanguage(string languageCode)
{
WPFLocalizeExtension.Engine.LocalizeDictionary.Instance.Culture = new CultureInfo(languageCode);
}
.resx 文件的配置详细信息为:
但是,在第6步时,我遇到了以下问题:
生成时会报错
The file "obj\x64\All\en-US\DarkMode 2.resources.dll" cannot be copied because the file cannot be found.
我已经检查了我的代码和配置,但仍然无法解决问题。我想知道是否有人在类似的情况下遇到过类似的问题,或者是否有人知道如何正确生成多语言支持的资源 DLL 文件。
这是我使用的环境和工具:
我的英语能力不好。如果您有任何疑问,请随时询问。任何有关如何解决此问题的建议或指导将不胜感激。谢谢!
我以前尝试过:
这个问题困扰了我很多天,直到现在我终于找到了问题的原因。这个问题在之前的版本中并不存在,但是在最近的更新中出现了。因此,我使用 Git 比较了之前版本和当前版本的工作树,并找出了问题所在。在之前的版本中,对编译辅助程序集没有任何限制,导致当前版本设置为始终编译辅助程序集时出现这个问题。要解决这个问题,只需在项目的
.csproj
文件中将辅助程序集的编译设置为False即可。
<Project>
<PropertyGroup>
<GenerateSatelliteAssembliesForCore>false</GenerateSatelliteAssembliesForCore>
</PropertyGroup>
</Project>