首先,我不太了解如何处理物品和如何处理物品.
该项目:
目前,我正在开发一个解决方案,其中包括ASP.NETAPI、WPF和库项目(都是.NET6.0).该库包含用于提供本地化字符串的.resx文件.我已经按照this guide实现了本地化.除了在某些情况下,这种方法运行得很好.主要问题在WPF项目中.我将简化命名空间,使其更易于访问:
- WPF项目:
My.Namespace.WPF
- 图书馆项目:
My.Namespace.Language
为了获得所有支持的语言,我在My.Namespace.Language
中使用了这个类:
public class LanguageProvider
{
public static IEnumerable<CultureInfo> GetSupportedLanguages()
{
List<CultureInfo> supportedLanguages = new();
CultureInfo[] cultures = CultureInfo.GetCultures(CultureTypes.NeutralCultures);
foreach (CultureInfo culture in cultures)
{
try
{
using ResourceSet? rs = Resources.Strings.ResourceManager.GetResourceSet(culture, true, false);
if (rs is not null && culture.TwoLetterISOLanguageName != "iv")
{
if (!supportedLanguages.Contains(culture))
{
supportedLanguages.Add(culture);
}
}
else if (culture.TwoLetterISOLanguageName == "en")
{
supportedLanguages.Add(culture);
}
}
catch (Exception)
{
}
}
return supportedLanguages;
}
}
该项目还包含包含Strings.resx
和Strings.de.resx
(命名空间My.Namespace.Language.Resources
)的资源文件夹.要从我的WPF项目中的资源中获取字符串,我只需使用以下命令:
string customText = My.Namespace.Language.Resources.Strings.sometext;
问题是:
在第一次调用GetSupportedLanguages()
之后初始化的所有对象都不能访问Strings
并抛出ObjectDisposedException: Cannot access a closed resource set.
,这通常是在MainWindow
初始化之前调用的.因此,我甚至不能展示它.我是否必须以不同的方式实现可用语言的列表,因为资源是在某个点上部署的?